溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux 下怎么啟用 SSD TRIM 功能

發(fā)布時(shí)間:2021-07-19 10:26:48 來(lái)源:億速云 閱讀:666 作者:chen 欄目:云計(jì)算

這篇文章主要介紹“Linux 下怎么啟用 SSD TRIM 功能”,在日常操作中,相信很多人在Linux 下怎么啟用 SSD TRIM 功能問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Linux 下怎么啟用 SSD TRIM 功能”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

之前知道 SSD 有 TRIM 的功能,但一直沒(méi)有深究,直到最近同事問(wèn)起。目前了解的信息如下,如有錯(cuò)誤,歡迎指正。

SSD 在閃存單元中存取數(shù)據(jù)時(shí)有 page 和 block 的概念。SSD 被劃分成很多 block, 而 block 被劃分成很多 page。

Linux 下怎么啟用 SSD TRIM 功能

SSD Read 和 Write 都以 page 為單位,而清除數(shù)據(jù)(Erase) 是以 block 為單位的。不過(guò) SSD 的 Write 只能寫(xiě)到空的 page 上,不能像傳統(tǒng)機(jī)械磁盤(pán)那樣直接覆蓋,修改數(shù)據(jù)時(shí),操作流程為 read-modify-write:讀取原有 page 的內(nèi)容,在 cache 中修改,寫(xiě)入新的空的 page 中,修改邏輯地址到新的 page ,原有 page 標(biāo)記為 'stale',并沒(méi)有清零。

Linux 文件系統(tǒng)對(duì)于刪除操作,只標(biāo)記為未使用,實(shí)際并沒(méi)有清零,底層存儲(chǔ)如 SSD 和傳統(tǒng)機(jī)械磁盤(pán)并不知道哪些數(shù)據(jù)塊可用,哪些數(shù)據(jù)塊可以 Erase。所以對(duì)于非空的 page,SSD 在寫(xiě)入前必須先進(jìn)行一次 Erase,則寫(xiě)入過(guò)程為 read-erase-modify-write: 將整個(gè) block 的內(nèi)容讀取到 cache 中,整個(gè) block 從 SSD 中 Erase, 要覆寫(xiě)的 page 寫(xiě)入到 cache 的 block 中,將 cache 中更新的 block 寫(xiě)入閃存介質(zhì),這個(gè)現(xiàn)象稱之為寫(xiě)入放大( write amplification)。

為了解決這個(gè)問(wèn)題,SSD 開(kāi)始支持 TRIM,TRIM 功能使操作系統(tǒng)得以通知 SSD 哪些頁(yè)不再包含有效的數(shù)據(jù)。TRIM 功能有助于延長(zhǎng) SSD 的長(zhǎng)期性能和使用壽命。如果要啟用 TRIM, 需要確認(rèn) SSD 、操作系統(tǒng)、文件系統(tǒng)都支持 TRIM。

根據(jù) RedHat 的 SOLID-STATE DISK DEPLOYMENT GUIDELINES 介紹:隨著所使用的 block 接近磁盤(pán)容量, SSD 的性能會(huì)開(kāi)始降低,性能影響程度因供應(yīng)商而異,但是所有設(shè)備都會(huì)遇到一些性能下降。為了解決性能退化問(wèn)題,Linux 操作系統(tǒng)支持發(fā)送 discard 請(qǐng)求來(lái)通知存儲(chǔ)器哪些 block 不再使用。

檢測(cè) SSD 是否支持 TRIM

可以通過(guò) /sys/block 下的信息來(lái)判斷 SSD 支持 TRIM, discard_granularity 非 0 表示支持。

# cat /sys/block/sda/queue/discard_granularity0# cat /sys/block/nvme0n1/queue/discard_granularity512

也可以直接使用 lsblk 來(lái)檢測(cè),DISC-GRAN (discard granularity) 和 DISC-MAX (discard max bytes) 列非 0 表示該 SSD 支持 TRIM 功能。

# lsblk --discardNAME    DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda            0        0B       0B         0├─sda1         0        0B       0B         0├─sda2         0        0B       0B         0└─sda3         0        0B       0B         0sr0            0        0B       0B         0nvme0n1      512      512B       2T         1nvme1n1      512      512B       2T         1

網(wǎng)上也有文章介紹通過(guò) hdparm 來(lái)檢測(cè),不過(guò)我在 Intel P4500 SSD 測(cè)試沒(méi)有返回該信息。

# hdparm -I /dev/sda | grep TRIM*    Data Set Management TRIM supported (limit 1 block)

Continuous TRIM

RedHat Enterprise Linux 6.3 和之前版本,只有 ext4 文件系統(tǒng)完全支持 discard。 RedHat Enterprise Linux 6.4 開(kāi)始,ext4 和 XFS 已經(jīng)完全支持 discard。

對(duì)于 ext4 文件系統(tǒng),可以在/etc/fstab里添加 discard 參數(shù)來(lái)啟用 TRIM,添加前請(qǐng)確認(rèn)你的 SSD 支持 TRIM。

/dev/sdb1  /data1       ext4   defaults,noatime,discard   0  0

以下是 ext4 文檔中的掛載參數(shù)介紹:

discard

nodiscard(*)

Controls whether ext4 should issue discard/TRIM. commands to the underlying block device when blocks are freed.

Periodic TRIM

util-linux 中自帶了 fstrim 工具(Discard unused blocks on a mounted filesystem.),平常用 -a 選項(xiàng)(-a, --all trim all mounted filesystems that are supported)比較多,可以自動(dòng)檢測(cè)硬盤(pán)是否支持 trim 功能,并在已掛載文件系統(tǒng)上執(zhí)行 trim。

有興趣的同學(xué)可以看 fstrim 源碼 具體實(shí)現(xiàn)。

以下是我在 CentOS 7.4 系統(tǒng)做的測(cè)試,/dev/nvme0n1 和 /dev/nvme1n1 是 Intel P4500 NVMe SSD, 文件系統(tǒng)為 ext4。

# fstrim -a -v/data2:3.4 TiB (3710506934272 字節(jié)) 已修剪
/data1:3.2 TiB (3546946879488 字節(jié)) 已修剪# df -h文件系統(tǒng)        容量  已用  可用 已用% 掛載點(diǎn)
/dev/sda2       267G  7.0G  246G    3% /
devtmpfs         63G     0   63G    0% /dev
tmpfs            63G     0   63G    0% /dev/shm
tmpfs            63G  1.1G   62G    2% /run
tmpfs            63G     0   63G    0% /sys/fs/cgroup
/dev/sda1       190M  147M   29M   84% /boot
/dev/nvme0n1    3.6T  365G  3.1T   11% /data1
/dev/nvme1n1    3.6T  212G  3.2T    7% /data2
tmpfs            13G     0   13G    0% /run/user/1000

fstrim 過(guò)程中,磁盤(pán) IO 使用率還是比較高的, 兩塊盤(pán)加起來(lái)用了 2 分鐘。

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme0n1           0.00   319.00  592.00  716.00  2368.00 76391672.00 116810.46     1.10    0.84    0.20    1.37   0.74  97.40
nvme1n1           0.00     0.00    0.00    6.00     0.00    24.00     8.00     0.00    0.00    0.00    0.00   0.00   0.00
sda               0.00     9.00    0.00    2.00     0.00    44.00    44.00     0.00    0.00    0.00    0.00   0.00   0.00

在使用 systemd 的 Linux 發(fā)行版中,一般都自帶了 fstrim.timer 和 fstrim.service,啟用后會(huì)定期一周執(zhí)行一次 fstrim。以下是 CentOS 7.4 中的 service 文件。

# systemctl enable fstrim.timer# systemctl start fstrim.timer# cat /usr/lib/systemd/system/fstrim.timer[Unit]Description=Discard unused blocks once a weekDocumentation=man:fstrim[Timer]OnCalendar=weeklyAccuracySec=1hPersistent=true[Install]WantedBy=multi-user.target# cat /usr/lib/systemd/system/fstrim.service[Unit]Description=Discard unused blocks[Service]Type=oneshotExecStart=/usr/sbin/fstrim -a

參考

Arch Wiki: Solid State Drive

How to properly activate TRIM for your SSD on Linux: fstrim, lvm and dm-crypt

How To Configure Periodic TRIM for SSD Storage on Linux Servers

優(yōu)化永久性磁盤(pán)和本地 SSD 的性能

從 Intel 工程師那邊了解到,Intel Optane SSD 不同于 NAND, 使用了 write-in-place 技術(shù), 沒(méi)有垃圾回收,沒(méi)有 trim。而 Intel P4500、P4600 系列的 NVMe SSD 都是 NAND 產(chǎn)品,主動(dòng) trim 可以優(yōu)化性能并延長(zhǎng)壽命。

到此,關(guān)于“Linux 下怎么啟用 SSD TRIM 功能”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI