Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: SSD tips: trim support en over provisioning instellen  (gelezen 7615 keer)

SSD tips: trim support en over provisioning instellen
« Gepost op: 2012/11/04, 03:01:27 »
Ik ga binnenkort een SSD schijf in mijn laptops optical drive bay zetten. Vandaar dat ik me wat heb verdiept in de werking van SSD's.

Een probleem van SSD schijven is 'write amplification' oftewel het feit dat wanneer je een bepaalde hoeveelheid logische data naar de SSD stuurt, op de SSD schijf meer data wordt geschreven dan er heen is gestuurd. Dit gaat ten koste van performance en levensduur. Dit komt onder andere door 'Garbage collection'.

Garbage collection
Bij een normale harde schijf wordt oude data op de schijf die nog op een bepaalde plek staat maar die niet meer gebruikt wordt bij een nieuwe schrijfactie op die locatie gewoon overschreven. Bij SSD's kan dat niet, daar moet oude data eerst gewist worden alvorens er nieuwe data op kan worden geschreven. Belangrijk voor de performance is het om oude data niet pas te wissen zodra nieuwe zich aandient, maar omdat zo snel mogelijk te doen als data niet meer nodig is zodat er altijd veel vrije ruimte beschikbaar is voor efficiente, snelle schrijf acties.

Typisch aan SSD's Data op SSD's wordt geschreven in eenheden genaamd 'pages', en gewist in eenheden genaamd 'blocks'. Een 'block' bestaat uit meerdere 'pages'.


OOOO  OOOO
OOOO  OOOO
OOOO  OOOO
OOOO  OOOO


Hierboven zijn als voorbeeld twee blocks van ieder 12 pages grafisch weergegeven. Alle pages zijn onbeschreven.  Stel nu dat er 4 pages in het eerste block worden beschreven met de informatie A, B, C en D. Dan krijg je het volgende:


ABCD  OOOO
OOOO  OOOO
OOOO  OOOO


Stel nu dat er daarna nieuwe data wordt toegevoegd (EFGH), en dat ABCD wordt gewijzigd in JKLM. Dan krijg je het volgende:

ABCD  OOOO
EFGH  OOOO
JKLM  OOOO


Zoals je ziet blijft ABCD staan, immers een SSD kan geen data overschrijven die niet eerst al gewist is.

Nu is er geheugen verloren gegaan omdat bij een SSD data niet overschreven wordt. De plek waar ABCD staat moet eerst gewist worden alvorens deze weer bruikbaar is. Het probleem is nu dat losse pages niet gewist kunnen worden, alleen gehele blokken met 12 pages. De oplossing heet 'garbage collection'. Het werkt zo: de valide data in een block wordt naar een ander block gekopieerd, en het orginele block wordt geheel gewist. In het voorbeeld krijg je dan de volgende situatie na het kopieren:


ABCD  EFGH
EFGH  JKLM
JKLM  OOOO


Vervolgens wordt de oude data gewist zodat het geheugen dat door ABCD werd ingenomen weer bruikbaar is:


OOOO  EFGH
OOOO  JKLM
OOOO  OOOO


Voor een goede prestatie moet ervoor gezorgd worden dat SSD's ongebruikte data dus wissen vóórdat er nieuwe data geschreven wordt. Het wissen van oude data op SSD's heet 'garbage collection', en is erg belangrijk voor de prestatie.

Nu is het probleem dat besturingssystemen wanneer een bestand gewist wordt op een harde schijf niet de data waaruit dat bestand bestaat wissen, maar alleen de verwijzer naar die data wordt gewist. Dit betekent dat de data zelf normaal nog gewoon op de schijf staat, ook al wordt deze niet meer gebruikt, net zolang tot het bestandsysteem besluit de blokken te overschrijven. Vandaar ook dat het mogelijk is dat er software bestaat om per ongeluk gewiste bestanden terug te halen. Normaal gezien behandeld een besturingssysteem een SSD schijf gewoon als een normale harde schijf, wat betekent dat ook op de SSD de data van gewiste bestanden blijft staan. Dit betekent dat er erg veel data op een SSD staat waarvan de SSD niet weet dat het 'garbage' is totdat het besturingssysteem de opdracht geeft de data te overschrijven. Het gevolg hiervan is dat er bij het proces van 'garbage collection' heel veel data wordt gekopieerd waarvan de SSD denkt dat het valide data is, terwijl het eigenlijk gewoon garbage is. Dit is natuurlijk niet goed voor de performance en levensduur van een SSD schijf.

De oplossing hiervoor is TRIM. Veel moderne SSD schijven en Linux ondersteuning TRIM. TRIM maakt het mogelijk voor het besturingssysteem om bij het wissen van een bestand door te geven aan een SSD schijf welke blokken data niet meer nodig zijn als gevolg van het wissen van een bestand. Met deze kennis kan een SSD dus veel efficienter 'garbage' opruimen. De SSD verwijderd dan namelijk niet alleen de verwijzing naar de data van het bestand, maar ook de data zelf. En dit laatste dus voordat het bestandsysteem de data overschrijft met nieuwe data.

Hoe TRIM te gebruiken?
Zorg dat je een kernel hebt nieuwer dan 2.6.33, en het ext4 bestandsysteem.
Voeg in fstab als bestandsysteemoptie 'discard' toe bij de mount van het bestandsysteem op de SSD. Bijv:
UUID=ed586ab8-08c5-4bae-b118-d191b716b4a4 /               ext4    discard,errors=remount-ro 0       1(Controleer of je SSD TRIM ondersteunt, is dat niet het geval, kan je het beter niet instellen.)
Dat is alles, nu zou TRIM automatisch moeten werken.

Naast TRIM is ook over provisioning belangrijk om garbage collection efficient te laten verlopen, en de levensduur van een SSD te verlengen.  Over provisioning betekent dat je een deel van de schjif niet gebruikt zodat er altijd vrije ruimte beschikbaar is voor het kopieren van pages voor 'garbage collection' en het afschrijven van 'bad blocks'. Professionele SSD's gebruiken vaak een flink deel van de SSD intern al voor provisioning, deze is dus niet beschikbaar. Voor consumenten SSD's gebeurt dat in mindere mate (minder GB levert minder geld op), het kan daarom slim zijn om er zelf voor te zorgen dat een deel van de SSD niet gebruikt wordt door de gebruiker. Dan is er altijd voldoende 'provisioning' voor top performance en levensduur verbetering.

Hoe?

Eenvoudig, zorg bij het partitioneren dat je zo'n 10% van de ruimte niet gebruikt. :)

edit:
Gebruik je luks encryptie, zorg dan dat je in /etc/crypttab ook discard toevoegd als optie:
sda5_crypt UUID=e364d03f-[...]6cd7e none luks,discard
En herbouw je initramfs zodat het bij het opstarten wordt meegenomen:
sudo update-initramfs -c -k all
« Laatst bewerkt op: 2012/11/04, 03:13:59 door Thomas de Graaff »

Re: SSD tips: trim support en over provisioning instellen
« Reactie #1 Gepost op: 2012/11/04, 16:30:42 »
Om te kijken of je SSD TRIM ondersteunt kan je het volgende commando gebruiken:
sudo hdparm -I /dev/jouwssd|grep -i 'TRIM'Als het goed is zie je dan iets van supported oid. wanneer de SSD schijf TRIM ondersteunt.

Volgens mij hebben fabrikanten tools om een SSD te resetten naar nieuwe staat.

Hier is een uitleg hoe dit met Linux te doen:
https://grok.lsu.edu/article.aspx?articleid=16716

en nog een hier:
http://tinyapps.org/docs/wipe_drives_hdparm.html

[edit: foutje in commando opgelost]
« Laatst bewerkt op: 2012/11/10, 15:00:21 door Johan van Dijk »

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: SSD tips: trim support en over provisioning instellen
« Reactie #2 Gepost op: 2012/11/10, 13:56:06 »
Die commando's lijken niet te kloppen.
Moet zijn:
sudo hdparm -I /dev/sda|grep -i 'TRIM'

Offline wowo

  • Lid
Re: SSD tips: trim support en over provisioning instellen
« Reactie #3 Gepost op: 2012/11/10, 22:31:54 »
Hier heb ik een test gevonden om te kijken of TRIM daadwerkelijk werkt:
http://askubuntu.com/questions/18903/how-to-enable-trim
Zie het onderdeel:
Testing automatic TRIM

Bij mij werkte deze test.
Desktop Ubuntu 20.04 LTS en 22.04 LTS

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: SSD tips: trim support en over provisioning instellen
« Reactie #4 Gepost op: 2012/11/10, 22:48:34 »
Op mijn systeem moest ik de configuratie van GRUB ook aanpassen voordat TRIM ging werken. Dit komt omdat mijn / op de SSD staat.
Je moet /etc/default/grub aanpassen, en dan deze regel:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash rootfstype=ext4"
Het eerste stuk is standaard, ik heb er "rootfstype=ext4" aan toegevoegd.
Hierna sudo update-grub uitvoeren.

Hier werkt de trim in ieder geval wel, getest met de commando's uit de link van wowo.

Offline Dave

  • Lid
Re: SSD tips: trim support en over provisioning instellen
« Reactie #5 Gepost op: 2012/11/11, 11:12:31 »
Citaat
(Controleer of je SSD TRIM ondersteunt, is dat niet het geval, kan je het beter niet instellen.)

Hoe controleer je dat dan?

Ik zelf heb ondervonden dat mijn nieuwe SSD veel trager is geworden nadat ik enkele distro's heb uitgeprobeerd. Dit komt dus waarschijnlijk doordat niet alle data is verdwenen. De SSD moet dus meer lezen voordat hij opstart.
De allereerste installatie was inderdaad met 4 seconden dat hij opgestart was, nu doet hij er net zolang over als mijn gewone HD.

Mijn vraag is dan of ik dan het hele proces van installatie over moet doen met de distro die ik nu heb (dus alles overnieuw doen, bah!) met de TRIM, zodat de SSD weer helemaal leeg is, voordat hij dus Xubuntu erop zet. Die loopt namelijk nu wel als een zonnetje maar ik heb geen voordeel van het hele snelle opstarten van de pc.

Er was ook aangegeven geen partities te maken maar alleen je data op de nas of andere hdd te zetten.
Jij zet je home op de nas schreef je(dat valt ook onder partities indelen) zodat het systeem steeds al jouw eigen instellingen vanaf de nas moet laden wat zonde van die uitgave voor een ssd is.

Offline testcees

  • Documentatieteam
    • testcees
    • www.testcees.nl
Re: SSD tips: trim support en over provisioning instellen
« Reactie #6 Gepost op: 2012/11/11, 13:19:07 »
Betere performance dan met automatische trim (de discard optie zoals hierboven beschreven) is mogelijk door regelmatig de terminalopdracht fstrim te gebruiken. Bijvoorbeeld in een cron taak.

Met fstrim -v kan je zien hoeveel er getrimmed wordt  om te bepalen hoe regelmatig je de cron taak wil uitvoeren.

https://patrick-nagel.net/blog/archives/337
http://en.wikipedia.org/wiki/TRIM#Shortcomings

http://wiki.ubuntu-nl.org/community/SSD#trim
Klik links bovenin op Documentatie

Re: SSD tips: trim support en over provisioning instellen
« Reactie #7 Gepost op: 2012/11/11, 14:22:38 »
Betere performance dan met automatische trim (de discard optie zoals hierboven beschreven) is mogelijk door regelmatig de terminalopdracht fstrim te gebruiken. Bijvoorbeeld in een cron taak.

Met fstrim -v kan je zien hoeveel er getrimmed wordt  om te bepalen hoe regelmatig je de cron taak wil uitvoeren.

https://patrick-nagel.net/blog/archives/337
http://en.wikipedia.org/wiki/TRIM#Shortcomings

http://wiki.ubuntu-nl.org/community/SSD#trim

A, thx. :) Die fstrim is erg nuttig!

Offline wowo

  • Lid
Re: SSD tips: trim support en over provisioning instellen
« Reactie #8 Gepost op: 2012/11/11, 14:29:11 »
Op mijn systeem moest ik de configuratie van GRUB ook aanpassen voordat TRIM ging werken. Dit komt omdat mijn / op de SSD staat.
Je moet /etc/default/grub aanpassen, en dan deze regel: etc.
Ook bij mij stond de / op mijn ssd. Echter ik hoefde de grub niet aan te passen. De trim-test werkte bij mij ook zonder de aanpassing.
De code van mijn grub:
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
Desktop Ubuntu 20.04 LTS en 22.04 LTS

Offline wowo

  • Lid
Re: SSD tips: trim support en over provisioning instellen
« Reactie #9 Gepost op: 2012/11/11, 15:13:33 »
Betere performance dan met automatische trim (de discard optie zoals hierboven beschreven) is mogelijk door regelmatig de terminalopdracht fstrim te gebruiken. Bijvoorbeeld in een cron taak.
Interessant. Denk wel dat het een en ander afhankelijk is van welke SSD je hebt en welke firmware daarop zit.
De crucial M4 heeft onlangs een nieuwe firmware gekregen:
Citaat
Release Date: 09/25/2012
Firmware for the Crucial m4 2.5” SSD is being updated from version 000F to 010G.
The m4 is updatable to this new firmware starting from any previous version in a single step.
This is an OPTIONAL update for any drive in the field. It is only recommended if the end user is experiencing an issue related to the following items.
Do NOT use any other m4 firmware update for your 2.5” SSD such as the 01MG firmware for the mSATA form factor.
Version 010G includes the following changes:
    Improved Trim response time
    Improved power-on-to-ready time (known as POR, or TTR for Time-to-ready)
    Improved resume-time from low power modes, and improved reliability of warm reboot
    Improved power consumption by disabling HIPM (Host Initiated Power Management)
Additional details can be found in the firmware guide
http://forum.crucial.com/t5/Solid-State-Drives-SSD/Firmware-Update-Notifications/td-p/57854
Heb ook iets gevonden over SATA-IO Revision 3.1 Specification:
Citaat
Queued Trim Command – allows SATA SSDs to execute Trim without impacting normal operation, improving SSD performance
http://www.sata-io.org/technology/6Gbdetails.asp
Een open deur: SSD is nog steeds vol in ontwikkeling
Desktop Ubuntu 20.04 LTS en 22.04 LTS

Offline Dave

  • Lid
Re: SSD tips: trim support en over provisioning instellen
« Reactie #10 Gepost op: 2012/11/11, 18:23:00 »
@Thomas bedankt voor dit stukje.
Hoewel geen problemen (nog)met de snelheid toch toegepast want leek me nuttig.

@Femke i rest my case.