borm.no

Overengineering

homeserver

Oppdatert

Jeg har brukt hele helgen på å prøve å gjøre Docker-stacken på NAS-en min raskere. Hele stacken deler plass med diskene der all medie-innholdet ligger, som er forsåvdt greit det, men når man både strømmer media, utfører backups og scanner metadata, står programmer i kø mens diskene utfører sine I/O oppdrag. Tanken ble dermed å flytte config-filer, databaser, applikasjonsdata osv. over på en ekstern SSD. Slik kunne mediefilene ligge i fred for seg selv på NAS-en.

Tanken var at en SSD skulle være mye bedre på alle de små operasjonene som programmer som Jellyfin gjør hele tiden: lese databaser, lagre historikk, oppdatere metadata og finne frem små filer, alt uten å vente på disk I/O. Men etter en kveld med backups og migreringer over på SSD’en føltes systemet faktisk tregere enn før.

Dermed begynte feilsøkingen. Først sjekket jeg at disken faktisk var koblet til med USB 3 og hadde en forbindelse på 5 Gbit/s. Det hadde den. Deretter kjørte jeg flere hastighetstester. Lesing og skriving av store filer nådde maks 80–110 MB/s, som er ganske shit for en SSD. Selv tester med mange små skriveroperasjoner klarte disken ikke å ta unna som forventet, bare rundt 25–30 operasjoner i sekundet. Det er akkurat denne typen arbeid databaser gjør mye av, var kanskje min SSD på ferd med å dø?

Jeg oppdaget også at NAS-en brukte en eldre måte å kommunisere med SSD’en på, kalt BOT, i stedet for den nyere UAS-protokollen. UAS lar disken håndtere flere forespørsler samtidig og passer mye bedre til SSD-er. Etter å ha stoppet containerne, demontert disken og manuelt aktivert UAS gikk antallet samtidige forespørsler fra 1 til 30. Bedre, men fremdeles ikke i nærheten av det man ville ha forventet av en vanlig SSD. Og hastigheten ble ikke bedre i det hele tatt.

Da jeg plugget ut SSD’en for 4. gang tok jeg for ordens skyld og sjekket modell-nummeret, og da viste det seg at dette ikke var en SSD men en helt vanlig, crusty, roterende harddisk…

Så etter backup, checksums, flytting av Docker-data, benchmarking, USB-feilsøking og eksperimentering med lagringsdrivere endte «optimaliseringen» med å gjøre systemet tregere enn det var i utgangspunktet, og jeg kunne ha spart meg for en helg med feilsøking ved å bruke 2 sekund ekstra på å lese baksiden av disken.

En ganske god påminnelse om at det kan være lurt å verifisere hva slags maskinvare man faktisk har før man begynner å optimalisere resten av systemet.