Intel Skylake pod Gentoo, czyli moje boje

W ostatnim czasie postanowiłem wymienić swój leciwy już sprzęt na coś bardziej współczesnego. Po paru tygodniach czytania recenzji, zasięgania języka u różnych ludzi wybór padł na jeszcze świeżą platformę Skylake od Intela, mimo nieco niepokającym doniesieniom o bugach w mikrokodzie. Pomijając mniej ciekawe z punktu widzenia tego wpisu elementy, ostateczny komputer został wyposażony w czterordzeniowego i5-6400, płytę Gigabyte Z170-HD3P (celowo model z sieciówką Realteka, bo te w przeciwieństwie do Intela działają out-of-the-box na odpowiednio nowych wersjach kernela) i SSD Samsung Evo 850 EVO (120GB, bo tyle swobodnie starcza mi na system, a dane trzymam na klasycznym, talerzowym HDD). Celem tego wpisu będzie zrelacjonowanie ogólnych wrażeń, kompatybilności i paru niespodzianek, które spotkały mnie mimo starannego rekonesansu. Cóż, zaczynajmy!

Na dzień dobry napotkałem drobny problem z bootowaniem Gentoo z LiveUSB. Sytuacji udało się wprawdzie zaradzić dość szybko dzięki własnej zapobiegliwości i wiedzy Wujka Google. Sprawa rozbija się o to, że po pierwsze płyty Gigabyte z ichnim UEFI nie przepadają za pendrive'ami większymi niż 4GB (sic!). Na szczęście miałem pod ręką leciwego Kingstona spełniającego ten wymóg. Podobno na większych nośnikach USB wystarczy utworzyć partycję mniejszą niż 4GB i problem znika. To jednak tylko jedna część problemu. Standardowe iso Gentoo Minimal LiveCD przemienione w bootowalne USB za pomocą unetbootin po prostu nie chciało działać. Jedyne, co udało mi się uzyskać to niewiele mówiący "Boot Error". Zadziałało jednak oparte na Gentoo sysrescuecd, prawdopodobnie dzięki temu, że zawiera odpowiednie pliki EFI. Na szczęście kernel miało na tyle nowy, że nie było problemów z obsługą żadnego z podzespołów. Na przyszłość będę po prostu używał sysrescuecd albo zainteresuję się isohybrid, które według znalezionych w Internecie informacji pozwala odpowiednio podrasować iso.

Po tych pierwszych kotach za płoty poszły jednak zdecydowanie gładko. Dla oszczędzenia czasu skopiowałem poprzedni system i naniosłem niezbędne zmiany w make.conf:

CFLAGS="-O2 -march=native -fomit-frame-pointer -pipe" (tutaj bez zmian)
CXXFLAGS="${CFLAGS}" (tu również)
CPU_FLAGS_X86="aes avx avx2 fma3 mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
MAKEOPTS="-j4 -s"
VIDEO_CARDS="intel i965"

Następnie wziąłem się za kernel:

CONFIG_SCHED_SMT=y
CONFIG_NR_CPUS=8
CONFIG_SATA_AHCI=y
CONFIG_INTEL_IOMMU=y
CONFIG_EXTRA_FIRMWARE="i915/skl_dmc_ver1.bin i915/skl_guc_ver1.bin i915/skl_guc_ver4.bin"
CONFIG_DRM_I915=y
CONFIG_SND_HDA_I915=y
CONFIG_X86_ACPI_CPUFREQ=m
CONFIG_SENSORS_IT87=m
CONFIG_SND_HDA_INTEL=m
CONFIG_R8169=m
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_PCI=y

Czas na parę słów komentarza:

SCHED_SMT włącza obsługę HyperThreadingu, bez której ku mojemu zdumieniu system widział tylko dwa z czterech rdzeni procesora i działał wyraźnie wolniej. Przy okazji zmieniłem też NR_CPUS, które z jakiegoś powodu (może jakaś pozostałość po korzystaniu z BFS?) była ustawiona na 2.

INTEL_IOMMU z kolei włączyłem po przeczytaniu, że bez niego karta sieciowa Realteka działa niestabilnie lub wcale.

EXTRA_FIRMWARE zawiera z kolei wszystkie firmware'owe bloby do grafiki Intel Skylake. Umieściłem je tutaj, żeby system mógł podnieść grafikę jak najszybciej w trakcie startu systemu. Wymaga to oczywiście zainstalowania pakietu linux-firmware przed kompilacją kernela.

Reszta opcji jest wybitnie mało ciekawa i dotyczy w przeważającej części sterowników: kontrolera dysków (SATA_AHCI), grafiki (DRM_I915), dźwięku (SND_HDA_I915) oraz czujników (SENSORS_IT87). Trzeba też pamiętać o XHCI potrzebnym dla USB 3.x. Bez niego na Skylake nie zadziała nam żadne urządzenie USB. Przy okazji postanowiłem włączyć cpufreq, gdy zauważyłem w dmesg taką sugestię. Używam go jednak z governorem performance, więc nie ma specjalnie wiele do roboty.

W tym miejscu należałoby wspomnień co nieco o moim układzie partycji. Dysk SSD postanowiłem podzielić w następujący sposób:
/dev/sda1 - /boot, 100MB, ext4
/dev/sda2 - /, 100GB, btrfs
/dev/sda3 - swap, cała reszta miejsca

Upewniłem się przy tym, że partycje są odpowiednio ułożone wywołując:

blockdev --getalignoffs /dev/sdaX

Jak widzicie, tym razem postanowiłem postawić system na btrfs, choćby ze względu na wygodne snapshoty i dużo większą elastyczność. Zamiast stawiać więc system bezpośrednio na głównym subwoluminie, utworzyłem oddzielny o nazwie @root i tam umieściłem system.

Po skompilowaniu kernela, przekompilowaniu pakietów mesa i x11-drivers byłem już o krok od sukcesu. Sęk w tym, że grub2 za nic w świecie nie chciał zobaczyć dysku systemowego. Nie wiem czy działo się tak za sprawą osobnej partycji /boot czy faktu, że system postawiłem na subwoluminie btrfs, ale koniec końców straciłem 2 godziny na próbowaniu różnych kombinacji opcji i targetów, aż ostatecznie wróciłem do starego, dobrego gruba 0.97, który radośnie zabootował mi system. Na szczęście zapobiegawczo założyłem oddzielną partycję /boot jako ext4, co oszczędziło mi kombinowania. Musiałem jedynie pamiętać o podaniu rootflags=subvol=@root w wierszu poleceń kernela. Być może grub2 zadziałałby znakomicie, gdybym po prostu zmienił domyślny subwolumin. Może jeszcze kiedyś wrócę do tematu.

EDIT: Okazuje się, że problem z grubem2 był związany pośrednio z XHCI i klawiaturą USB. grub2 owszem działał, kiedy go pierwszy raz uruchomiłem, ale nie działała w nim klawiatura. Usiłując naprawić klawiaturę dodałem do /etc/default/grub linijkę GRUB_PRELOAD_MODULES="uhci ehci usb_keyboard", co z kolei spowodowało, że grub2 przestał widzieć dyski ("Unknown disk"). Dopiero teraz, prawie rok później połączyłem ze sobą te dwa fakty. I rzeczywiście to zakomentowaniu tej linijki i ponownym wygenerowaniu configa, grub2 bootuje... ale klawiatura nadal nie działa, a dokładnie zawiesza gruba po wciśnięciu klawisza. Ale ten problem też udało mi się naprawić tworząc plik /etc/grub.d/00_at_keyboard o treści:

#!/bin/sh
cat <<EOF
insmod at_keyboard
terminal_input at_keyboard
EOF

Następnie przebudowałem config gruba. Co to robi? Zamiast używać modułu klawiatury USB, używa klawiatury ps/2 emulowanej przez bios. Klawiatura działa poprawnie, nic się nie wiesza, grub widzi dyski. Nie musiałem nic zmieniać w opcjach biosu. Krótko mówiąc, pełny sukces.

Po zastosowaniu tych kroków system startował i działał wręcz ślicznie. Nie działały jedynie FB_CONDECOR i czujniki. To pierwsze zdziwiło mnie o tyle, że splash działał mi doskonale, kiedy eksperymentowałem ze sterownikiem nouveau na poprzedniej maszynie. Jest to jednak udogodnienie, bez którego mogę spokojnie żyć. Natomiast czujniki są zdecydowanie przydatne. Jednak modprobe it87 kończyło się komunikatem "No such device". Szczęśliwie udało mi się wygrzebać (i to w komentarzach na Phoroniksie!) następujące opcje, które pozwoliły je odpalić:

options it87 force_id=0x8728

Jak zauważyliście, używam zintegrowanej grafiki Intela. Ba, była ona głównym bodźcem do zakupu właśnie Skylake'a. Komputera używam raczej do zadań programistycznych, lekkiego grania i rzecz jasna grzebania w różnych zakamarkach Linuksa. Uznałem więc, że rzeczona karta od Intela będzie więcej niż wystarczająca do moich potrzeb... i miałem rację. Wszystko, czego próbowałem, zadziałało bez zająknięcia, na efektach pulpitu KDE4 począwszy, a na grach odpalanych przez wine i bardziej wymagających indykach jak Dust: An Elysian Tail skończywszy. Remake Grim Fandango działa też bardzo ładnie, poza okazjonalnym mruganiem po wyjściu z menu, którego można się pozbyć po prostu kilka razy pod rząd wchodząc i wchodząc z niego. Poza tym przetestowałem parę emulatorów i nie stwierdziłem żadnych ewidentnych poza niedziałającym przyśpieszaniem w pSX (co prawie na pewno związane jest z wymuszonym vsync). W każdym razie, wszystko działa i to wyraźnie płynniej niż na mojej poprzedniej dedykowanej, ale low-endowej karcie od Nvidii. Dla niektórych gier musiałem jedynie doinstalować libtxc_dxtn, pamiętając także o włączeniu abi_x86_32, żeby działały również 32-bitowe binarki. Zauważyłem też drobne artefakty przy używaniu claws-mail w połączeniu ze stylem oxygen-gtk i okazjonalnie prześwitujące "resztki" menu w LibreOffice, ale nie jest to nic, co uniemożliwiałoby mi wygodną pracę. Warto dodać, że Konsole w końcu odpala się bez błyskania przez ułamek sekundy na biało, jak to było na nvidia-drivers. Ot, mała rzecz, a cieszy. Byłem natomiast lekko zdziwiony, że smplayer z wyjściem obrazu Xv nie skaluje obrazu. Naprawiłem to jednak włączając globalnie obsługę vaapi, które działa bez problemów. Nie czułem więc potrzeby drążenia tematu.

A co z gorącym tematem zabugowanego mikrokodu Skylake i zawieszania się procesora przy "złożonych obliczeniach"? Cóż, ani przy rekompilacji całego systemu, ani przy takich zadaniach jak kodowanie filmów full HD nie miałem żadnych crashy ani innych nieprzyjemności. Dla spokoju sumienia odczekałem ze swoim zakupem aż Gigabyte wyda update biosu z poprawionym mikrokodem... ale ostatecznie nie czułem potrzeby jego instalowania. Aktualizacji mikrokodu można dokonać też spod poziomu systemu używając pakietu sys-apps/microcode-data. Ten jednak nie został oficjalnie zaktualizowany od listopada. Krążący w niektórych zakamarkach Internetu mikrokod jest wprawdzie poprawiony, ale w innym formacie niż oczekiwany przez wyżej wymienione narzędzie. Zaczekam więc spokojnie na oficjalny update całej paczki.

Czy więc poleciłbym innym użytkownikom Linuksa, ze szczególnym wskazaniem na Gentoo, platformę Skylake? Zdecydowanie tak, o ile zabezpieczycie się przed pewnymi podanymi tu drobnymi niedogodnościami. Zaznaczam też, że nie bawiłem się takimi rzeczami jak suspend, VGA passthrough i tak dalej. Zintegrowana grafika sprawuje się znakomicie do prac biurowych, przeglądania Internetu i lekkiego grania, co stanowi 99% mojego korzystania z komputera. Zakup uważam więc za bardzo udany.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *