Σημειώσεις διαχείρισης γραφικών intel σε linux

Οι επεξεργαστές/κάρτες γραφικών της intel βρίσκονται αναμφίβολα στην πλειοψηφία των υπολογιστών, καθώς περιλαμβάνονται σχεδόν σε κάθε επεξεργαστή της, ενώ αναμένεται να κυκλοφορήσουν και ανεξάρτητη κάρτα γραφικών. Σε αυτή τη δημοσίευση συγκεντρώνω πληροφορίες που αφορούν κυρίως την παρακολούθηση των επιδόσεών τους, καθώς θεωρώ ότι ένας καινούργιος χρήστης σε linux θα δυσκολευτεί να τις αποκομίσει.

Για να βρούμε το μοντέλο της κάρτας: lspci | grep VGA και αν πιστεύετε ότι αντί για μοντέλο επιστρέφει βλακείες, τότε: sudo update-pciids

Εγκαθιστούμε το πακέτο intel-gpu-tools, από τα αποθετήρια της διανομής μας, το οποίο παρέχει ένα σετ εργαλείων, μεταξύ των οποίων και αυτά που αναφέρω στη συνέχεια.

Παρακολούθηση χρήσης επεξεργαστή γραφικών με intel_gpu_top

Τρέχουμε (με δικαιώματα υπερχρήστη): sudo intel_gpu_top
Το συγκεκριμένο πρόγραμμα δείχνει στατιστικά χρήσης για τα επι μέρους υποσυστήματα του επεξεργαστή γραφικών. Περισσότερα: https://stackoverflow.com/questions/28876242/interpretation-of-intel-gpu-top-output

Παρακολούθηση συχνοτήτων με intel_gpu_frequency

Τρέχουμε: sudo intel_gpu_frequency
Μαζί με τη στιγμιαία συχνότητα του επεξεργαστή γραφικών αναφέρει το ελάχιστο και μέγιστο όριο. Επίσης μπορούμε να θέσουμε συχνότητα με την παράμετρο -s, όπως περιγράφεται στο manpage

cur: 350 MHz
min: 350 MHz
RP1: 350 MHz
max: 1000 MHz

Χρήση intel-gpu-overlay για δημιουργία “επικαλλύματος” με στατιστικά στην οθόνη

Τρέχουμε: sudo intel-gpu-overlay
Επίσης μπορούμε να επιλέξουμε τη θέση του παραθύρου που δημιουργείται: sudo intel-gpu-overlay -G 600x300+1370+0
Περισσότερες λεπτομέρειες για τη σύνταξη των παραμέτρων με: intel-gpu-overlay --help

Screenshot%20from%202019-06-26%2010-12-13

Στο κάτω αριστερό ορθογώνιο επιχειρεί μία (προφανώς αποτυχημένη) απόπειρα αναφοράς κατανάλωσης ενέργειας, ενώ δεξιά είναι ο μόνος τρόπος που έχω βρει να παρακολουθώ τη χρήση μνήμης σε κάρτες γραφικών intel.

Αν θέλουμε να παρακολουθήσουμε την κατανάλωση ρεύματος μπορούμε να χρησιμοποιήσουμε το powerstat με την παράμετρο -D μέσω του RAPL (η κατανάλωση του επεξεργαστή γραφικών συμπεριλαμβάνεται στο uncore).

 Time    User  Nice   Sys  Idle    IO  Run Ctxt/s  IRQ/s Fork Exec Exit  Watts  uncore  pkg-0   core   dram   psys
11:35:59   1.3   0.0   0.5  98.2   0.0    1  13954   6847    0    0    0   1.95    0.35   1.95   0.32   0.30   0.07
11:36:00   1.5   0.0   0.5  98.0   0.0    1  14060   6891    0    0    0   1.88    0.36   1.88   0.24   0.30   0.06
11:36:01   1.8   0.0   0.5  97.7   0.0    1  14094   6909    0    0    0   2.02    0.36   2.02   0.39   0.30   0.06
11:36:02   1.8   0.0   0.5  97.4   0.3    1  14249   6979    1    0    0   2.01    0.36   2.01   0.33   0.30   0.06
11:36:03   2.3   0.0   1.0  96.4   0.3    2  14864   7119    1    0    1   1.92    0.36   1.92   0.26   0.29   0.06

Εγκατάσταση VA-API για αποκωδικοποίηση/κωδικοποίηση βίντεο στον επεξεργαστή γραφικών

Κατά την αποκωδικοποίηση/κωδικοποίηση βίντεο με επιτάχυνση υλικού, μέρος της διεργασίας εκτελείται σε υποσύστημα της κάρτας γραφικών ειδικά σχεδιασμένο για αυτό το σκοπό, αντί για τον επεξεργαστή, το οποίο είναι πιο αποδοτικό και μειώνει τη χρήση του επεξεργαστή απελευθερώνοντας τον για άλλες διεργασίες.

Εγκαθιστούμε τα πακέτα i965-va-driver και vainfo και για Broadwell και νεότερα το intel-media-va-driver. (τουλάχιστον σε debian-based, σε άλλες διανομές ίσως ονομάζονται διαφορετικά? πχ Hardware video acceleration - ArchWiki)

Τρέχουμε vainfo ώστε να δούμε τις κωδικοποιήσεις που υποστηρίζονται:

libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.4 (libva 2.4.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Kaby Lake - 2.3.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointEncSliceLP
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointEncSliceLP
      VAProfileH264MultiviewHigh      :	VAEntrypointVLD
      VAProfileH264MultiviewHigh      :	VAEntrypointEncSlice
      VAProfileH264StereoHigh         :	VAEntrypointVLD
      VAProfileH264StereoHigh         :	VAEntrypointEncSlice
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileVP8Version0_3          :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointEncSlice
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointEncSlice
      VAProfileVP9Profile2            :	VAEntrypointVLD

Δυστυχώς οι περιηγητές σε linux δεν υποστηρίζουν VA-API :rage:, ούτε τις υπόλοιπες τεχνολογίες επιτάχυνσης βίντεο υλικού (Hardware video acceleration), πχ VDPAU. Μπορούμε όμως να χρησιμοποιήσουμε VA-API σε ffmpeg, VLC, mpv κλπ.

Για παράδειγμα, μπορούμε να καταγράψουμε την οθόνη του υπολογιστή μέσω ffmpeg με την ακόλουθη εντολή: ffmpeg -vaapi_device /dev/dri/renderD128 -f x11grab -video_size 1920x1080 -i :0 -vf 'hwupload,scale_vaapi=format=nv12' -c:v h264_vaapi -qp 18 out.mp4

https://trac.ffmpeg.org/wiki/Hardware/VAAPI
Αλλάζουμε το 1920x1080 με την ανάλυση της οθόνης.

Στον VLC μπορούμε να επιλέξουμε μέσω: Tools → Preferences → Input / Codecs → Hardware-accelerated decoding → VA-API video decoder

Με τον mpv: mpv --hwdec=vaapi out.mp4

Παρακολουθήστε τη χρήση πόρων σε ένα βίντεο με intel_gpu_top και top, με και χωρίς vaapi ώστε να συγκρίνετε τη διαφορά.

3 «Μου αρέσει»

Δυστυχώς οι περιηγητές σε linux δεν υποστηρίζουν VA-API :rage:, ούτε τις υπόλοιπες τεχνολογίες επιτάχυνσης βίντεο υλικού (Hardware video acceleration), πχ VDPAU.

That’s where you’re (not really) wrong kiddo:
https://aur.archlinux.org/packages/?K=chromium-vaapi

Ενδιαφέρουσα η παρατήρηση. Το είχα ψάξει πριν και είχα βρει μόνο για επέκταση σε chromium, αλλά τελικά έχει εδραιωθεί περαιτέρω ή υποστήριξη του.

Το patch που δε δέχεται η ομάδα του Chromium είναι απλά η ενεργοποίηση του VAAPI στα Linux, όπως είναι στο Chromium/Chrome OS (που είναι Linux).

Υπάρχει επίσης αυτό:
https://chromium.googlesource.com/chromium/src/+/master/docs/gpu/vaapi.md#verify-vaapi

Γενικά η κατάσταση είναι μπερδεμένη.

Στο Firefox τώρα υποστηρίζεται (ειδικά αν γίνεται χρήση WebRender) το hardware rendering των σελίδων, αλλα για video acceleration ουτε λόγος προς το παρόν.

Η κατάσταση περιγράφεται όμορφα στο Arch Wiki, στο οποιό έκανες και εσύ link, στον τελευτάιο πινακα:
https://wiki.archlinux.org/index.php/Hardware_video_acceleration#Application_support