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 BSD | [17] | May 2011|
FreeBSD | [18] | 8.1 - July 2010Подршка је уведена на слоју блока уређаја у верзији 8.1. Подршка фајл система је уведена код FreeBSD 8.3 и FreeBSD 9, почевши од UFS.[19] ZFS подршка је уведена у FreeBSD 9.2.[20][21] FreeBSD 10 подржава Трим код софтверских RAID конфигурација.[22] |
Linux | [23] | 2.6.28–25 December 2008Иницијална подршка за операције одбацивања је уведена за 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 X | [31] | 10.6.8–23 June 2011Иако је AHCI драјвер добио могућност да прикаже да ли меморијски уређај подржава Trim операцију још у верзији 10.6.6 (10J3210),[32] сама функцоналност је остала недосупна до верзије 10.6.8, када је Trim операција изложена преко IOStorageFamily и додата подршка у фајл систему (HFS+). Неки форуми тврде да Mac OS X подржава Trim само за Appled SSD дискове; Апликације из екстерних извора су доступне да омогуће трим за дискове осталих произвођача. |
Microsoft Windows | [33][34] | NT 6.1 (Windows 7 and Windows Server 2008 R2) - October 2009Windows 7 подржава трим само за обичне SATA дискове, а не подржава за PCI-Express SSD дискове који су дургачији тип уређаја, иако би уређај сам по себи прихватио команду.[35] Потврђено је да са изворним Microsoft драјверима Trim функционише у AHCI и традиционалном IDE / ATA моду.[36] |
OpenSolaris | [37] | July 2010|
Android | [38] - 24 July 2013[39] | 4.3
Проблеми са 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" вредности).
Референце
уреди- ^ Intel Corporation (14. 9. 2010). „Intel® High Performance Solid State Drive - Advantages of TRIM”. Intel.com. Приступљено 21. 2. 2012.
- ^ Shimpi, Anand Lal (18. 3. 2009). „The SSD Anthology”. AnandTech.com. стр. 4. Приступљено 19. 6. 2010.
- ^ а б Shimpi, Anand Lal. (2009-03-18). стр. 10.
- ^ Shimpi, Anand Lal. (2009-03-18). стр. 11.
- ^ „Kingston SSDNow V Plus 100 Review”. Anandtech. Anand Lal Shimpi. 11. 11. 2010. Приступљено 10. 12. 2010.
- ^ а б в Savill, John (21. 4. 2009). „I heard solid-state disks (SSDs) suffer from a decline in write performance as they're used. Why?”. WindowsITPro. Архивирано из оригинала 30. 06. 2012. г. Приступљено 19. 6. 2010.
- ^ а б в Shimpi, Anand Lal. (2009-03-18). стр. 7.
- ^ а б Savill, John (22. 4. 2009). „What is the TRIM function for solid-state disks (SSDs) and why is it important?”. WindowsITPro. Архивирано из оригинала 09. 02. 2013. г. Приступљено 19. 6. 2010.
- ^ Malventano, Allyn (13. 2. 2009). „Long-term performance analysis of Intel Mainstream SSDs”. PC Perspective. Архивирано из оригинала 28. 02. 2012. г. Приступљено 10. 2. 2012.
- ^ а б Shimpi, Anand Lal. (2009-03-18). стр. 5.
- ^ Shimpi, Anand Lal. (2009-03-18). стр. 8.
- ^ „Write Amplification: Intel's Secret Sauce”. ExtremeTech.com. Архивирано из оригинала 15. 11. 2010. г. Приступљено 6. 11. 2010.
- ^ „Inside the X25-M Controller: Wear Leveling, Write Amplification Control”. TomsHardware.com. 8. 9. 2008. Приступљено 6. 11. 2010.
- ^ „Too TRIM? When SSD Data Recovery is Impossible”. TechGage. TechGage. 5. 3. 2010. Приступљено 16. 4. 2010.
- ^ „TrueCrypt - TRIM Operation”. TrueCrypt.org. Приступљено 6. 11. 2010.
- ^ http://www.sata-io.org/technology/6Gbdetails.asp
- ^ „Preliminary TRIM support”.
- ^ „FreeBSD 8.1-RELEASE Release Notes: Disks and Storage”. Приступљено 1. 9. 2010.
- ^ „Add kernel side support for BIO_DELETE/TRIM on UFS”. Приступљено 1. 2. 2011.
- ^ „Added ZFS TRIM support which is enabled by default.”. Приступљено 5. 6. 2013.
- ^ „FreeBSD 9.2-RELEASE Announcement”. Приступљено 4. 10. 2013.
- ^ „Base revision 242323 – Add basic BIO_DELETE support to GEOM RAID class for all RAID levels”. Приступљено 30. 10. 2012.
- ^ „Block device changes in Linux 2.6.28”.
- ^ „Storage changes in Linux 2.6.33”. Kernel Newbies. Приступљено 1. 9. 2010.
- ^ HOWTO: Configure Ext4 to Enable TRIM Support for SSDs on Ubuntu and Other Distributions - Forked by Nicolay
- ^ „Btrfs improvements in Linux 2.6.32”.
- ^ „Filesystem changes in Linux 2.6.30”. Приступљено 28. 3. 2012.
- ^ „Filesystem changes in Linux 3.0”.
- ^ Freemyer, Greg. „OpenSUSE forum - SSD detection when creating first time fstab”. Архивирано из оригинала 27. 01. 2013. г. Приступљено 28. 11. 2013.
- ^ TRIM discussion in OpenSuSE website
- ^ „Mac OS X 10.6.8 Brings TRIM Support for Apple SSDs, Graphics Improvements”. 24. 2. 2012.
- ^ „Macbook Pros ship with active SSD TRIM support”. 4. 3. 2011.
- ^ „Support and Q&A for Solid-State Drives”. MSDN. 9. 5. 2009. Приступљено 12. 8. 2010.
- ^ „Windows 7 Enhancements for Solid-State Drives” (PDF). Microsoft downloads. Microsoft Corporation. 12. 11. 2008. Приступљено 8. 7. 2009.
- ^ Geoff Gasior (2012) OCZ's RevoDrive 3 X2 240GB solid-state drive
- ^ Coles, Olin (15. 4. 2010). „SSD Benchmark Tests: SATA IDE vs AHCI Mode - AHCI vs IDE Final Thoughts”. BenchmarkReviews. Архивирано из оригинала 03. 12. 2013. г. Приступљено 20. 8. 2013.
- ^ „SATA TRIM support in OpenSolaris”. 29. 7. 2010. Архивирано из оригинала 30. 06. 2012. г. Приступљено 28. 11. 2013.
- ^ „Android 4.3 Update Brings TRIM to All Nexus Devices”. 29. 7. 2013. Приступљено 30. 7. 2013.
- ^ "Android 4.3 announced, rolling out to Nexus devices today".The Verge. 24 July 2013. Retrieved 24 July 2013.
- ^ AnandTech | Intel Brings TRIM to RAID-0 SSD Arrays on 7-Series Motherboards, We Test It
- ^ TRIM Command Confirmed With RAID 0 on Intel 7 Series
- ^ а б „Intel SSD Optimizer White Paper” (PDF). Intel Corporation. Архивирано из оригинала (PDF) 30. 06. 2012. г. Приступљено 23. 1. 2010.
- ^ „Even Without Support for the TRIM Command, SSD Flies on Mac OS X”. hardmac.com. Архивирано из оригинала 26. 05. 2010. г. Приступљено 6. 11. 2010.
- ^ „Possible to get SSD TRIM (discard) working on ext4 + LVM + software RAID in Linux? - Server Fault”. Приступљено 29. 11. 2011.
- ^ „Cyberax/mdtrim - GitHub”. Приступљено 29. 11. 2011.
- ^ „Is there TRIM support for RAID configurations?”. Intel. 26. 3. 2010. Приступљено 6. 11. 2010.
- ^ „AnandTech - Intel to Add TRIM Support for RAID 0”. 21. 11. 2011. Приступљено 29. 11. 2011.
- ^ „Red Hat Enterprise Linux 6 Storage Administration Guide”. 2. 12. 2011. Приступљено 23. 2. 2012.
- ^ „Intel Confirms RAID0 TRIM Support on 7-Series Chipsets”. 19. 8. 2012. Архивирано из оригинала 22. 10. 2012. г. Приступљено 14. 1. 2013.
- ^ „RAID0 trim and SRT seems possible on 6-series and 5-Series”. 18. 11. 2012. Архивирано из оригинала 18. 01. 2013. г. Приступљено 14. 1. 2013.
- ^ „TRIM & RAID-0 SSD Arrays Work With Intel 6-Series Motherboards Too”. 28. 11. 2012. Приступљено 14. 1. 2013.
- ^ „Intel Brings TRIM to RAID-0 SSD Arrays on 7-Series Motherboards, We Test It”. 16. 8. 2012. Приступљено 14. 1. 2013.
- ^ „wiper.exe for Falcon Series”. XtremeSystems. Архивирано из оригинала 25. 06. 2013. г. Приступљено 23. 1. 2010.
- ^ „hdparm-9.17 released, with experimental trim/wiper scripts for SSDs”. Приступљено 14. 8. 2010.
- ^ „hdparm project page”. sourceforge.net. Приступљено 14. 8. 2010.
- ^ „Data Set Management Commands Proposal for ATA8-ACS2 (revision 6)”. INCITS T13. INCITS. 12. 12. 2007. Архивирано из оригинала 13. 06. 2010. г. Приступљено 8. 7. 2009. (draft specification T13/e07154r6)
- ^ „T13 documents referring to TRIM”. INCITS T13. INCITS. Архивирано из оригинала 26. 05. 2010. г. Приступљено 8. 7. 2009.
- ^ „T13 ATA8 Draft Spec 1697-D” (PDF). INCITS. 23. 6. 2010. Архивирано из оригинала (PDF) 22. 03. 2011. г. Приступљено 14. 8. 2010.
- ^ „SATA 6Gb/s”. Serial ATA International Organization. Приступљено 26. 9. 2012.
- ^ „Note for SCSI UNMAP support in FreeBSD mailing list”.
Спољашње везе
уреди- From write() down to flash chips – an explanation on how the Trim command lets SSDs erase data not used by the filesystem
- TRIM Command White Paper - a white paper explaining the Trim command's purpose and actions