TRIM (рачунарство)

Наредба trim (често писана као TRIM) омогућава оперативном систему да обавести полупроводнички диск (SSD) који блокови података нису више у употреби и могу бити интерно обрисани.[1]

Trim је представљен убрзо након што су SSD дискови постали доступни као алтернатива традиционалним тврдим дисковима. Због разлике између функционисања SSD дискова и тврди дискова на хардверском нивоу, типичан начин на који оперативни системи обављају операције брисања и форматирања је довео до непредвиђене брзе деградације перформанси операција уписивања код SSD дискова.[2] Trim операција омогућава SSD дисковима да се изборе са накупљеним непотребним податцима (које је оперативни систем са своје тачке гледишта обрисао), што би у супротном знатно успорило будуће операције уписивања у те одређене блокове.[3]

Иако су постојали алати који ресетују дискове на првобитно стање још пре увођења TRIM функције, они при том процесу такође бришу све податке са диска, што их чини непрактичним за редовну оптимизацију.[4] Неки новији SSD дискови често садрже интерни механизам скупљања отпадака који ради независно од TRIM функције; иако ово успешно одржава њихове перформансе чак и под оперативним системима који не подржавају Trim, има и своју ману у облику повећане количине уписа и трошења флеш ћелија.[5]

Проблеми специфични флеш меморији

Због начина на који датотечки системи обично врше операције брисања, медији за складиштење (SSD дискови, али и традиционални тврди дискови) иначе не знају који сектори су заиста у употреби, а који се сматрају слободним простором од стране оперативног система. Операције брисања се често своде на обележавање блокова као "слободних" унутар фајл система.[6][7] Супротно, на пример, операцији поновног уписивања, операција брисања неће укључити физички упис (у овом случају брисање) сектора који садрже податке. С обзиром да SSD нема информацију о структури фајл система, укључујући листу некоришћених блокова/сектора, он не постаје свестан да су блокови постали слободни (спремни за физичко брисање). Ово често омогућује појединим алатима да поврате информације са класичних тврди дискова[7][8] иако су датотеке обрисане из аспекта оперативног система, и такоће значи да када оперативни систем касније изврши операцију уписивања у један од сектора, које сматра празним простором, на хардверском нивоу је то у ствари операција преписивања (прво брисања старих података, затим уписа нових), са тачке гледишта медија за складиштење. За традиционалне тврди дискове ово је једнако уписивању у празан сектор, али због начина функционисања SSD дискова на хардверском нивоу, операција преписивања захтева много више времена него упис у заиста празан сектор, што знатно смањује перформансе уписа.[7][9]

SSD дискови складиште податке у флеш меморијским ћелијама које су груписане у стране (типичне величине од 4 до 16 килобајта), које су затим даље груписане у блокове (типичне величине од 128 до 512 страна).[6][10] NAND флеш меморијске ћелије могу бити директно уписиване само кад су празне. Уколико садрже податке, садржај прво мора бити обрисан, да би се операција уписа извршила поуздано. Код SSD дискова, операција уписа може бити изведена на нивоу стране, али због хардверских ограничења, операције брисања увек захватају целе блокове.[10] Као резлтат тога, уписивање података на SSD медије је јако брзо док год за то могу да се користе празне стране, али се значајно успорава у случају да се мора преписивати преко претходно уписане стране. С обзиром да је брисање ћелија у страници неопходно пре поновног уписа, а само цели блокови могу бити брисани, операција преписивања ће на хардверском нивоу захтевати операције читања-брисања-модификовања-уписивања:[6][11] садржај целог блока мора бити копиран у кеш пре него што је ефективно обрисан са флеш меморије, затим се страна која треба бити преписана модификује унутар кеша да би кеширани блок био ажуриран, и тек након тога се цео блок (са ажурираном страном) уписује натраг на флеш меморију. Овај феномен је познат као (непотребно) повећање броја уписа.[12][13]

Начин функционисања

Trim команда је дизајнирана да омогући оперативном систему да обавести SSD диск које странице нису више у употреби услед брисања, било од стране корисника или самог оперативног система. Током операције брисања, OS ће истовремено обележити секторе као слободне за нове податке и послати Trim команду SSD диску ради интерног обележавања непотребних података. Након тога SSD зна да те исте податке више не премешта током скупљања отпадака. Ово резултује мањем броју уписа у флеш меморију, чиме се знатно смањује број непотребних уписа и продужује животни век диска.

Различити SSD дискови могу различито реаговати на Trim команду, па се и финална перформанса може разлоковати измећу различитих SSD дискова.[3][8]

Trim неповратно брише податке на које утиче.[14]

Мане

  • Уколико се користи софтверска енкрипција диска, Trim функција открива који блокови података су у употреби, а који нису (чиме се делимично поништава сврха енкрипције).[15]
  • Trim је дефинисан као не-приоритетна команда од стране Т13 субкомитета, и последично томе може изазвати велике губитке у перформанси осталих операција у рачунару, уколико се не користи одговорно, на пример, после сваке операције брисања у фајл систему. Не-приоритетна природа команде захтева од диска да је изврши одмах након завршетка команде која је тренутно у извршењу, и тек након тога настави са нормалним функционисањем. Trim-у може требати пуно времена да се изврши у зависности од фирмвера SSD диска, а може и покренути скупљање отпадака. Ова мана се може минимизовати тиме што ће trim само повремено радити, када систем не ради ништа, за разлику од покретања након сваке операције брисања датотеке. Овај недостатак је превазиђен у Serial ATA ревизији 3.1 увођењем приоритетне трим команде (Queued Trim Command).[16]

Имплементација

Подршка у оперативним системима

Trim је ефективан само на оперативним системима који га подржавају. Табел испод идентификује сваки познатији оперативни систем, и прву верзију која подржава трим команду. Поред тога, старијим SSD дисковима деизајнираним пре увођења Trim команде у ATA стандард ће бити потребно ажурирање фирмвера, у супротном ће команда бити игнорисана. Такође, не може сваки диск бити ажуриран са подршком за Трим.

Оперативни системДатум увоћења трим подршкеДодатне информације
DragonFly BSD2011-05May 2011[17]
FreeBSD2010-078.1 - July 2010[18]Подршка је уведена на слоју блока уређаја у верзији 8.1. Подршка фајл система је уведена код FreeBSD 8.3 и FreeBSD 9, почевши од UFS.[19] ZFS подршка је уведена у FreeBSD 9.2.[20][21] FreeBSD 10 подржава Трим код софтверских RAID конфигурација.[22]
Linux2008-12-252.6.28–25 December 2008[23]Иницијална подршка за операције одбацивања је уведена за FTL NAND flash уређаје у 2.6.28. Подршка за ATA Trim команду је уведена у 2.6.33.[24]

Не користе сви фајл системи Trim. Међу фајл системима који могу аутоматски да пошаљу Trim захтев су Ext4,[25] Btrfs,[26] FAT, GFS2[27] и XFS.[28] Међутим, ово је искључено по дифолту због лошијих перформанси,[29] али може бити укључено постављањем "discard" mount опције. Ext3, NILFS2 and OCFS2 омогућују ioctl-ове ради обављања тримовања код неактивних уређаја. Trim спецификација захтева подршку листе трим опсега, али од верзије кернела 3.0 трим се само позива са једним опсегом што је спорије.[30]

Mac OS X2011-06-2310.6.8–23 June 2011[31]Иако је AHCI драјвер добио могућност да прикаже да ли меморијски уређај подржава Trim операцију још у верзији 10.6.6 (10J3210),[32] сама функцоналност је остала недосупна до верзије 10.6.8, када је Trim операција изложена преко IOStorageFamily и додата подршка у фајл систему (HFS+). Неки форуми тврде да Mac OS X подржава Trim само за Appled SSD дискове; Апликације из екстерних извора су доступне да омогуће трим за дискове осталих произвођача.
Microsoft Windows2009-10NT 6.1 (Windows 7 and Windows Server 2008 R2) - October 2009[33][34]Windows 7 подржава трим само за обичне SATA дискове, а не подржава за PCI-Express SSD дискове који су дургачији тип уређаја, иако би уређај сам по себи прихватио команду.[35] Потврђено је да са изворним Microsoft драјверима Trim функционише у AHCI и традиционалном IDE / ATA моду.[36]
OpenSolaris2010-07July 2010[37]
Android2013-74.3[38] - 24 July 2013[39]

Проблеми са RAID-ом

RST (Rapid Storage Technology Option Rom ) и драјвери дозвољавају Трим-у да прође до контролера на диску само на Intel 7 серији чипсетова уз драјвере верзије 11.2.0.0 или новије. За Intel чипсетове као што су 6. серија и најновији X79, модификовани (Option Rom) мора бити коришћен да би Трим био примљен од стране диска. Изузетак код X79 чипсета је ако је произвођач плоче додао Rom прекидач, што значи да су и RST и RST-E ромови унутар BIOS-а/UEFI-а, што омогућава да RST Rom буде коришћен, па Трим може да функционише, с обзиром да Trim не ради на RST-E Rom-у.[40] Званичан одговор Intel-а,[41] најбоље перформансе се постижу кад се користи верзија драјвера која одговара Rom-у, ако BIOS/UEFI има 11.0.0.0m Option Rom, онда користите 11. верзију драјвера.

У јануару 2012, подршка за Trim није била имплементирана у већини RAID технологија.[42][43] Један случај имплементације је у dmraid-у Линукс кернела након јануара 2011, који имплементира BIOS-асистирану "лажну хардверску RAID" подршку, и сада прослеђује било који Трим захтев фајл система из RAID низа.[44] Да се не помеша са dmraid-ом, Линуксов општенаменски софтверски RAID систем, mdraid, има експерименталну подршку за Трим са груписаним захтевима (за разлику од оног који ради након сваког брисања фајла) на RAID 1 низовиам када су системи подешени да периодично покрећу mdtrim алат на фајл системима (чак и оним као што је ext3 без природне Trim подршке).[45] За кратко време током марта 2010, корисници су мислили да Intel Rapid Storage Technology (RST) 9.6 драјвери подржавају Trim код RAID уређаја, али је Intel касније разјаснио да је Trim подржан за BIOS подешавања у AHCI и RAID моду, али не и ако је диск део RAID низа.[46]

У новембру 2011, Intel је назначио у документацији RST 11.5 Alpha драјвера да намеравају да уведу подршку за Trim на RAID 0 низовима у следећој верзији RST-а.[47] Red Hat је такође препоручио да се не користе софтверски RAID 1, 4, 5, и 6 низови на SSD дисковима, јер током иницијализације, већина алата за управљање RAID-ом (нпр. Линуксов mdadm) уписују на све блокове диска да би проверили да хеш табела (или диск-према-диску провера, у случају RAID 1) функционишу како треба, што узрокује да SSD помисли да су сви блокови у употреби, што значајно деградира перформансе.[48]

У августу 2012, Intel потврђује да 7. серија чипсетова са Rapid Storage Technology (RST) 11.2 драјверима добија подршку за TRIM код RAID-а 0 на Windows-у 7.[49] Иако Intel није потврдио подршку за 6. серију чипсетова, доказано је да TRIM на RAID 0 низовима ради код Z68 и P67 чипсетова од стране хардверских ентузијаиста за модификованим RAID option ROM-ом.[50] Претпоставља се да је недостатак званичне подршке за 6. серију чипсетова услед трошкова валидације[51] или покушаја да се купци наведу на надоградњу система,[52] пре него из техничких разлога.

Омогућавање код система без званичне подршке

Где Трим није званично подржан од стране фајл система, постоје алати који шаљу Трим захтев самостално. Они обичцно утврде који блокови су слободни и затим пошаљу ову листу као серију Трим команди диску. Овакви алати су доступни од више произвођача (Intel,[42] G.Skill[53]) или као општи алати (hdparm од верзије v9.17[54][55]).

Хардверска подршка

ATA

TRIM спецификација[56] је стандардизована као део AT Attachment (ATA) интерфејс стандарда, вођена од стране Technical Committee T13 као део International Committee for Information Technology Standards (INCITS).[57] TRIM је имплементиран под DATA SET MANAGEMENT командом (opcode 06h), нацрт ACS-2 спецификације.[58]

Мана оригиналне ATA TRIM команде је што је дефинисана као не-приоритетна, па се не може лако комбиновати са нормалним радом уређених операција уписивања и читања. SATA 3.1 уводи приоритетну TRIM команду да исправи ово.[59]

Постоји више типова Трима дефинисаних од стране SATA Words враћене из ATA IDENTIFY DEVICE команде.

Недетерминистички Трим: свака команда читања ка LBA након Трима може да врати другу вредност. (SATA Word 169 bit 0)

Детерминистички Трим (DRAT): све команде читања ка LBA након Трима враћају исту вредност, или постају одредљиве. (SATA Word 69 bit 14)

Детерминистички Read Zero after Trim (DZAT): све команде читања ка LBA након Трима враћају нулу. (SATA Word 69 bit 5)

Постоји додатна информација у SATA Word 105 која описује максимални број 512-бајтних блокова по DATA SET MANAGEMENT команди које диск подржава. Типично ово износи 8 (или 4 kB), али доста дискова ово смањује на 1 да задовољи Мајкрософтове хардверске захтеве за Трим, време извршења команде не треба да пређе преко 20 ms или 8 ms * (број уноса LBA опсега), шта год да је веће, и мора увек бити мање од 600 ms. http://msdn.microsoft.com/en-us/library/windows/hardware/jj134356.aspxИндивидуални LBA опсег се назива LBA Range Entry и представљен је помоћу осам бајтова. LBA је изражен преко првих шест бајтова LBA Range Entry-а и дужина опсега је број базиран на нули представљен са преостала 2 бајта. Ако је двобајтна дужина опсега нула, онда ће LBA Range Entry бити одбачен kao nepotreban.(need reference to T13 ATA/ATAPI Command Set - 3 (ACS-3))То значи да за свкаих 512-бајтни блок Трим опсега које диск подржава, максимум је 64 опсега од по 32 MB, или 2 GB. Ако уређај подржава SATA Word 105 на 8 онда би требало да може да Тримује 16 GB у једној Trim (DATA SET MANAGEMENT) команди.

SCSI

SCSI поседује UNMAP команду (потпуно аналогну TRIM) и WRITE SAME (10,16) команде са unmap флегом.[60]

SD/MMC

MultiMediaCard и SD ERASE (CMD38) команда омогућава сличну функционалност као ATA TRIM команда, али захтева да обрисани блокови буду преписани или са јединицама или нулама. eMMC 4.5 додатно дефинише "одбацивачку" подоперацију која је приближнија ATA TRIM по томе што садржај одбачених блокова може бити било шта, неодређен ("don't care" вредности).

Референце

Спољашње везе