Basic personligt

Daniels personliga blogg

Filsystemen i Linux

För ett tag sedan började min laptop gnälla på läsfel på hårddisken (tack S.M.A.R.T), så jag fick skaffa en ny. Jag tänkte efter i några sekunder, och insåg att jag ville ha en som var dubbelt så stor. På det sättet kunde jag skapa en alternativ rootdisk, t.ex. för att prova om senaste Ubuntu gillade mitt trådlösa nätverkskort.

Att byta disk i Linux är ganska lätt. Eftersom allt är en fil och det inte finns några skumma licenskopplingar, är det i princip bara att kopiera över allting från den gamla disken till den nya (”cd /new/disk ; rsync -vaxH / .” funkar strålande, åtmistone om man gör det efter att ha gått ner i single user mode. Om man inte har ändrat på någonting är det mer eller mindre bara att boota om och vara glad.

Så lätt kan jag ju inte låta det vara, så samtidigt bestämde jag mig för att byta ut filsystemet ext3 mot xfs. Enligt flera jämförelser som jag har läst så skulle xfs vara bättre på det mesta. Datorn kör Fedora Core, som använder en ramdisk. Då är det plötsligt inte så enkelt längre, för på ramdisken finns en /etc/fstab som talar om vilket filsystem som används. Byter man filsystem så måste man därför uppdatera ramdisken också. Först in i /etc/fstab för att ändra där, och sedan kör man ”mkinitrd”. Den har en praktisk flagga ”–fstab” som talar om vilken fil den ska använda. Ett nytt entry i grub.conf med det nya filnamnet på ramdisken, och sedan var det bara att boota om. Happy.

Jag körde några prestandatester på vår SMS-applikation, och lyckades skrämma upp datorn i en last på 50-60, utan att jag märkte någonting. Firefox svarade fortfarande omedelbart. Linux brukar kunna bli lite seg när man kör hårt mot disken, men nu gick det hur bra som helst. Det brukar bara vara Solaris som klarar av sånt. Happy igen.

Jag körde fler tester, och upptäckte något skumt. I normala fall kan programmet hantera ett par tusen SMS per sekund. Man kan konfigurera den att spara alla SMS på disk medan de hanteras, varvid prestandan sjunker lite grand. Nu var den helt plötsligt nere på 20-30 SMS per sekund. Även med lite mer detaljerad loggning hamnade den där nere. Efter lite grävande visade det sig att det var anropet för att öppna en fil för skrivning som tog sjukt lång tid. Med hjälp av resten av min nya disk kunde jag gå igenom både ext3, xfs, jfs och reiserfs, och resultatet var lite oväntat. För en applikation som våran, som ofta skapar nya små (ganska kortlivade) filer, var ext3 absolut bäst. Till och med reiserfs, som ju ska vara bra på små filer, var 10-20% sämre.

Jag fick erkänna mitt misstag med xfs, och gjorde om ”byt filsystem”-tricket och gick tillbaka till ext3. Det gick jättebra, ända tills jag körde testsviten igen. Minsta lilla last och datorn är oanvändbar. Dags att prova jfs, tror jag. Det är ju bara att byta tillbaka om det skulle vara sämre än ext3. Det skulle helt klart vara trevligt med ett filsystem som var snabbt men ändå inte fick det att kännas som om datorn satt fast i polkagrissmet. Någon som har några egna erfarenheter av det?

Andra bloggar om: , , , , .

Annonser

februari 12, 2008 - Posted by | teknik

7 kommentarer »

  1. Jag är rätt såld på ZFS, fast då får man överge Linux och köra Solaris 10 istället förstås.

    Kommentar av Linus S. | februari 12, 2008 | Svara

  2. Jag läste en filsystemtest på http://www.debian-administration.org/articles/388 och sedan dess kör jag XFS och är nöjd. Tidigare använde jag ReiserFS men det var ett osäkert FS som ganska lätt blev korrupt vid en krasch eller hårdhänt omstart. XFS har jag lyckats korrumpera en gång när jag nyligen skulle installera Grub på min nya dator. Grub-1 har problem med XFS men om man startar från ett annat system och installerar därifrån som funkar det bra sedan.
    Det du undrar är vilket FS som är snabbast. Enligt ovanstående test skulle det vara XFS. Och då även för system med med övervägande små filer – Linux är väl ett sådant system med miljontals små skitfiler överallt. 🙂 Jag kan själv inte uttala mig om XFS skulle vara slöare eller snabbare än ReiserFS som jag använde tidigare. Men XFS kan man konfigurera på en massa olika sätt – även om JAG bara kör ”mkfs.xfs /dev/xxx” och låter det bli default med 4096 bytes block osv. Kolla in ”man mkfs.xfs”. Och om du har tid testa lite olika inställningar.
    Sedan har XFS ett program för att defragmentera, det har inte de andra FS:n. 😉

    Kommentar av Magnus Berg | februari 12, 2008 | Svara

  3. Linus: Man får väl hoppas att Sun gör en Linuxportering av det, som IBM gjorde med JFS. 🙂

    Magnus: Jo, att _läsa_ små filer går säkert snabbt med XFS, men att _skapa_ 100.000 filer i något hundratal olika directoryn var inte alls lika kul. Det är inte riktigt något som normala benchmarks kollar, men som är kritiskt för oss. Jag såg den där jämförelsen också, men den är nästan två år gammal. Det har hänt mycket på den tiden.

    Kommentar av Daniel Brahneborg | februari 12, 2008 | Svara

  4. Alltså, det här är lite off topic, och jag kan inte Linux i detalj, men om jag skulle ha topp-performance alldeles oavsett filsystem så skulle jag nog fundera på att inte öht skapa 100′ filer. Att skapa en fil måste ju rimligen innebära en massa overhead och armförflyttningar som tar tid. Har du funderat på att allokera en enda (helst defragmenterad) fil och skriva och läsa block med random access till den istället, som en enkel buffert fast på disk? Man kan ju dela in den i en lämplig blockstorlek som går jämnt upp med den fysiska blockstorleken, typ 512 eller 1024, eller hur stor plats ett sms max kan ta och sen beta av den block efter block och göra wrap around när man kommer till slutet, skulle inte det bli snabbare? Om det nu är ett problem alltså..

    Kommentar av Jörgen L | februari 12, 2008 | Svara

  5. Jörgen: Problemet är att en vettig sådan lösning, som dessutom kan hantera stora paket, är i praktiken ett minimalt filsystem. Med tanke på att det måste vara trådsäkert så är det enklare att använda ett existerande.

    Bra tänkt, men inte så effektivt som man skulle kunna tro.

    Kommentar av Daniel Brahneborg | februari 12, 2008 | Svara

  6. Om det inte är allt för många filer är det lättaste att tvinga den att spara alla filer i samma mapp (vilket jag antar är fallet) och sätta ett eget filsystem på den mappen. Om filerna inte ska sparas när datorn stängs av (möjligt på servrar som står på hela tiden och bara stängs ner när något går fel) så är tmpfs överlägset – om det totalt blir mycket data se till att ha mycket swap och ett stort tmpfs. Den tekniken använder jag när jag behöver filsystem med hög prestanda.

    Kommentar av gurkgranne | februari 13, 2008 | Svara

  7. Jörgen: Till slut gick vi lite grand åt det hållet ändå, fast via en extern produkt. Det blev märkbart effektivare, bland annat eftersom vi slapp ha en massa saker i minnet. Lustigt ändå hur ineffektiva filsystemen fortfarande är.

    Kommentar av Daniel Brahneborg | april 15, 2008 | Svara


Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s