Hlavní navigace

Názor k článku Optimalizace práce s SSD disky v Linuxu od František Ryšánek - Zdravíčko vespolek, ten článek mi přijde poněkud nekritický... Příkaz...

  • Článek je starý, nové názory již nelze přidávat.
  • 14. 4. 2011 17:22

    František Ryšánek

    Zdravíčko vespolek,

    ten článek mi přijde poněkud nekritický... Příkaz ATA TRIM je z definice (dle standardu) nezařaditelný do NCQ fronty, pročež před každým jeho podáním disku musí bloková vrstva čekat, až se NCQ fronta zcela vyprázdní. Prakticky se tak chová jako tvrdá bariéra. A co hůř, u první generace SSDček (podle toho co našel Google někdy v roce 2009) mohl TRIM trvat *hodně* dlouho - třeba až stovky ms = "SSD si šel dát kafe" (reálně něco mazal a k tomu prováděl jakousi "garbage collection"). Nevím jak u aktuálních modelů SSD a verzí firmwaru.

    Svého času jsem někde četl povzdech/shrnutí jakéhosi kernelového vývojáře (už to nedokážu najít) který doslova došel k závěru, že lepší a jednodušší než ATA TRIM je nakonec žádný TRIM nepoužívat, a "pasti read-modify-write" se vyhýbat inteligentnějším slučováním zápisových operací + flagem "přepis na místě". Netuším, jak to nakonec v Linuxu implementovali, jaký je aktuální stav... a jenom doufám, že si ten závěr pamatuju dobře.

    Dneska jsem dokázal vygooglit tohle výživné vlákno z LKML (dva různé archivy téhož):
    http://lkml.org/lkml/2009/8/16/159
    http://thread.gmane.org/gmane.linux.kernel/876737/focus=42383
    ...a z něj taky volně cituji v prním odstavci.

    V článku mi dále chybí zmínka, že není dobré na flashdisk swapovat, točit na něm velký objem logů, mailů apod.

    BTW, ten problém s příkazem TRIM ("nejlepší TRIM je žádný TRIM") mi dost připomíná nedávný vývoj okolo implementace bariér v blokové vrstvě - ačkoli se jedná zjevně o nesouvisející problém...
    http://lwn.net/Articles/400541/

    Ohledně zmíněného zarovnávání oddílů a "block groups" na velikost erase bloku: jak se dá u konkréního SSD tenhle parametr zjistit? Je na to nějaký ATA příkaz / registr? Umí to hdparm nebo třeba smartctl? Nebo je potřeba hledat v dokumentaci od výrobce SSD? Nebo je jediná šance SSD otevřít, zjistit použité Flash čipy, a koukat do *jejich* datasheetů? Jasně, docela rozumný praktický přístup je, nasadit to od oka na nějakou radši vyšší mocninu dvou, a hotovo :-) "ztratit" 512 kB na začátku 40GB SSD, to asi není velký problém...

    Ještě mě zaujala jedna věc: v LBA režimu jistě není problém naadresovat ~100 PB, nicméně BIOSová tabulka rozdělení (pro kterou potřebujete hlavy a sektory) funguje jenom do cca 2 TB, a to ještě za předpokladu 255H/63S. Pokud pro BIOS (aby se z disku dalo bootovat) dosadíme 32H*32S, (= cylindr velký 1k sektorů), vychází z toho maximální velikost disku nějakých 64M sektorů = 32 GB? Navíc mám pocit, že BIOS by tu geometrii stejně nevzal (trval by na nějakých *svých* hodnotách CHS/LBA/LARGE). Pak mi přijde rozumnější, pokud SSD beztak nebude bootovatelné, použít ho jako "dangerously dedicated" (nerozdělené). A dál už stačí jenom nalinkovat velikost clusteru nebo "block group" nebo jak se tomu říká ve Vašem filesystému...