您好,登錄后才能下訂單哦!
這篇文章主要介紹“Linux 下怎么啟用 SSD TRIM 功能”,在日常操作中,相信很多人在Linux 下怎么啟用 SSD TRIM 功能問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Linux 下怎么啟用 SSD TRIM 功能”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
之前知道 SSD 有 TRIM 的功能,但一直沒有深究,直到最近同事問起。目前了解的信息如下,如有錯誤,歡迎指正。
SSD 在閃存單元中存取數據時有 page 和 block 的概念。SSD 被劃分成很多 block, 而 block 被劃分成很多 page。
SSD Read 和 Write 都以 page 為單位,而清除數據(Erase) 是以 block 為單位的。不過 SSD 的 Write 只能寫到空的 page 上,不能像傳統機械磁盤那樣直接覆蓋,修改數據時,操作流程為 read-modify-write:讀取原有 page 的內容,在 cache 中修改,寫入新的空的 page 中,修改邏輯地址到新的 page ,原有 page 標記為 'stale',并沒有清零。
Linux 文件系統對于刪除操作,只標記為未使用,實際并沒有清零,底層存儲如 SSD 和傳統機械磁盤并不知道哪些數據塊可用,哪些數據塊可以 Erase。所以對于非空的 page,SSD 在寫入前必須先進行一次 Erase,則寫入過程為 read-erase-modify-write: 將整個 block 的內容讀取到 cache 中,整個 block 從 SSD 中 Erase, 要覆寫的 page 寫入到 cache 的 block 中,將 cache 中更新的 block 寫入閃存介質,這個現象稱之為寫入放大( write amplification)。
為了解決這個問題,SSD 開始支持 TRIM,TRIM 功能使操作系統得以通知 SSD 哪些頁不再包含有效的數據。TRIM 功能有助于延長 SSD 的長期性能和使用壽命。如果要啟用 TRIM, 需要確認 SSD 、操作系統、文件系統都支持 TRIM。
根據 RedHat 的 SOLID-STATE DISK DEPLOYMENT GUIDELINES 介紹:隨著所使用的 block 接近磁盤容量, SSD 的性能會開始降低,性能影響程度因供應商而異,但是所有設備都會遇到一些性能下降。為了解決性能退化問題,Linux 操作系統支持發送 discard 請求來通知存儲器哪些 block 不再使用。
可以通過 /sys/block 下的信息來判斷 SSD 支持 TRIM, discard_granularity 非 0 表示支持。
# cat /sys/block/sda/queue/discard_granularity0# cat /sys/block/nvme0n1/queue/discard_granularity512
也可以直接使用 lsblk 來檢測,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
網上也有文章介紹通過 hdparm 來檢測,不過我在 Intel P4500 SSD 測試沒有返回該信息。
# hdparm -I /dev/sda | grep TRIM* Data Set Management TRIM supported (limit 1 block)
RedHat Enterprise Linux 6.3 和之前版本,只有 ext4 文件系統完全支持 discard。 RedHat Enterprise Linux 6.4 開始,ext4 和 XFS 已經完全支持 discard。
對于 ext4 文件系統,可以在/etc/fstab
里添加 discard 參數來啟用 TRIM,添加前請確認你的 SSD 支持 TRIM。
/dev/sdb1 /data1 ext4 defaults,noatime,discard 0 0
以下是 ext4 文檔中的掛載參數介紹:
discard
nodiscard(*)
Controls whether ext4 should issue discard/TRIM. commands to the underlying block device when blocks are freed.
util-linux 中自帶了 fstrim 工具(Discard unused blocks on a mounted filesystem.),平常用 -a 選項(-a, --all trim all mounted filesystems that are supported)比較多,可以自動檢測硬盤是否支持 trim 功能,并在已掛載文件系統上執行 trim。
有興趣的同學可以看 fstrim 源碼 具體實現。
以下是我在 CentOS 7.4 系統做的測試,/dev/nvme0n1 和 /dev/nvme1n1 是 Intel P4500 NVMe SSD, 文件系統為 ext4。
# fstrim -a -v/data2:3.4 TiB (3710506934272 字節) 已修剪 /data1:3.2 TiB (3546946879488 字節) 已修剪# df -h文件系統 容量 已用 可用 已用% 掛載點 /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 過程中,磁盤 IO 使用率還是比較高的, 兩塊盤加起來用了 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 發行版中,一般都自帶了 fstrim.timer 和 fstrim.service,啟用后會定期一周執行一次 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
優化永久性磁盤和本地 SSD 的性能
從 Intel 工程師那邊了解到,Intel Optane SSD 不同于 NAND, 使用了 write-in-place 技術, 沒有垃圾回收,沒有 trim。而 Intel P4500、P4600 系列的 NVMe SSD 都是 NAND 產品,主動 trim 可以優化性能并延長壽命。
到此,關于“Linux 下怎么啟用 SSD TRIM 功能”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。