SSD og degradering av ytelse over tid og hva man kan gjøre for å fikse det..

Bakgrunn.

Jeg innstallerte en solid-state drive (SSD) som systemdisk høsten 2009 og var søkkfornøyd med ytelsesforbedringen den ga. Maskinen bootet minst dobbelt så raskt og applikasjonene (spesielt openoffice) spratt opp nesten uten forsinkelse. Høsten 2010 fikk jeg en følelse av at maskinen ikke var fullt så snappy som før. Var jeg bare blitt blasert eller hadde SSDen blitt betydelig tregere? Siden man må putte tall bak synsingen sin dro jeg frem min favoritt io-benchmark, iozone, og ganske riktig, ytelsen hadde falt dramatisk. Skriveytelsen hadde gått ned fra 150-200MB/s til 47MB/s og leseytelsen hadde falt fra 200MB/s til 100MB/s. SSDen var nå tregere enn harddisken i maskinen på sekvensiell io! På random io var ikke tallene så ille, men fortsatt en betydelig degradering.

Teknisk beskrivelse.

Problemet med ytelsesdegradering over tid er velkjent og er forårsaket av hvordan flash-minneceller virker se denne artikkelen for mer informasjon enn du noensinne vil vite om SSD og flash-teknologi. Kort fortalt er problemet at nand-flash lagrer data i blokker på 512KB og når du vil endre en byte informasjon må hele blokken leses, endres og skrives tilbake. SSD firmware har avanserte algoritmer for å holde flest mulig blokker ledig for å holde ytelsen oppe, men trenger informasjon fra OSet om hvilke byteranges som er ledig. Dette blir gjort gjennom noe som kalles en TRM kommando hvor OS-et gir beskjed til disken når en fil blir slettet slik at SSD-disken har bedre oversikt over ledige blokker. Man trenger et OS som støtter TRM, oppdatert Windows7 og Linux > 2.6.32 har TRM support. (Jeg antar at alle vet at når man sletter en fil blir normalt sett ikke informasjonen i fila fysisk slettet fra disken, kun linken til fila blir fjernet. Hvis dette er overraskende nytt for deg bør du vurdere om du har noe på ITA å gjøre;-) I tillegg må selvfølgelig SSD-fw ha støtte for TRM. Min SSD hadde det ikke og trengte en FW-oppgradering (dette var ganske trøblete se nedenfor). Etter FW oppgradering til v2.0 fikk SSD-en min TRM support og alt var fryd og gammen igjen, trodde jeg. Disken var rask og fin i begynnelsen, men jeg fikk en mistanke om at den ble tregere og tregere igjen, hmm, ut og grave på nettet igjen.

OS support for TRM.

Det viser seg at man trenger et spesielt mount flagg, discard, for at linux-kjerna skal sende TRM info til disken, se her for mer info.
Jeg fant også en plass at det kan være lurt å sette flagget noatime for å forhindre at systemet skriver last access time til en fil for hver gang den blir lest. Så her er mount linja jeg bruker i fstab:

/dev/sda1 / ext4 noatime,discard 1 1

Men dette hjelper ikke umiddelbart på ytelsen siden systemet kun sender TRM-info når du sletter filer. Den optimale løsningen er selvfølgelig å reformattere hele disken og reinstallere systemet med de nye mount-flaggene, men jeg er blitt for gammel og synes ikke slikt er morsomt lenger. En mellomløsning er å skrive en stor fil til all ledig diskplass på hver partisjon for så å slette den igjen. Da vil OS-et sende TRM-info om all ledig plass på partisjonen og SSD-en kan da få informasjon om ledige celler som den kan skyfle informasjon rundt på. Dette hjelper faktisk betydelig på ytelsen, write ytelsen gikk opp fra 55 til 150 MB/s og read opp fra 110 til 205 MB/s.

Benchmarks:

SSD perf results

SSD ytelse ved forskjellige konfigurasjoner.

Forklaringer

  • hd: harddisken på systemet, 2x1TB Seagate Barracude 7200rpm som er speilet. Kun tatt med som en baseline for vanlige harddisker. Dato. 29. sep. 2010
  • ssd fw1.0 used: SSD ytelsen når jeg først fikk mistanke om degradering av ytelse. Dato: 29. sep. 2010
  • ssd fw2.0 fresh: Blank SSD med ny FW. Dato: 2. nov. 2010
  • ssd fw2.0 used: ytelsen når jeg fikk mistanke om degradering 2. gang. Dato: 10. jan. 2011
  • ssd fw2.0 with TRM and discard: Ytelse etter at jeg hadde montert diskene med noatime og discard flagg. Som man ser hjelper ikke dette i særlig grad. Dato: 25. jan. 2011
  • ssd fw2.0 after big file write&delete: Ytelse etter å ha fylt ledig plass med en stor fil som man så sletter igjen. YIHAA, back in business! Dato: 25. jan. 2011

Random read har mest å si for tiden det tar å starte applikasjoner. Random write ytelsen spiller en stor rolle når du kjører software oppdateringer, det har vi endel av på Fedora…

Oppsummering.

Man kan forbedre ytelse og levetid på solid-state disker med å bruke de riktige mount-flagg, OS og SSD som støtter TRM.

Hva trengs?

  1. SSD med riktig FW.
  2. Oppdatert OS.
  3. discard og noatime mount flagg.
  4. Enten reformattere disken eller fylle den med en stor fil som man sletter etterpå

Appendikser:

Skrive store filer:

jeg bruker iozone:


iozone -s 14g -r1m -i0

Skriver 14GB til en fil i 1MB blokker og sletter den igjen.

dd fungerer fint også:


dd if=/dev/zero of=bigfilewithzeros bs=1024 count=14000000
rm bigfilewithzeros

Hvordan sjekke at TRM virkerlig er aktiv?

Når du sletter en fil sender kjerna beskjed om at en byte-range er blitt ledig til SSD-en. System monitorer registrerer dette som write-aktivitet og du kan se dette med verktøy som f.eks. dstat. Her er en listing fra dstat på slutten av en iozone run der den har skrevet en 14GB fil og deretter sletter den:

----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  1   2  85  12   0   0| 140M    0 |1249B    0 |   0     0 |1794  3517 
  1   2  87  10   0   0| 138M    0 | 552B    0 |   0     0 |1885  3523 
  1   2  86  11   0   0| 131M   36k|1371B    0 |   0     0 |1722  3390 
  1   2  86  10   0   0| 139M    0 |1028B    0 |   0     0 |2077  3560 
  1   2  86  11   0   0| 137M    0 | 725B    0 |   0     0 |2036  3536 
  1   2  86  10   0   0| 142M    0 |1164B  887B|   0     0 |2096  3656 
  1   2  84  13   0   0| 146M 4096B|1867B  172B|   0     0 |1868  3743 
  1   2  87  10   0   0| 148M    0 |1068B  392B|   0     0 |1948  3680 
  1   2  86  11   0   0| 146M 4096B| 428B   46B|   0     0 |1912  3733 
  1   2  86  11   0   0| 141M    0 | 548B  196B|   0     0 |1813  3541 
  1   2  86  11   0   0| 116M   76k| 474B    0 |   0     0 |1708  3220 
  1   3  85  11   0   0| 152M    0 | 816B    0 |   0     0 |2006  3779 
  1   2  86  11   0   0| 144M    0 | 658B   66B|   0     0 |1877  3644 
  1   2  84  13   0   0| 126M  116k| 888B    0 |   0     0 |1777  3452 
  2   2  85  11   0   0| 145M    0 | 893B    0 |   0     0 |2036  4438 
  1   3  86  10   0   0| 147M   40k| 779B  196B|   0     0 |1951  3914 
  1   3  84  12   0   0| 142M   20k| 312B    0 |   0     0 |1939  4210 
  1   8  91   0   0   0| 116k    0 | 683B  392B|   0     0 |1270  1377 
  1   0  99   0   0   0|   0   129M| 363B    0 |   0     0 | 619  1074 
  2   1  98   0   0   0|   0   312M| 482B  196B|   0     0 | 616  1103 
  1   1  98   0   0   0|   0   617M| 120B    0 |   0     0 | 679  1052 
  1   1  98   0   0   0|   0   680M| 272B    0 |   0     0 | 670  1094 
  1   1  99   0   0   0|   0   768M| 882B    0 |   0     0 | 620  1048 
  2   1  98   0   0   0|   0   744M|1424B   66B|   0     0 | 637  1117 
  1   1  97   1   0   0|4096B  768M| 484B    0 |   0     0 | 543  1060 
  2   1  98   0   0   0|   0   768M| 521B  196B|   0     0 | 654  1165 
  1   1  98   0   0   0|   0   768M| 244B    0 |   0     0 | 547  1093 
  2   1  98   0   0   0|   0   768M|1689B  392B|   0     0 | 651  1136 
  1   1  98   0   0   0|   0   768M| 757B  163B|   0     0 | 633  1058 
  2   1  97   0   0   0|   0   768M|1573B  196B|   0     0 | 734  1099 
  1   1  99   0   0   0|   0   760M| 710B    0 |   0     0 | 639  1043 
  1   1  98   0   0   0|   0   768M| 860B    0 |   0     0 | 735  1062 
  1   1  98   0   0   0|   0   768M|1702B    0 |   0     0 | 778  1066 
  2   1  97   0   0   0|   0   632M|1190B    0 |   0     0 | 829  1168 
  1   1  98   0   0   0|   0   624M|1109B    0 |   0     0 | 668  1078 
  1   1  98   0   0   0|   0   832M|1635B  196B|   0     0 | 915  1180 
  1   1  98   0   0   0|   0   728M|1922B    0 |   0     0 | 797  1120 
  2   1  98   0   0   0|   0   376M|1454B  392B|   0     0 | 858  1143 
  1   1  99   0   0   0|   0   272M|1324B  284B|   0     0 | 776  1126 
  1   1  98   0   0   0|   0   656M|1685B  196B|   0     0 | 825  1096 
  1   0  99   0   0   0|   0    64M| 824B    0 |   0     0 | 712  1078 
  1   0  98   0   0   0|   0     0 |1351B  330B|   0     0 | 828  1112 
  1   1  99   0   0   0|   0     0 |1801B    0 |   0     0 | 722  1070 
  1   1  98   0   0   0|   0     0 | 848B    0 |   0     0 | 744  1059 
  1   0  99   0   0   0|   0     0 | 908B    0 |   0     0 | 698  1050 
  1   0  98   0   0   0|   0     0 | 940B  196B|   0     0 | 784  1133 
  1   0  99   0   0   0|   0     0 | 336B    0 |   0     0 | 719  1058 

Som man ser får man en skikkelig flare av write-io når fila er ferdig lest og skal slettes.

Oppgradere FW på SSD.

Min systemdisk er en Corsair Extreme Series X64 og en eller annen hos Corsair må ha hatt en dårlig dag på jobben da denne ble godkjent for salg. Det viser seg at den ble solgt med en firmware v1.0 uten støtte for TRM, videre klarer ikke Corsair å lage en firmware oppgraderingsprosess som som passerer deres egne kvalitetstester! Jeg tror aldri jeg har sett så mye banning i et supportforum… Corsair har nå sluppet en firmware upgrade program med klausul at denne kan ødelegge data på SSD-en. Rettelse, de har sluppet 8 forskjellige, to for hver SSD størrelse, hvor du bruker den ene eller den andre alt ettersom det står Corsair eller CORSAIR i hw-info (bruk hdparm -I /dev/sdX for å sjekke). Og du kan bricke disken hvis du flasher feil firmware! For å gjøre en lang historie kort: Det var plent umulig å få til å oppgradere FW så jeg måtte sende disken til Nederland for å få dette ordnet. Corsair har en supportside hvor du kan be om å få dette gjort.

3 responses to “SSD og degradering av ytelse over tid og hva man kan gjøre for å fikse det..”

  1. Erling Paulsen says:

    Interessant artikkel Roy 😉 10 power-points!

    Noen av oss har jo begynt å få disse bootbare OCZ PCI-Express SSD RevoDrives (http://www.ocztechnology.com/products/solid-state-drives/pci-express/revodrive/ocz-revodrive-pci-express-ssd-.html) i arbeidsstasjonene og jeg begynte å bli nervøs – for de støtter ikke TRM/TRIM.

    Men litt “googling” kunne vise at de har Sandforce SF-1200 kontrollere. Disse har noe Sandforce selv kaller “Intelligent ‘Recycling’ for advanced free space management” (http://www.sandforce.com/index.php?id=19).

    Dette er mao. deres versjon av garbage collection. Diverse tester med stor iver på HD-tortur viser at dette fungerer veldig bra. Ytelsen faller MAX over tid innen noen få prosent av “NY”-ytelsen.

    Ifølge forumene til OCZ Tech har også et TRIM-Tool under utvikling, hva enn nå det betyr – kanskje i kombinasjon med en enda ikke utgitt FW-update!

    Whatever.. *puster semi-lettet ut* da det ikke ser ut til at jeg får crap-performance med det første, andre eller tredje..

  2. Roy Dragseth says:

    Vet ikke, ville nesten tro det. Det kan godt hende at de tilogmed har backportet det til v5.

  3. Pål D. Ekran says:

    Lurer på om Redhat Enterprise 6 kommer med TRM støtte?

Leave a Reply

Your email address will not be published. Required fields are marked *