這篇文章主要介紹“ssd存儲(chǔ)原理是什么”,在日常操作中,相信很多人在ssd存儲(chǔ)原理是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”ssd存儲(chǔ)原理是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
10年積累的網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有迪慶州免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
眾所周知SSD的讀寫速度遠(yuǎn)比hdd磁盤要快,理解ssd的工作原理使我們開發(fā)處高效儲(chǔ)存方案。
linux 相關(guān)指令
fstrim --fstab --verbose ## 回收(discard)文件系統(tǒng)上對(duì)應(yīng)磁盤未使用的塊 blkdiscard /dev/nvme1n1 ## 回收并擦除(discard)整個(gè)SSD塊設(shè)備 wipefs -a /dev/nvme1n1 ## 擦除(erase)文件系統(tǒng)的簽名
fstrim
fstrim命令實(shí)際可以視為手動(dòng)對(duì)SSD磁盤下發(fā)TRIM指令。使用-v參數(shù)可以直接查看TRIM回收擦除空間的大小。fstrim是針對(duì)已掛載的文件系統(tǒng)的SSD分區(qū)
root@xxxx:~# fstrim --help Usage: fstrim [options] <mount point>Discard unused blocks on a mounted filesystem. Options: -a, --all trim all supported mounted filesystems -A, --fstab trim all supported mounted filesystems from /etc/fstab -o, --offset <num> the offset in bytes to start discarding from -l, --length <num> the number of bytes to discard -m, --minimum <num> the minimum extent length to discard -v, --verbose print number of discarded bytes -n, --dry-run does everything, but trim -h, --help display this help -V, --version display version For more details see fstrim(8).
以下是執(zhí)行后返回的結(jié)果,以NVMe 為列
/home: 32.5 GiB (313011310592 bytes) trimmed on /dev/mapper/gat204--vg-root /boot/efi: 102.2 MiB (607301632 bytes) trimmed on /dev/nvme1n1p1 /boot: 732.5 MiB (825778176 bytes) trimmed on /dev/nvme1n1p2 /: 60.7 GiB (65154805760 bytes) trimmed on /dev/mapper/gat204--vg-swap_1
ubuntu與debian的systemd 服務(wù)可以定時(shí)執(zhí)行fstrim,省去手寫crontab腳本工作。
systemctl status fstrim.timer ##查詢服務(wù)狀態(tài) systemctl enable fstrim.timer ##開啟定時(shí)TRIM功能
blkdiscard
blkdiscard用于擦除(discard)SSD設(shè)備扇區(qū),和fstrim不同這條命令直接用在塊設(shè)備上,默認(rèn)擦除整個(gè)塊設(shè)備的所有扇區(qū)。
root@xxxx:~# blkdiscard -help Usage: blkdiscard [options] <device>Discard the content of sectors on a device. Options: -o, --offset <num> offset in bytes to discard from -l, --length <num> length of bytes to discard from the offset -p, --step <num> size of the discard iterations within the offset -s, --secure perform secure discard -z, --zeroout zero-fill rather than discard -v, --verbose print aligned length and offset -h, --help display this help -V, --version display version For more details see blkdiscard(8). root@ECSab169d:~# man blkdiscard
擦除(discard)成功后,沒(méi)有返回結(jié)果
root@xxxx:~# blkdiscard /dev/nvme1n1 root@xxxx:~#
wipefs
wipefs是linux自帶的程序,用來(lái)擦除(erase)文件系統(tǒng)的簽名,不會(huì)清空文件系統(tǒng)或設(shè)備中的任何其他數(shù)據(jù)。默認(rèn)情況下, wipefs 不會(huì)擦除非整個(gè)磁盤設(shè)備上的嵌套分區(qū)表。為此,需要—force選項(xiàng)。
root@gat204:~# wipefs --help Usage: wipefs [options] <device>Wipe signatures from a device. Options: -a, --all wipe all magic strings (BE CAREFUL!) -b, --backup create a signature backup in $HOME -f, --force force erasure -i, --noheadings don't print headings -J, --json use JSON output format -n, --no-act do everything except the actual write() call -o, --offset <num> offset to erase, in bytes -O, --output <list> COLUMNS to display (see below) -p, --parsable print out in parsable instead of printable format -q, --quiet suppress output messages -t, --types <list> limit the set of filesystem, RAIDs or partition tables -h, --help display this help -V, --version display version Available output columns: UUID partition/filesystem UUID LABEL filesystem LABEL LENGTH magic string length TYPE superblok type OFFSET magic string offset USAGE type description DEVICE block device name For more details see wipefs(8).
檢查SSD是否支持TRIM
##可以通過(guò) /sys/block 下的信息來(lái)判斷 SSD 支持 TRIM, discard_granularity 非 0 表示支持。 # cat /sys/block/sda/queue/discard_granularity 0 # cat /sys/block/nvme0n1/queue/discard_granularity 512
存儲(chǔ)元器件(閃存顆粒類別)
SSD的儲(chǔ)存是NAND-Flash閃存顆粒,分為SLC、MLC和QLC四種??梢源致缘匕验W存顆粒理解成是一個(gè)電容加上電壓計(jì)的組合。一個(gè)電容能存放一個(gè)比特的數(shù)據(jù),電壓計(jì)使電容能區(qū)分不同電壓,不同的電壓能存放更多的比特?cái)?shù)據(jù)。
SLC(Single-Level Cell): 每個(gè)Cell單元存儲(chǔ)1bit信息,也就是只有0、1兩種電壓變化,結(jié)構(gòu)簡(jiǎn)單,電壓控制也快速,反映出來(lái)的特點(diǎn)就是壽命長(zhǎng),性能強(qiáng),P/E壽命在1萬(wàn)到10萬(wàn)次之間,但缺點(diǎn)就是容量低而成本高.
MLC(Multi-Level Cell): 每個(gè)cell單元存儲(chǔ)2bit信息,需要更復(fù)雜的電壓控制,有00,01,10,11四種變化,這也意味著寫入性能、可靠性能降低了。其P/E壽命根據(jù)不同制程在3000-5000次不等.
TLC(Triple-Level Cell):每個(gè)cell單元存儲(chǔ)3bit信息,電壓從000到001有8種變化,容量比MLC再次增加1/3,成本更低,但是架構(gòu)更復(fù)雜,P/E編程時(shí)間長(zhǎng),寫入速度慢,P/E壽命也降至1000-3000次,部分情況會(huì)更低.壽命短只是相對(duì)而言的,通常來(lái)講,經(jīng)過(guò)重度測(cè)試的TLC顆粒正常使用5年以上是沒(méi)有問(wèn)題的.
QLC(Quad-Level Cell):QLC或者可以叫4bit MLC,電壓有16種變化,但是容量能增加33%,就是寫入性能、P/E壽命與TLC相比會(huì)進(jìn)一步降低。具體的性能測(cè)試上,美光有做過(guò)實(shí)驗(yàn)。讀取速度方面,SATA接口中的二者都可以達(dá)到540MB/S,QLC表現(xiàn)差在寫入速度上,因?yàn)槠銹/E編程時(shí)間就比MLC、TLC更長(zhǎng),速度更慢,連續(xù)寫入速度從520MB/s降至360MB/s,隨機(jī)性能更是從9500 IOPS降至5000 IOPS,損失將近一半.
這四類當(dāng)中,SLC的性能最優(yōu),價(jià)格超高;MLC性能夠用,價(jià)格適中為消費(fèi)級(jí)SSD應(yīng)用主流;TLC綜合性能最低,價(jià)格最便宜,但可以通過(guò)高性能主控、主控算法來(lái)彌補(bǔ)、提高TLC閃存的性能;QLC出現(xiàn)的時(shí)間很早,價(jià)格便宜,容量大。
P/E以及其SSD底層儲(chǔ)存結(jié)構(gòu)
P指的是Program(編程),E指的是Erease (擦除), 閃存完全擦寫一次可以稱為1次P/E,因此閃存的壽命以P/E為單位。和HDD機(jī)械硬盤不同,HDD的數(shù)據(jù)是可以覆寫的(Overwrite),而SSD在寫入數(shù)據(jù)前必須先進(jìn)行擦除(erase),一般在格式化文件系統(tǒng)步驟或者SSD出廠配置的過(guò)程中,SSD已進(jìn)行了全盤擦除(erase),因此SSD的首次寫入數(shù)據(jù)是直接編程。
SSD 在閃存單元中存取數(shù)據(jù)時(shí)有 page和 block的概念。SSD 被劃分成很多 block, 而 block 被劃分成很多 page。
NAND-Flash讀寫流程
Page是NAND-Flash單次讀寫單位,大小一般為4K或者4K字節(jié)的倍數(shù),寫操作只能寫到空的 page,而清除數(shù)據(jù)(Erase) 是以 塊(block) 為單位的。塊的擦除次數(shù)有壽命限制,超限制就會(huì)變成壞塊。
用戶對(duì)SSD的寫入數(shù)據(jù)操作可以分為兩種類型
1.原來(lái)SSD磁盤上沒(méi)有數(shù)據(jù),寫入數(shù)據(jù)。
2.SSD磁盤上有數(shù)據(jù),對(duì)該數(shù)據(jù)進(jìn)行修改(包括刪除)。
前者只需把數(shù)據(jù)直接寫入到空白頁(yè)即可,后者則是read-modify-write方式操作,讀取原有page的內(nèi)容到緩存中并進(jìn)行更新,最后寫入到其他空的page,原有的page置為無(wú)效頁(yè)。
可以想象對(duì)文件的持續(xù)反復(fù)的修改,將會(huì)產(chǎn)生大量的無(wú)效頁(yè),這就需要“垃圾回收”(Garbage Collection-gc)機(jī)制來(lái)回收這些無(wú)效頁(yè),否則可以寫入空間越來(lái)越小。
FTL 和磨損均衡
SSD的主控執(zhí)行磨損均衡(Wear-Leveling)策略,使SSD磁盤各個(gè)塊的擦除次數(shù)均勻分?jǐn)偟礁鱾€(gè)塊上。就像內(nèi)存MMU一樣,SSD內(nèi)部使用閃存轉(zhuǎn)換層(FTL)存放了邏輯塊地址(Logical Block Address,簡(jiǎn)稱 LBA)到物理塊地址(Physical Block Address,簡(jiǎn)稱 PBA)的映射。操作系統(tǒng)訪問(wèn)的硬盤地址,其實(shí)都是邏輯地址。只有通過(guò) FTL 轉(zhuǎn)換之后,才會(huì)變成實(shí)際的物理地址,找到對(duì)應(yīng)的塊進(jìn)行訪問(wèn)。操作系統(tǒng)本身,不需要去考慮塊的磨損程度,只要和操作機(jī)械硬盤一樣來(lái)讀寫數(shù)據(jù)就好了。
“垃圾回收”機(jī)制
寫入放大(write amplification)
上文提及過(guò)數(shù)據(jù)的反復(fù)修改會(huì)產(chǎn)生大量的無(wú)效頁(yè),一旦整個(gè)塊(block)的空間不足以寫入數(shù)據(jù),SSD會(huì)將這個(gè)塊(block)的數(shù)據(jù)讀入到緩存中,擦除這個(gè)塊(block)所中的頁(yè),然后再把緩存中已更新的數(shù)據(jù)寫入進(jìn)去。這種read-erase-modify-write過(guò)程,就好比寫入的數(shù)據(jù)可能只有一個(gè)頁(yè)4KB,但實(shí)際要擦除并且寫N個(gè)頁(yè),稱之為寫入放大。
寫入放大的倍數(shù)越大,寫入的速度就越慢。
TRIM指令
TRIM是SSD的ATA-8指令,解決寫入放大的關(guān)鍵。
文件系統(tǒng)在修改或者刪除過(guò)程中,發(fā)送給通知給SSD記錄產(chǎn)生的無(wú)效頁(yè),間隔一定時(shí)間再統(tǒng)一回收擦除所有無(wú)效頁(yè),擦除更新無(wú)效頁(yè)所在的塊(block)。
一方面預(yù)留足夠多的空間,避免因空間不足產(chǎn)生寫入放大的情況。另一方面,使用TRIM,在IO閑時(shí)回收擦除無(wú)效頁(yè),這樣有效保證SSD的性能以及提高壽命。
discard與TRIM的區(qū)別
在linux術(shù)語(yǔ)中,discard指的就是TRIM
不建議使用linux系統(tǒng)默認(rèn)的TRIM功能
TRIM功能有兩種方式啟動(dòng),一種是連續(xù)TRIM,就是直接在文件系統(tǒng)回收塊的時(shí)候直接發(fā)TRIM命令,這種方式對(duì)性能影響比較大,在fstab掛載的時(shí)候把default修改成discard。另外一種是定期執(zhí)行fstrim批量進(jìn)行TRIM操作,這樣避免平時(shí)的性能影響,不過(guò)fstrim的執(zhí)行時(shí)機(jī)要選好,畢竟批量TRIM的時(shí)候會(huì)對(duì)其它任務(wù)性能影響較大。
根據(jù)文章《Ubuntu Doesn’t TRIM SSDs By Default: Why Not and How To Enable It Yourself》提及到
“The kernel implementation of realtime trim in 11.2, 11.3, and 11.4 is not optimized. The spec. calls for trim supporting a vectorized list of trim ranges, but as of kernel 3.0 trim is only invoked by the kernel with a single discard / trim range and with current mid 2011 SSDs this has proven to cause a performance degradation instead of a performance increase. There are few reasons to use the kernels realtime discard support with pre-3.1 kernels. It is not known when the kernels discard functionality will be optimized to work beneficially with current generation SSDs.” [Source]
利用內(nèi)核方式的discard 方式無(wú)法感知對(duì)SSD當(dāng)前性能的影響。
實(shí)踐
使用fio測(cè)試nvme裸設(shè)備
使用fio對(duì)裸設(shè)備直接進(jìn)行randwrite測(cè)試,在超過(guò)30分鐘速度由400MiB/s降低至80MiB/s 分析原因得出SSD觸發(fā)了放大寫現(xiàn)象,并且由于沒(méi)有掛載文件系統(tǒng),無(wú)法使用fstrim手動(dòng)回收空間(可以理解成,在沒(méi)有文件系統(tǒng)標(biāo)記下,SSD也不知道哪些是無(wú)效頁(yè)),再次進(jìn)行fio測(cè)試速度依然是80MiB/s。使用blkdiscard進(jìn)行全盤擦除后,速度恢復(fù)正常。
參考文獻(xiàn)
《Trim命令》 wiki百科
《淺談分布式存儲(chǔ)之SSD基本原理》滴滴云
《Linux 下啟用 SSD TRIM 功能》Louis
結(jié)束語(yǔ)
當(dāng)使用fio直接ssd磁盤進(jìn)行寫入測(cè)試后,對(duì)磁盤使用blkdiscard可恢復(fù)原來(lái)的速度。
到此,關(guān)于“ssd存儲(chǔ)原理是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
名稱欄目:ssd存儲(chǔ)原理是什么
文章源于:http://www.rwnh.cn/article24/pgseje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、App開發(fā)、服務(wù)器托管、網(wǎng)站導(dǎo)航、網(wǎng)站策劃、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)