Linux draaien op de optimale pc
Ubuntu draait op onze bouwvoorstellen in het algemeen prima. Alleen op één machine werkte de netwerkchip niet. En omdat Linux is zoals het is, kan het oplossen van problemen wat moeite kosten.
Installeer Linux en ga meteen aan de slag zonder gedoe te hebben met drivers – met de nieuwste Ubuntu-versie werkt dat met twee van de drie bouwvoorstellen van onze optimale pc op die manier. Bij nadere inspectie vertonen de twee betaalbare gaming-pc’s echter ook gebreken. De derde computer, de Ryzen allround-plus-pc, heeft één groot probleem: de netwerkinterface. Met de juiste hulpmiddelen is dat echter snel opgelost, maar zonder wordt dat een stuk lastiger.
Vergeleken met de vorige generatie optimale pc’s [1] doen de drie huidige computers het wat Linux betreft stukken beter. Bij de datadoorvoermetingen van de systeemschijven, usb-ssd’s en andere interfaces, evenaart Ubuntu Desktop 20.10 het niveau dat we met Windows 10 20H2 halen. De meeste andere functies van de drie pc’s werken ook zonder problemen, zoals de stand-by-modus (suspend-to-RAM/ ACPI S3) en Wake-on-LAN (WoL). Bij de audio-opname en -weergave kwamen vervolgens enkele zwakke puntjes aan het licht: bij alle drie werd de weergave van muziek via de aansluitingen aan de achterzijde onderbroken wanneer we een koptelefoon aan de voorzijde aansloten. Ook kwam er alleen ruis uit de audiopoort aan de achterzijde wanneer we die probeerden te gebruiken zolang er aan de voorzijde een koptelefoon aangesloten bleef.
Het compileren van een Linux-kernel duurt bij de gaming-pc met een Intel-processor het langst. De variant met een Ryzen-cpu is slechts een klein beetje sneller. De allround-pc is stukken sneller door het hogere aantal kernen. Het compileren van de Linux kernel 5.7, wat je met make allmodconfig doet, is in ongeveer 20 minuten klaar, terwijl de Intel gaming-pc er rond 37 minuten voor nodig had.
MATIGE MONITORING
Op alle drie de systemen kun je de temperaturen van de processor, NVMe-ssd en grafische Radeon-kaarten zonder verdere configuratie opvragen via het commando sensors als je het pakket lm-sensors installeert. Als je de Ryzen 5000-optie van de allround-pc gebruikt, heb je om de temperatuurwaarden van de cpu te kunnen uitlezen ten minste Linux 5.10 nodig, die afgelopen december verschenen is.
De tool toont echter niet de temperatuur van het moederbord, de ventilatorsnelheden en de spanningsvoorziening. Het moederbord registreert die
met een ITE IT8688E-sensor, maar de kerneldriver die voor die chips verantwoordelijk is, ondersteunt uitgerekend die variant niet. Dat was al een probleem met een van de optimale pc’s van vorig jaar. Toen, en ook nu, is er nog geen mooie oplossing in zicht omdat de ITE de verantwoordelijke ontwikkelaar de toegang tot de datasheets met de nodige programmeringsinformatie ontzegt. Dat is al heel lang het geval, maar vroeger kreeg hij die uit een onofficiële bron, die helaas opgedroogd is.
Op de lm-sensors projectpagina op Github zijn er bij Issue 154 enkele trucs te vinden om toch meetgegevens uit de chip te halen. Daarvoor moet je echter een alternatieve versie van de verantwoordelijke driver voor hardwaremonitoring voor de kernel compileren, wat nogal een gedoe is. Bovendien moet je daar via een parameter een slordige truc voor inschakelen, die bijwerkingen op het systeem kan hebben. Daarom gaan we daar hier niet verder op in. Je kunt de pc tenslotte ook zonder de monitoring prima gebruiken.
ENERGIEVERBRUIK
Het idle energieverbruik is met de Radeon-kaarten hetzelfde als bij Windows – een stap vooruit als je het vergelijkt met de optimale pc’s van vorig jaar, waarbij het verbruik deels stukken hoger lag [1]. Onder Linux blijft de ventilator van de Radeon RX 550 in de allround-pc echter continu draaien, zelfs als de pc niets doet, terwijl hij onder Windows dan afslaat. Met de voor Linux 5.11 aangekondigde ZeroRPMondersteuning voor gpu’s uit de Polaris-generatie, zou dit vanaf eind februari of begin maart verbeterd moeten zijn. Enkele andere wijzigingen die ook in die versie zouden verschijnen, moeten het idle-energieverbruik van Polaris-gpu’s bij het gebruik van meerdere schermen reduceren. Bij een korte test met twee full-hd-monitoren daalde dit zelfs van 40 naar 32 watt, 8 watt minder dan bij Windows.
Op de twee pc’s met Ryzen-cpu’s toont de kernel bij het opstarten van het systeem voor elke processorkern een waarschuwing in de trant van ‘__common_interrupt: 1.55 No irq handler for vector’. Een zoektocht wees uit dat die meldingen ongevaarlijk zijn. Het betreft een cosmetisch probleem, omdat ze op sommige distributies de fancy graphics blokkeren tijdens het bootproces.
Op de AMD gaming-pc waren er verder geen opvallende zaken. Ook bij de variant met de Intel-cpu hebben we verder weinig opmerkingen: het systeem bleef soms even hangen terwijl de kernel op gang komt. De oorzaak bleef onduidelijk, maar het probleem verdween toen we voor diagnostische doeleinden de grafische opstartanimatie uitschakelden door in het Grub-configuratiebestand de quiet splash $vt_handoff te verwijderen.
Bij Fedora Workstation 33 trad het probleem niet op. Voor de rest gedroeg dat zich tijdens sporadische cross-checks niet significant anders dan Ubuntu Desktop 20.10, waarmee we voornamelijk getest hebben. Pc’s waar Arch Linux of openSUSE
Tumbleweed op draait zouden het vergelijkbaar goed of zelfs iets beter moeten doen omdat hun kernels en grafische drivers nog iets nieuwer zijn. Bij Debian GNU/Linux 10, Linux Mint 20 en Ubuntu 20.04 zijn die componenten daarentegen beduidend ouder, waardoor de kans groter is dat die systemen sommige onderdelen van de pc’s niet zullen ondersteunen. Bij de optimale pc van vorig jaar hebben we ons gewaagd aan enkele experimenten met dergelijke lang onderhouden distributies, met tegenvallende resultaten [1].
VERBINDINGSPROBLEMEN
De grootste problemen traden op bij de allround-pc, waar de netwerkinterface bij zowel Fedora als Ubuntu niet werkt. Geen wonder, want beide gebruiken een kernel gebaseerd op Linux 5.8, maar alleen 5.9 ondersteunt de Realtek RTL8125B-netwerkchip die op het moederbord zit.
Bij Fedora is dat probleem relatief eenvoudig op te lossen omdat de distributie via de reguliere updates de 5.9-kernel ontvangt. Die updates moet je dan wel op de een of andere manier op het systeem krijgen. Het eenvoudigst gaat dat als je een alternatieve netwerkadapter hebt, bijvoorbeeld een PCIekaart of een usb-naar-RJ45 ethernetadapter, die voor minder dan 20 euro te koop zijn.
Als geen aparte adapter hebt, gebruik dan een tweede pc om de kernel pakketten handmatig te downloaden van Fedora’s update-repository’s. Je hebt alleen de drie RPM-pakketten kernel, kernel-core en kernel-modules nodig, waarbij de naam gevolgd wordt door een koppelteken en het hoogste versienummer. Kopieer de RPM’s naar een usb-stick en installeer ze daar vandaan op de nieuwe pc met sudo rpm -ivh. Na een herstart is het probleem voor eens en voor altijd opgelost, want aangezien je een officiële kernel-update installeert, zullen voortaan ook nieuwe via de normale systeemupdate worden geïnstalleerd.
DRIVERS VAN FABRIKANTEN
Bij Ubuntu zijn er twee manieren om de netwerkadapter aan de praat te krijgen: je kunt overstappen naar een 5.9-kernel of een alternatieve driver van Realtek installeren. Voor beide manieren moet je Secure Boot uitschakelen in de BIOS-set-up, heb je een beetje kennis nodig en moet je tijd incalculeren voor het onderhoud.
De zuiverste oplossing is met de driver van de fabrikant, die je vrij snel kunt installeren met behulp van een tweede netwerkadapter. Om dat te doen, installeer je eerst de pakketten gcc en make. Download ook het TAR-archief met de RTL8125B-driver van de Realtek-website (zie de link op de laatste pagina van dit artikel). Pak het archief uit en ga naar de aangemaakte directory. Voer daar sudo ./autorun.sh uit om de driver te compileren, installeren en activeren. Dat werkt ook onder Ubuntu’s 5.8-kernel, hoewel Realtek beweert dat de driver hooguit geschikt is voor Linux 5.6.
Enkele dagen of weken nadat je de pc hebt opgestart, zul je echter merken dat de netwerkinterface niet meer werkt. In dat geval heeft de systeemupdate een nieuwe kernel geïnstalleerd. Je moet het script dan opnieuw uitvoeren om de driver voor die kernel in te stellen. Als het systeem regelmatig updates installeert, zul je dat meestal een of twee keer per maand moeten doen. Je zou dat kunnen automatiseren, maar dat is de moeite waarschijnlijk niet waard: in april verschijnt Ubuntu 21.04 met een nieuwere kernel en een geschikte driver.
KIP EN EI
Als je geen andere netwerkadapter bij de hand hebt, wordt het installeren van de driver van de fabrikant onder Ubuntu lastig. Je zou de driver zelf makkelijk via een andere pc op een usb-stick kunnen zetten – maar dat is niet genoeg, want je moet de driver ook compileren. Daarvoor moet je dan ook nog de pakketten met GCC en Make, en nog eens 17 als dependency’s gedefinieerde pakketten uit de Ubunturepository’s halen. Dat is nogal omslachtig, zelfs als op de andere pc Ubuntu 20.10 staat en je daar de pakketten downloadt via apt-get install --download-only en ze dan uit /var/ cache/apt/ haalt.
Het zal meestal eenvoudiger zijn om tijdelijk of permanent binaire pakketten te installeren met Linux 5.9. Dat kan redelijk snel via Debian-pakketten die de Ubuntu-makers aanbieden in de ‘Kernel PPA Mainline’-repository. Zoek daar naar de directory met de gewenste kernelversie. Wij hebben v5.9.12 gebruikt, die op moment van testen de nieuwste versie van de Linux 5.9-kernel was. Download alle AMD64 pakketten behalve die met ‘low latency’ in de naam. Uiteindelijk moet je vier pakketten naar een usb-stick kopiëren en met dpkg -i op de allround-pc installeren.
ONDERHOUD
Na een herstart zal het systeem die kernel dan, gebruiken samen met een geschikte netwerkdriver. Om geen fixes voor beveiligingslekken te missen, moet je tot Ubuntu 21.04 verschijnt wel regelmatig nieuwe kernelpakketten uit de mainline-PPA installeren. Daarvoor moet je een oogje op de repository houden en nieuwere versies handmatig installeren. Nogal vervelend, aangezien er meestal elke week een of twee nieuwe versies uitkomen, en elke versie verhelpt mogelijk kritieke veiligheidslekken. Je kunt dat werk delegeren aan tools zoals de Ubuntu Mainline Kernel Installer, die is voortgekomen uit de inmiddels propriëtaire UKUU (Ubuntu Kernel Update Utility). De PPA-repository die door de auteurs wordt onderhouden ondersteunde 20.10 op het moment van testen echter nog niet, wat de installatie moeilijk maakt.
Om die redenen raden we aan om de nieuwere kernel weer te verwijderen. Download de Realtek-driver en installeer Make en GCC via het pakketbeheer. Start het systeem opnieuw op, ga naar het grub-bootmenu en naar de geavanceerde opties. Kies een optie zoals ‘Ubuntu, met Linux 5.8.09-25-generic’ en start Ubuntu opnieuw op met de officiële kernel. Stel dan de driver van de fabrikant in zoals hierboven beschreven.
Verwijder vervolgens de kernel van de mainline-PPA dan weer van de schijf om te verhinderen dat je hem per ongeluk weer zou kunnen gebruiken. Voor de Ubuntu-kernel met versienummer 5.9.12-050912 die we hebben gebruikt voor onze tests, ging dat als volgt: sudo apt remove $( dpkg -l | grep ‘linux.*5.9.12-050912’ | awk ‘{ print $2; } )
BIJWERKINGEN
Afgezien van het gedoe met het onderhoud, is er nog een andere reden waarom je er beter aan doet de kernel van de mainline-PPA verder niet te gebruiken: er kunnen problemen optreden met andere pakketten in de distributie omdat die niet zijn afgestemd op de nieuwere kernel. Dat geldt vooral voor pakketten die hun eigen kernelmodules toevoegen, zoals VirtualBox en de grafische drivers van Nvidia.
We ondervonden een dergelijk probleem daadwerkelijk toen we bij de allround-pc de optionele GeForce RTX 2070 Super installeerden. Het was niet mogelijk om met OpenCL of CUDA de GeForce-gpu te benaderen nadat we de nieuwste versies van de Nvidia-driver hadden geïnstalleerd via Ubuntu’s extra drivers-functie . Dat probleem is te verhelpen met de nieuwste driver van Nvidia’s website, maar op moment van testen bood Ubuntu die niet aan ter installatie. Het is mogelijk om hem handmatig te installeren, maar dat maakt de hele boel weer een extra stapje ingewikkeld.
De nieuwste Nvidia-driver was op het moment van testen ook nodig om een GeForce RTX 3060 Ti te gebruiken. Voor de modellen 3070, 3080 en 3090 bood de extra drivers-functie alleen een driver uit de 450-serie aan, die deze kaarten echter niet ondersteunt. De 455-driver uit de Ubuntu-repository’s doen dat wel, maar die werden niet aangeboden. Je kunt ze met het commando sudo apt install nvidiadriver-455 echter makkelijk achteraf installeren.
We hebben bij de basisconfiguratie van de allround-pc ook gecontroleerd of PCIe-apparaten kunnen worden doorgegeven aan virtuele machines. In principe is dat mogelijk, maar Ubuntu bleef hangen wanneer we een dusdanig geconfigureerde virtuele machine wilden starten.
CONCLUSIE
Linux draait op de drie pc’s niet perfect, maar wel vrij redelijk. De allround-pc toont aan welke valkuilen er kunnen schuilen bij de interactie tussen moderne hardware en Linux-distributies, en wat voor een gedoe ze kunnen opleveren om het op te lossen. Het volgende artikel gaat dieper in op de redenen daarvoor en behandelt ook de vraag of Ubuntu wellicht een slechte keuze is voor pc’s zoals deze.
Literatuur
[1] Thorsten Leemhuis en Daniel Dupré, Linux op de optimale pc 2020, c’t 3/2020, p.50