Sokak kedvenc vesszőparipája, hogy az X a Linux betegsége, mert régi, lassú, overheades. Aki nem él barlangban, annak már bizonyára megütötte a fülét a Wayland is, ami hosszú távon az X kiváltására hivatott. Mit várhat a mezei felhasználó a Waylandtól?
Na ehhez nézzük meg, hogy működik a Firefox kompozit X-en:
A Firefox a Cairo 2D grafikai libet használja a weblapok tényleges megjelenítésre. A Cairo az X-en az Xlib alapműveleteket és az XRender bővítményt használja. Az X ezeket a kéréseket a 2D driver által implementált UXA API-val hardveresen gyorsítja (ezek a 2D driverek nálam az xorg-x11-drv-{intel,nouveau,radeon} csomagban vannak). Az UXA egyébként egy igen letisztult API, csak néhány műveletet gyorsít:
- solid fills: pl. új ablak fehér háttér
- copy area: pl. scroll
- composite: XRender műveletek; pl. antialias karakterek rajzolása, (áttetsző) layerek weblapokon
ez a néhány gyorsított 2D művelet már elég is ahhoz, hogy egész gyorsan tudjunk rajzolni.
Szóval a weblapot az UXA segítségével megrajzoltuk, bekerült egy offscreen bufferbe, azaz a videókártya memóriájába - ahol nem látszik. Most az X a Damage protokollal beszól a kompozit WM-nek, hogy az offscreen buffer (egy része) megváltozott. A WM OpenGL-t, azaz DRI-t használ a scene rendereléséhez. A DRI fő részei a
1., Mesa, amelyk egy OpenGL-kompatibilis API-t biztosít az alkalmazásoknak. Belül pedig a Gallium3D-ra támaszkodik, ami egy alacsonyabb, hardver közeli, de még mindig absztrakt API, amire a nouveau és a radeon driver épül. Az intel elvan Gallium3D nélkül is, ez nem jelent semmi rosszat a teljesítményre (sőt). (A Mesa 3D driverek nálam a mesa-dri-drivers csomagban vannak.)
2., a DRM, ami a kernel része. A DRM driverek (pl. noueveau, radeon, intel) sokat tudnak a 3D videókártya működéséről (de nem mindent - a hiányzó tudás a Mesa driverekben van). Ez kell ahhoz, hogy meg tudja oldani több DRI-t használó alkalmazás párhuzamos futtatását biztonságosan. A videókártyák ugyanis nem ismerik a multitask fogalmát, serializálni kell nekik a 3D számítást igénylő alkalmazások műveleteit, hogy együtt tudjanak működni. Emellett a DRM egyik legfontosabb és legkritikusabb feladata a videómemóriában helyet foglaló objektumok kezelése, a cache koherencia fenntartása, inaktív objektumok "kiswappelése". A /sys/kernel/debug/dri mappában érdekes adatokat ad ki a DRM.
Amikor a WM kérése átment a Mesa-n, a Gallium3D-n, a Mesa hardver driveren majd a DRM-en, akkor áll össze a kép a képernyőn.
Egyébként az egyik nap mint nap használt legkeményebb UI művelet az egérrel scrollozás (a scrollbart használva). Ilyenkor az X-nek (2D drivernek) több MB adatot kellhet másolni mondjuk másodpercenként 60-szor, majd WM-nek mindezt kitenni a képernyőre ugyanennyiszer.
Az X tényleg öreg, toldozott-foldozott, de azért egész jól átszabták a modern hardverekre. A gond nem az, hogy lassú vagy nem tudja kihasználni a modern videókártyákat, hanem az, hogy beáll középre, az egér egyetlen rezzenése is több, rajta átmenő eseményt generál, pedig lehetne rövidebb út is - ez a Wayland. Hogy a Wayland pontosan mennyivel lesz gyorsabb, ez egyelőre kérdéses.
Az aggodalom tárgya az, hogy a jelenleg igen aktívan használt 2D driverek megszűnnek, helyettük csak az OpenGL marad. A szög egyszerűségű UXA API-t könnyű volt nagy hatékonysággal implementálni a driverekben, de OpenGL-nél vasos stacket kell optimalizálni ahhoz, hogy a mezei felhasználó gépén gyakran használt műveletek gyorsak legyenek.
Az Intel igen aktívan kísérletezik az UXA API 3D engine-en való gyorsításával, két projectük is versenyben van: az SNA ami a 2D driverbe épült de a kártya 3D motorját használja, illetve a Glamor, ami egyenesen OpenGL API-t használ az UXA gyorsításra. A Phoronix Glamor, SNA, UXA sebességtesztje szerint egyik sem elvetélt ötlet, ami nem rossz prognózis a Waylandnek: OpenGL alapon is lehet hatékonyan gyorsítani a 2D-t a jelenlegi stacken is - legalábbis intelen.
A Wayland jelentős megkönnyebbülés, de a felhasználó szempontjából nem csodaszer: semmi olyan hardveres gyorsítást nem aknáz ki, amit az Xorg ne tudna.
Egy másik gyakori probléma X-en a tearing, amire a Wayland megoldást ígér. Ugyan az X eredeti tervezői valóban nem sokat aggódtak ezen, de a jó driver X-en se tearingel (legalábbis 1 képernyőn). Az intel driver alapból bekapcsolt triple buffering-el működik, azonban a nouveau-ban alapból ez ki van kapcsolva, a bekapcsolása pedig fagyásokat okozott a 9500 GT-men. A radeon-al még nem kísérleteztem. (Persze egy proper tearless megoldás az X-hez elég sok kérdést felvetne.)
Amikor a nouveau rondán a tearingelt, a gyári driver pedig fagyott, akkor lett elegem az Nvidiaból. Az AMD-nek vannak fizetett Linux fejlesztői a radeon driver körül (talán 4 fő), de kétségtelen, hogy az Intel jár élen a Linux GUI fejlesztésében, egy egész csapatot finanszíroznak, nekik köszönhető a jelenlegi infrastuktúra, amit a nouveau és a radeon driverek is kihasználnak.
Ráadásul nem rég hozták ki az Ivy Bridge archiektúrát, amiben elérhető a HD 4000 és benne a QSV is, ami a DVB transzkódolásnál még jól jöhet.
Nem is volt kérdés, hogy mire váltsak: i7-3770 CPU, H77KC lappal, mellé 16GB RAM, hogy ne szomjazzon. ;) Legrosszabb esetben ebbe még belekerülhet egy PCIe x16 videókártya is.
A Gnome3 3D effekjei bár kb 2x gyorsabbak lettek, még mindig darabosak. Nem is értem, hogy egy olyan videókártya, amelyk gond nélkül elbír egész komplex 3D játékokat, hogy a fenébe akad fenn az egyszerű ablakkezelésen. Textúra az ugyan van dögivel:
$ cat /sys/kernel/debug/dri/0/i915_gem_objects
1834 objects, 460087296 bytes
1316 [1126] objects, 304185344 [129458176] bytes in gtt
2 [2] active objects, 10489856 [10489856] bytes
8 [8] pinned objects, 9625600 [9625600] bytes
1306 [1116] inactive objects, 284069888 [109342720] bytes
0 [0] freed objects, 0 [0] bytes
9 pinned mappable objects, 20111360 bytes
509 fault mappable objects, 23646208 bytes
2145382400 [268435456] gtt total
Asszem' fogok csinálni egy összehasonlítást különböző WM-ek közt is.
Mindenesetre a HD 4000 szerintem jó választás átlag irodai/fejlesztői munkára, a jellemző 20-25 ablakommal egész jól elbír. A videólejátszás tökéletes, a Gnome3 elfogadható sebességű. A CPU teljesítménye pedig egy szörnyeteg! ;)
(Persze facepalm, hogy eddig azt hittem, hogy aránylag reszponzív a GUI-m. Össze se lehet hasonlítani a Firefox sebességét az AMD 4850e és az i7 között - végre minden AZONNAL történik.)
- dap blogja
- A hozzászóláshoz be kell jelentkezni
- 1882 megtekintés
Hozzászólások
Valóban, kicsit sok a réteg. :S
viszont ha opengl-en mennek majd a dolgok, az mit jelent plusz fogyasztásban?
Még azt hozzátenném, hogy nem csak amd finanszíroz driver fejlesztést. A novell és a redhat is beszállt a buliba úgy tudom. (radeon és noveaou)
Egyébként meg: igen, írj még és tesztelj. :))
>>: sys-admin.hu :<<
- A hozzászóláshoz be kell jelentkezni
Ha az OpenGL nem lesz lassabb, akkor valszeg nem is fog többet fogyasztani, márpedig van esély arra, hogy ne legyen lassabb.
Hja, sőt, az X.org alapítvány is nouveau fejlesztőt finanszírozna az Endless Vacation of Code keretében, de direkt csak azt vettem figyelembe, hogy a gyártó hogy áll a finanszírozáshoz, mert ez tükrözheti a jövőbeni stratégiát is.
- A hozzászóláshoz be kell jelentkezni
Érdekes az amd stratégiája. Lényegében 2 drivert fejleszt. De miért? :S
ami biztos, hogy az fglrx forrását sose fogja megnyitni. A nyílthoz kellene találni megoldát, hogy használni lehessen vele azt a pár featurt, ami nem lehet nyílt, pl: uvd.
Egyébként én azt vártam, hogy lassan leáll a zárttal, és csak a nyíltra koncentrál, ami nem történt meg.
>>: sys-admin.hu :<<
- A hozzászóláshoz be kell jelentkezni
Az nvidia és a catalyst driverek rengeteg trükköt használhatnak a jobb teljesítmény érdekében, gondolom azt féltik igazán a konkurrenciától. Ezért lehet az, hogy az AMD kiadta a hardver-specifikációkat, a drivert mégse nyitotta meg. "3D graphics is the art of cheating without getting caught."
Egyébként a catalyst driverrel óriási munka lenne mire beillesztenék a Linux infrastrukturába, hiszen az egy monolit, önmagában ő a Mesa, DRM, DDX, stb. Persze hasznos lenne ha megnyitnák, de hosszú utat kéne megtennie mire elfogadja és felkarolja a közösség.
- A hozzászóláshoz be kell jelentkezni
Meg a drm-et is védik, az nem az övék, így nem adhatják ki. Mindegy, csak lenne már funkcióban 100% a nyílt. :S
Én csak arra lapozok mostanában, mert nekem is volt gondom a gyári nvidia driverrel.
>>: sys-admin.hu :<<
- A hozzászóláshoz be kell jelentkezni
Valaki azt meselje el nekem, hogy sima nouveau mellett hogy lehet ravenni a linuxot a normalis twinview tamogatasara? Mert en most joreszt csak azert hasznalok zart drivert, mert az rendesen felbootol+fut+konfigolhato twinviewbe (asztal kiterjesztes), es kepes elkezelni azt a lehetetlen allapotot, hogy egy 4:3-as monitorhoz van egy 16:9-es laptop kapcsolva, a monitor szelessegeben ugyanakkora, fuggolegesen 168 pixellel magasabb felbontasra van allitva.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Sajna nincs rutinom több képernyővel, tippem sincs.
- A hozzászóláshoz be kell jelentkezni
Igazabol nem toled varom a valaszt, csak itt osszejott sok okos, ilyen temaban latszolag jartas emberke. Hatha...
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Jobb híján elég sokat használom az Inkscape-t, de a sebessége miatt sokat szenvedek. Jó volna valami módszer, amivel fürgébbé lehetne tenni. Elvileg az Inkscape a Cairo-t használja. Próbáltam az SNA-t és a Glamort is, de látványos gyorsulást nem tapasztaltam. A Mesa-t nem fordítottam újra, ahogy azt a Glamor oldalán írták: http://www.freedesktop.org/wiki/Software/Glamor Remélem nincs rá szükség, de ha kell, hát legyen.
A /var/log/Xorg.0.log kivonatosan így néz ki:
...
[ 3.650] (II) "extmod" will be loaded by default.
[ 3.650] (II) "dbe" will be loaded by default.
[ 3.650] (II) "glx" will be loaded by default.
[ 3.650] (II) "record" will be loaded by default.
[ 3.650] (II) "dri" will be loaded by default.
[ 3.650] (II) "dri2" will be loaded. This was enabled by default and also specified in the config file.
[ 3.650] (II) LoadModule: "dri2"
[ 3.655] (II) Loading /usr/lib64/xorg/modules/extensions/libdri2.so
[ 3.658] (II) Module dri2: vendor="X.Org Foundation"
[ 3.658] compiled for 1.12.2, module version = 1.2.0
[ 3.658] ABI class: X.Org Server Extension, version 6.0
[ 3.658] (II) Loading extension DRI2
[ 3.658] (II) LoadModule: "glamoregl"
[ 3.658] (II) Loading /usr/lib64/xorg/modules/libglamoregl.so
[ 3.689] (EE) Failed to load /usr/lib64/xorg/modules/libglamoregl.so: /usr/lib64/xorg/modules/libglamoregl.so: undefined symbol: _glapi_tls_Context
[ 3.689] (II) UnloadModule: "glamoregl"
[ 3.689] (II) Unloading glamoregl
[ 3.689] (EE) Failed to load module "glamoregl" (loader failed, 7)
[ 3.689] (II) LoadModule: "extmod"
[ 3.689] (II) Loading /usr/lib64/xorg/modules/extensions/libextmod.so
[ 3.692] (II) Module extmod: vendor="X.Org Foundation"
[ 3.692] compiled for 1.12.2, module version = 1.0.0
[ 3.692] Module class: X.Org Server Extension
[ 3.692] ABI class: X.Org Server Extension, version 6.0
[ 3.692] (II) Loading extension SELinux
[ 3.692] (II) Loading extension MIT-SCREEN-SAVER
[ 3.692] (II) Loading extension XFree86-VidModeExtension
[ 3.692] (II) Loading extension XFree86-DGA
[ 3.692] (II) Loading extension DPMS
[ 3.692] (II) Loading extension XVideo
[ 3.692] (II) Loading extension XVideo-MotionCompensation
[ 3.692] (II) Loading extension X-Resource
[ 3.692] (II) LoadModule: "dbe"
[ 3.692] (II) Loading /usr/lib64/xorg/modules/extensions/libdbe.so
[ 3.693] (II) Module dbe: vendor="X.Org Foundation"
...
...
[ 4.639] (**) intel(0): DPI set to (102, 102)
[ 4.639] (II) Loading sub module "fb"
[ 4.639] (II) LoadModule: "fb"
[ 4.639] (II) Loading /usr/lib64/xorg/modules/libfb.so
[ 4.641] (II) Module fb: vendor="X.Org Foundation"
[ 4.641] compiled for 1.12.2, module version = 1.0.0
[ 4.641] ABI class: X.Org ANSI C Emulation, version 0.4
[ 4.641] (II) Loading sub module "glamoregl"
[ 4.641] (II) LoadModule: "glamoregl"
[ 4.642] (II) Loading /usr/lib64/xorg/modules/libglamoregl.so
[ 4.644] (II) Module glamoregl: vendor="X.Org Foundation"
[ 4.644] compiled for 1.12.2, module version = 0.4.0
[ 4.644] ABI class: X.Org ANSI C Emulation, version 0.4
[ 4.644] (II) glamor: OpenGL accelerated X.org driver based.
[ 4.661] (II) glamor: EGL version 1.4 (DRI2):
[ 4.689] (II) intel(0): glamor detected, initialising egl layer.
[ 4.689] (II) Loading sub module "dri2"
[ 4.689] (II) LoadModule: "dri2"
[ 4.689] (II) Loading /usr/lib64/xorg/modules/extensions/libdri2.so
[ 4.689] (II) Module dri2: vendor="X.Org Foundation"
[ 4.689] compiled for 1.12.2, module version = 1.2.0
[ 4.689] ABI class: X.Org Server Extension, version 6.0
[ 4.689] (II) UnloadModule: "vesa"
[ 4.689] (II) Unloading vesa
[ 4.689] (II) UnloadModule: "modesetting"
[ 4.689] (II) Unloading modesetting
[ 4.689] (II) UnloadModule: "fbdev"
[ 4.689] (II) Unloading fbdev
[ 4.689] (II) UnloadSubModule: "fbdevhw"
[ 4.689] (II) Unloading fbdevhw
[ 4.689] (==) Depth 24 pixmap format is 32 bpp
[ 4.689] (II) intel(0): [DRI2] Setup complete
[ 4.689] (II) intel(0): [DRI2] DRI driver: i965
[ 4.689] (II) intel(0): Allocated new frame buffer 1408x768 stride 5632, tiled
[ 4.691] (II) UXA(0): Driver registered support for the following operations:
[ 4.691] (II) solid
[ 4.691] (II) copy
[ 4.691] (II) composite (RENDER acceleration)
[ 4.691] (II) put_image
[ 4.691] (II) get_image
[ 4.691] (==) intel(0): Backing store disabled
[ 4.691] (==) intel(0): Silken mouse enabled
[ 4.691] (II) intel(0): Initializing HW Cursor
[ 4.691] (II) intel(0): Use standard UXA acceleration.
[ 4.691] (II) intel(0): RandR 1.2 enabled, ignore the following RandR disabled message.
[ 4.692] (==) intel(0): DPMS enabled
[ 4.692] (II) intel(0): Set up textured video
[ 4.692] (II) intel(0): direct rendering: DRI2 Enabled
[ 4.692] (==) intel(0): hotplug detection: "enabled"
[ 4.748] (--) RandR disabled
[ 4.748] (II) Initializing built-in extension Generic Event Extension
[ 4.748] (II) Initializing built-in extension SHAPE
[ 4.748] (II) Initializing built-in extension MIT-SHM
[ 4.748] (II) Initializing built-in extension XInputExtension
[ 4.748] (II) Initializing built-in extension XTEST
[ 4.748] (II) Initializing built-in extension BIG-REQUESTS
[ 4.748] (II) Initializing built-in extension SYNC
[ 4.748] (II) Initializing built-in extension XKEYBOARD
[ 4.748] (II) Initializing built-in extension XC-MISC
[ 4.748] (II) Initializing built-in extension XINERAMA
[ 4.748] (II) Initializing built-in extension XFIXES
[ 4.748] (II) Initializing built-in extension RENDER
[ 4.748] (II) Initializing built-in extension RANDR
[ 4.748] (II) Initializing built-in extension COMPOSITE
[ 4.748] (II) Initializing built-in extension DAMAGE
[ 4.749] (II) SELinux: Disabled on system
[ 4.763] (II) AIGLX: enabled GLX_MESA_copy_sub_buffer
[ 4.763] (II) AIGLX: enabled GLX_INTEL_swap_event
[ 4.763] (II) AIGLX: enabled GLX_SGI_swap_control and GLX_MESA_swap_control
[ 4.763] (II) AIGLX: GLX_EXT_texture_from_pixmap backed by buffer objects
[ 4.763] (II) AIGLX: Loaded and initialized i965
[ 4.763] (II) GLX: Initialized DRI2 GL provider for screen 0
...
Igyekeztem a lényeget beszúrni, hátha nem hagytam ki semmi fontosat.
Van esetleg valami ötleted? Nagyon megköszönném, ha tudnál segíteni pár jó tanáccsal.
- A hozzászóláshoz be kell jelentkezni
@sandras74: kerlek hasznalj pastebin-t ilyen hosszu kodokhoz. Koszi.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
rendben.
- A hozzászóláshoz be kell jelentkezni