Trim ( eng. to trim - trim) - o comandă de interfață ATA care permite sistemului de operare să notifice unitatea SSD despre care blocuri de date ( pagini ) nu poartă o sarcină utilă și nu pot fi stocate fizic.
Trim face parte din specificația interfeței ATA , care este standardizată de grupul T13 al INCITS [1] .
Comanda a fost introdusă la scurt timp după apariția unităților cu stare solidă (SSD) pentru a le face o alternativă competitivă la HDD-urile tradiționale din computerele personale.
Pentru că pe plan intern, implementarea operațiunilor într-un SSD este foarte diferită de implementarea acelorași operațiuni în hard disk-urile mecanice tradiționale, metodele uzuale ale sistemelor de operare pentru operațiuni precum ștergerea fișierelor și formatarea unui disc (fără a accesa direct sectoarele afectate/ pagini pe unitate) conduc la o deteriorare progresivă a performanței operațiunilor de scriere pe SSD [2] .
Utilizarea Trim permite SSD-ului să reducă impactul colectării gunoiului , care altfel ar duce la o scădere a performanței operațiunilor de scriere în sectoarele afectate [3] .
Deși utilitățile pentru „resetarea” unor unități la starea lor inițială erau deja disponibile înainte de apariția Trim, ele, printre altele, au șters toate datele de pe unitate, ceea ce le-a făcut practic inutilizabile pentru optimizare [4] .
Datorită particularităților metodelor de ștergere utilizate în mod obișnuit în sistemele de fișiere , unitățile nu știu ce sectoare/pagini sunt de fapt utilizate și care pot fi considerate inactive.
Operațiunile de ștergere sunt de obicei limitate la marcarea blocurilor de date ca „neutilizate” în sistemul de fișiere [5] [6] . Spre deosebire de, de exemplu, o operație de suprascriere, ștergerea nu va avea ca rezultat o scriere fizică în sectoarele afectate care conțin date. Deoarece unitatea nu are acces la structurile sistemului de fișiere - cum ar fi lista de clustere neutilizate - unitatea este lăsată în întuneric despre eliberarea blocurilor.
Deși acest lucru a făcut adesea posibilă recuperarea datelor șterse de pe HDD-urile tradiționale , chiar dacă acestea au fost marcate ca „șterse” de sistemul de operare, a însemnat și că atunci când sistemul de operare a efectuat ulterior o operațiune de scriere într-unul dintre sectoarele considerate spațiu liber, această operație ar fi considerată o operație de suprascriere din punctul de vedere al unității. Pentru hard disk-urile tradiționale, această operațiune nu este diferită de scrierea într-un sector inactiv, pentru SSD, din cauza nivelării uzurii, suprascrierea datelor este semnificativ diferită de scrierea într-un sector inactiv (fiecare scriere în același sector logic se va face pe un alt sector fizic). sectoare), potențial degradarea performanței operațiunilor de scriere ulterioare [6] .
SSD-urile stochează date în celule de memorie flash grupate (într-un SSD MLC ) în „pagini” (de obicei 4 KB fiecare), care sunt la rândul lor grupate în blocuri (de obicei 128 de pagini sau 512 KB în total) [5] [7 ] .
Celulele flash NAND pot fi scrise direct numai dacă sunt goale. În cazul în care stochează date, conținutul celulelor trebuie să fie șters înainte de a le fi scrise date noi. În unitățile SSD, operația de scriere se poate face doar pentru pagini, totuși, din cauza limitărilor hardware, comanda de ștergere se execută întotdeauna pe întreg blocul [7] . Ca rezultat, scrierea pe suportul SSD este foarte rapidă atâta timp cât există pagini goale, dar încetinește semnificativ dacă paginile prescrise trebuie șters.
Deoarece celulele dintr-o pagină trebuie să fie șterse înainte de a putea fi scrise din nou, dar numai un bloc întreg poate fi șters, procesul de rescriere inițiază un ciclu de citire-ștergere-modificare-scriere [5] [8] : conținutul întregul bloc trebuie păstrat în cache înainte de a putea fi eliminat din unitate, datele suprascrise sunt modificate în cache și numai atunci întregul bloc (cu pagina actualizată) este scris pe unitate. Acest fenomen este cunoscut sub numele de amplificare de scriere[9] [10] .
În controlerele lor SSD, producătorii folosesc diverse tehnici pentru a distribui în mod optim operațiunile de scriere pe unitatea flash [5] [11] . Acest lucru se face nu numai pentru a optimiza viteza prin minimizarea amplificarii de scriere, ci și pentru a crește durata de viață a celulelor flash ( ) , celulele flash MLC convenționale pot rezista la 3000-5000 de cicluri de scriere [11] . O altă abordare este utilizarea memoriei de rezervă (de rezervă), care nu este declarată sistemului de operare sau chiar BIOS , pentru a oferi pagini curate pentru operațiunile de scriere cât mai mult timp posibil înainte de a începe să suprascrieți alte pagini [3] .
Eficacitatea acestor metode depinde în mare măsură de schimbul de informații între sistemul de operare și controlerul SSD despre care pagini pot fi considerate ocupate și care pagini pot fi considerate libere. În mod tradițional, majoritatea sistemelor de operare nu informează unitățile despre sectoarele/paginile șterse, ceea ce nu permite controlerelor SSD să aloce în mod optim spațiul liber. Comanda Trim a fost introdusă pentru a remedia acest lucru prin ștergerea celulelor neutilizate înainte de a fi scrise, reducând astfel timpul de acces [3] .
Deoarece comanda șterge complet datele din celule, de obicei nu este posibilă recuperarea datelor din acestea [12] .
Trim nu este întotdeauna suportat în matricele RAID [13] .
SSD-urile mai vechi fabricate înainte de adăugarea comenzii Trim la standardul ATA necesită o actualizare de firmware sau comanda va fi ignorată. De asemenea, comanda Trim nu este acceptată de toate sistemele de operare .
Sistem de operare | A sustine |
---|---|
Windows 8 și versiuni ulterioare | Acceptat de la lansarea finală (octombrie 2012) |
Windows Server 2012 | Acceptat de la lansarea finală (octombrie 2012) |
Windows 7 | Sprijinit de la lansarea finală (octombrie 2009) [14] |
Windows Server 2008 R2 | Sprijin de la lansarea finală (octombrie 2009) [15] [16] |
Linux 2.6.33 | Sprijinit din februarie 2010 [17] , ioctl BLKDISCARD |
OpenSolaris | Sprijin din iulie 2010 [18] |
FreeBSD 8.3, 9.2, 10.0 | Suportat cu UFS [19] , suportat cu ZFS [20] [21] . |
Mac OS X | Acceptat (începând cu versiunea 10.10.4 pentru orice SSD, înainte doar SSD-urile furnizate de Apple [22] ) |
Android | Începând cu versiunea 4.3, la sistem a fost adăugat suport pentru funcția fstrim, care este un analog cu Trim [23] [24] |
ubuntu | Suportat începând cu Ubuntu 14.04. |
În unele cazuri, când Trim nu este suportat de sistemul de operare, există utilitare care vă permit să trimiteți această comandă „manual”. De obicei, astfel de programe, folosind instrumentele sistemului de operare, alcătuiesc o listă de blocuri gratuite și o transferă pe unitate sub forma unei secvențe de comenzi Trim. Astfel de produse există atât sub formă de utilități universale ( hdparm versiunea 9.17 și superioară), cât și sub formă de software pentru tipuri individuale de unități (Intel [25] , G.Skill [26] ).
Analogul SCSI al comenzii Trim este comenzile Unmap și Write [27] .
Unități cu stare solidă (SSD) | |||||
---|---|---|---|---|---|
Terminologia cheie |
| ||||
Producători de unități flash | |||||
Controlorii |
| ||||
Producători de SSD | Lista producătorilor de SSD | ||||
Interfețe | |||||
Organizații conexe |
|