Geheugen errors detecteren

ECC-geheugen bestaat al flink wat jaren, maar de integratie en mate daarvan in besturingssystemen wisselt vaak. Sun Solaris heeft al jaren ondersteuning om foutboodschappen te begrijpen en af te handelen, maar Linux liep nog wat achter. Sinds 2005 is daar verandering ingekomen en sinds kernel 2.6.21 is de ondersteuning opgenomen in de vanilla-kernel.

Met de komst van de Lenny-release van Debian zijn ook de scripts gekomen om out-of-the-box ondersteuning te krijgen op machines die daar geschikt voor zijn.

$ sudo apt-get install edac-utils

Na een reboot of het handmatig starten van deze dienst kan met behulp van het commando edac-util worden gebruikt om te kijken of er een ondersteunde memory controller met ECC-geheugen is gevonden. Ook kan worden bekeken of er enige fouten zijn.

$ sudo edac-util -s
edac-util: EDAC drivers are loaded. 1 MC detected
$ sudo edac-util
edac-util: No errors to report.

De vraag blijft dan over waarom mensen niet 5 euro per GB geheugen extra betalen om zeker te zijn dat geheugen betrouwbaar. En in een tijd waarin geheugen steeds belangrijker wordt nu encryptie en grotere caches de maatstaf worden. Zeker als je ontwikkelingen als ZFS, Btrfs en LUKS in beschouwing neemt.

Diskinformatie in Linux

Binnen Solaris kan je met behulp van het commando iostat -En opvragen wat oa het serienummer van een harddisk is, maar ook welk versie van de firmware actief is. Maar hoe zie je dit binnen Linux en het was jarenlang de vraag welke file in het /proc-filesysteem je moest hebben. Nu met het commando lshw kan deze informatie opvragen.

$ sudo lshw -C disk
*-disk:0
description: ATA Disk
product: ST31000340AS
vendor: Seagate
physical id: 0
bus info: scsi@0:0.0.0
logical name: /dev/sda
version: SD1A
serial: 9QJ0K3J6
size: 931GiB (1TB)
capabilities: partitioned partitioned:dos
configuration: ansiversion=5 signature=4b1bb901
*-disk:1
description: ATA Disk
product: ST31000340AS
vendor: Seagate
physical id: 1
bus info: scsi@2:0.0.0
logical name: /dev/sdb
version: SD1A
serial: 9QJ0VXJF
size: 931GiB (1TB)
capabilities: partitioned partitioned:dos
configuration: ansiversion=5 signature=e605e605
*-cdrom
description: DVD-RAM writer
product: CDDVDW SH-S223F
vendor: TSSTcorp
physical id: 0.0.0
bus info: scsi@3:0.0.0
logical name: /dev/cdrom
logical name: /dev/cdrw
logical name: /dev/dvd
logical name: /dev/dvdrw
logical name: /dev/scd0
logical name: /dev/sr0
version: SB01
capabilities: removable audio cd-r cd-rw dvd dvd-r dvd-ram
configuration: ansiversion=5 status=nodisc

Het is belangrijk om te beseffen dat oa ook USB-storage zichtbaar wordt bij dit commando.

Daarom dus fanless

Ventilatoren worden in veel computers gebruikt, maar samen met disken gaan ze ook weleens stuk. Zoals nu ook weer en gelukkig op een Energy Efficient processor van AMD, maar de rateling is duidelijk hoorbaar. De bladen van de CPU-fan zijn duidelijk uit balans door speling is de lagers. Iets wat ook duidelijk te zien is aan rotatiesnelheid die van ongeveer 1800/rpm terug zakte naar 1250/rpm en nu weer langzaam zijn opgelopen naar een dikke 1400/rpm.

$ sensors
k8temp-pci-00c3
Adapter: PCI adapter
Core0 Temp: +32.0°C
Core0 Temp: +37.0°C
Core1 Temp: +38.0°C
Core1 Temp: +29.0°C
it8718-isa-0228
Adapter: ISA adapter
in0: +0.91 V (min = +0.00 V, max = +4.08 V)
in1: +1.95 V (min = +0.00 V, max = +4.08 V)
in2: +3.36 V (min = +0.00 V, max = +4.08 V)
in3: +2.94 V (min = +0.00 V, max = +4.08 V)
in4: +3.06 V (min = +0.00 V, max = +4.08 V)
in5: +3.23 V (min = +0.00 V, max = +4.08 V)
in6: +4.08 V (min = +0.00 V, max = +4.08 V) ALARM
in7: +3.36 V (min = +0.00 V, max = +4.08 V)
Vbat: +3.23 V
fan1: 1424 RPM (min = 10 RPM)
fan2: 988 RPM (min = 10 RPM)
fan3: 0 RPM (min = 0 RPM)
temp1: +40.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp2: +29.0°C (low = +127.0°C, high = +70.0°C) sensor = thermal diode
temp3: +84.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
cpu0_vid: +0.900 V

Gelukkig blijft de processor redelijk koel door het energiezuinige design van AMD voor deze processors, want het koelblok is amper warm aan. Ook doet Linux zijn best om de cores op een laagste snelheid te laten lopen en het is duidelijk aan het worden het powermanagement volwassen is geworden.

$ grep ‘^cpu MHz’ /proc/cpuinfo
cpu MHz : 1000.000
cpu MHz : 1000.000

Wel wordt langzaam aan dat er een einde moet komen aan ventilatoren, want op een of andere manier trek ik altijd defecte fans aan. Ook doet dit me denken aan het feit of er ook waarschuwingen komen dat fans niet draaien op een Linux-machine. Iets wat bij sommige SMART-events al wel gebeurt als je DeviceKit gebruikt.

Linux vs dmidecode

Toen bij Linux 2.4 verschillende hash- en encryptie-algorithme in de kernel werden opgenomen om zo gebruik te maken van hardware acceleratie stonden sommige mensen raar te kijken. Toen bij Linux 2.6 oa veel tijd werd gestoken in udev om dit te implementeren waren er ook veel negatieve geluiden, maar nu is men begonnen met het afbouwen van HAL en te vervangen met DeviceKit. Hiermee zal er een nauwere en betere ondersteuning komen voor devices om toe te voegen en te verwijderen en dit ook door te geven aan userland applicaties.

Ook maken Linux-developers op andere plekken vorderingen zoals bij het uitlezen van hardware. Waar vroeger nog de applicatie dmidecode nodig was om een BIOS goed uit te lezen kan dit nu direct via het sys-filesysteem. Het commando dmidecode moet met root-privileges draaien helaas of de binary moet setuid zijn.

$ sudo dmidecode --type bios | grep Version
Version: F5

Met de oplossing via het sys-filesysteem kan het ineens als elke gebruiker. De gebruiker heeft geen toegang meer nodig tot de memorypage waar alle informatie staat en speelt de kernel zijn rol als abstractielaag zoals het hoort.

$ cat /sys/devices/virtual/dmi/id/bios_version
F5

De tijd is dus gekomen om actief dmidecode te gaan opruimen en bij Debian is die roep er ook.

ZFS vs Btrfs

Solaris 10 ZFS EssentialsIn 2006 integreerde Sun Microsystems een nieuw filesystem onder de naam ZFS in Solaris 10 en vele waren skeptisch. Ook was er voldoende commentaar vanwege de gekozen licentie en het commentaar is er nog steeds nu ZFS ook ontbreekt in Snow Leopard van Apple. Met de overname door Oracle wordt het er mogelijk niet beter op, maar toch staat er een boek voor ZFS op de roadmap.

In dezelfde periode is Oracle begonnen aan Btrfs voor Linux welke in de kernel is op genomen sinds Linux 2.6.29. Nu begint ZFS redelijk volwassen te worden en het heeft wat jaren geduurt, maar hoe staat Btrfs ervoor. Een virtuele testmachine met een paar lege disken en de laatste versie van Debian Testing zou dus voldoende moeten zijn. Helaas is dit nog geen succesvolle combinatie en geeft aan dat Btrfs misschien nog niet helemaal volwassen is.

Als we naar de techniek en implementatie kijken dan zijn er nog meer verschillen tussen ZFS en Btrfs. Waar ZFS beschikt over RAID 0, 1, 10 maar ook over verschillende RAIDZ generaties en combinaties hiervan waarmee RAID 5 en 6 worden geimplementeerd. Dit terwijl Btrfs voorlopig alleen beschikt over RAID0, RAID1 en RAID10 zonder enige uitbreidingen hierop. Ook blijft Btrfs vertrouwen op bv andere RAID- en LVM-oplossingen, maar ook op de hardware die altijd correct is. Een mooi punt van oa ZFS is dat het de hardware meeneemt in de beslissingen waar het snelst te lezen is bv.

Op bijna alle punten lijkt ZFS volwassen te zijn en behoeft Btrfs nog vele jaren ontwikkeling terwijl ZFS al in 2006 productierijp was. En hoewel ZFS strict in Solaris verweven is en een niet GPL-licentie heeft is het zeer zeker de moeite waard om te gebruiken. Het is misschien ook de vraag of met de komt van Solaris 11 en de uitkomst van de Sun-Oracle merger het nog wel interessant is naar Btrfs te kijken. Zeker als je kijkt naar hoe volwassen OpenSolaris nu is tov wat Linux niet biedt. Alleen een licentie is vaak niet voldoende of het moet de moeite waard zijn om te wachten, maar live upgrade met ZFS is tegenwoordig echt de moeite waard en een verademing.