SSD/NVMe Tweaks (TRIM/Discard): Difference between revisions

From WikiMLT
Line 25: Line 25:
* Red Hat Docs: <u>[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/managing_storage_devices/enabling-multipathing-on-nvme-devices_managing-storage-devices Red Hat > '''<nowiki>[9]</nowiki>''' > Managing storage devices > Chapter 10. '''Enabling multipathing on NVMe devices''']</u>
* Red Hat Docs: <u>[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/managing_storage_devices/enabling-multipathing-on-nvme-devices_managing-storage-devices Red Hat > '''<nowiki>[9]</nowiki>''' > Managing storage devices > Chapter 10. '''Enabling multipathing on NVMe devices''']</u>
* Red Hat Docs: <u>[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/managing_file_systems/discarding-unused-blocks_managing-file-systems Red Hat > '''<nowiki>[9]</nowiki>''' > Managing storage devices > Chapter 37. '''Discarding unused blocks''']</u>
* Red Hat Docs: <u>[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/managing_file_systems/discarding-unused-blocks_managing-file-systems Red Hat > '''<nowiki>[9]</nowiki>''' > Managing storage devices > Chapter 37. '''Discarding unused blocks''']</u>
* Arch Linux Wiki: [https://wiki.archlinux.org/title/Solid_state_drive#Continuous_TRIM '''Solid state drive''']


== Test Whether a Devise Supports TRIM ==
== Test Whether a Devise Supports TRIM ==
Line 74: Line 75:


* SmartMonTools: [https://www.smartmontools.org/wiki/NVMe_Support NVMe support]
* SmartMonTools: [https://www.smartmontools.org/wiki/NVMe_Support NVMe support]
* Linux NVMe at GitHub: [https://github.com/linux-nvme/nvme-cli '''nvme-cli''']
* Percona: [https://www.percona.com/blog/2017/02/09/using-nvme-command-line-tools-to-check-nvme-flash-health/ Using NVMe Command Line Tools to Check NVMe Flash Health]
* Percona: [https://www.percona.com/blog/2017/02/09/using-nvme-command-line-tools-to-check-nvme-flash-health/ Using NVMe Command Line Tools to Check NVMe Flash Health]
* Unix and Linux: [https://unix.stackexchange.com/q/652623 How to evaluate the wear level of a NVMe SSD?]
* Unix and Linux: [https://unix.stackexchange.com/q/652623 How to evaluate the wear level of a NVMe SSD?]
* NVMexpress.org: [https://nvmexpress.org/ NVMe Current Specifications]
* NVMexpress.org: [https://nvmexpress.org/ NVMe Current Specifications]
* Linux NVMe at GitHub: [https://github.com/linux-nvme/nvme-cli '''nvme-cli''']


== [Batch discard] TRIM from CLI ==
== [Batch discard] TRIM from CLI ==
Line 146: Line 147:
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
#/dev/disk/by-uuid/09e7c8ed-fb55-4a44-8be4-18b1696fc714 / ext4 defaults 0 0
#/dev/disk/by-uuid/09e7c--18b1696fc714 / ext4 defaults 0 0
/dev/disk/by-uuid/09e7c8ed-fb55-4a44-8be4-18b1696fc714 / ext4 discard,async,noatime,nodiratime,errors=remount-ro 0 1
#/dev/disk/by-uuid/09e7c--18b1696fc714 / ext4 discard,defaults 0 0
#/dev/disk/by-uuid/09e7c--18b1696fc714 / ext4 discard,async,noatime,nodiratime,errors=remount-ro 0 1
/dev/disk/by-uuid/09e7c--18b1696fc714 / ext4 discard,errors=remount-ro 0 1


</syntaxhighlight>
</syntaxhighlight>
'''Warning:''' Users need to be certain that their [[{{FULLPAGENAME}}#Test Whether a Devise Supports TRIM|block device supports TRIM]] before attempting to use the discard <code>mounting</code> option. Otherwise data loss can occur!   
'''Warning:''' Users need to be certain that their [[{{FULLPAGENAME}}#Test Whether a Devise Supports TRIM|block device supports TRIM]] before attempting to use the discard <code>mounting</code> option. Otherwise data loss can occur!   
=== References ===
* Arch Linux Wiki: [https://wiki.archlinux.org/title/Solid_state_drive#Continuous_TRIM '''Solid state drive''']
* How-To Geek: [https://www.howtogeek.com/62761/how-to-tweak-your-ssd-in-ubuntu-for-better-performance/ '''How to Tweak Your SSD in Ubuntu for Better Performance''']
* How-To Geek: [https://www.howtogeek.com/howto/38125/htg-explains-what-is-the-linux-fstab-and-how-does-it-work/ '''What Is the Linux fstab File, and How Does It Work?''']
* itBeginner.net: [https://itbeginner.net/tweak-optimize-ssd-ubuntu-linux-mint/ How to tweak and optimize SSD for Ubuntu, Linux Mint]
* Ask Ubuntu: [https://askubuntu.com/questions/1400/how-do-i-optimize-the-os-for-ssds How do I optimize the OS for SSDs?]


== Tweak the AMP value of SSD ==
== Tweak the AMP value of SSD ==
Line 183: Line 179:
* [https://wiki.archlinux.org/title/Ext4#Improving_performance Arch Linux Wiki: Ext4] (Need to read carefully!)
* [https://wiki.archlinux.org/title/Ext4#Improving_performance Arch Linux Wiki: Ext4] (Need to read carefully!)
* Website for Students: [https://websiteforstudents.com/improve-nginx-cache-performance-with-tmpfs-on-ubuntu/ Improve Nginx Cache Performance with <code>tmpfs</code> on Ubuntu]
* Website for Students: [https://websiteforstudents.com/improve-nginx-cache-performance-with-tmpfs-on-ubuntu/ Improve Nginx Cache Performance with <code>tmpfs</code> on Ubuntu]
* Ask Ubuntu: [https://askubuntu.com/questions/1400/how-do-i-optimize-the-os-for-ssds How do I optimize the OS for SSDs?]
* How-To Geek: [https://www.howtogeek.com/62761/how-to-tweak-your-ssd-in-ubuntu-for-better-performance/ How to Tweak Your SSD in Ubuntu for Better Performance]
* How-To Geek: [https://www.howtogeek.com/howto/38125/htg-explains-what-is-the-linux-fstab-and-how-does-it-work/ What Is the Linux fstab File, and How Does It Work?]


<noinclude>
<noinclude>

Revision as of 11:59, 18 August 2022

Note, with­in the ex­am­ples in the fol­low­ing sec­tions, /​​​dev/​​​sda refers to a SSD de­vice while /​​​dev/​​​nvme0n1 refers to a NVMe de­vice.

Dis­card­ing Un­used Blocks

You can per­form or sched­ule dis­card op­er­a­tions on block de­vices that sup­port them. Block dis­card op­er­a­tions dis­card blocks that are no longer in use by a mount­ed file sys­tem. They are use­ful on:

  • Sol­id-state dri­ves (SS­Ds)
  • Thin­ly-pro­vi­sioned stor­age

You can run dis­card op­er­a­tions us­ing dif­fer­ent meth­ods:

  • Batch dis­card: Are run ex­plic­it­ly by the user. They dis­card all un­used blocks in the se­lect­ed file sys­tems.
  • On­line dis­card: Are spec­i­fied at mount time. They run in re­al time with­out user in­ter­ven­tion. On­line dis­card op­er­a­tions dis­card on­ly the blocks that are tran­si­tion­ing from used to free.
  • Pe­ri­od­ic dis­card: Are batch op­er­a­tions that are run reg­u­lar­ly by a sys­temd ser­vice.

All types are sup­port­ed by the XFS and ext4 file sys­tems and by VDO.

Rec­om­men­da­tions. Red Hat rec­om­mends that you use batch or pe­ri­od­ic dis­card. Use on­line dis­card on­ly if:

  • the system’s work­load is such that batch dis­card is not fea­si­ble, or
  • on­line dis­card op­er­a­tions are nec­es­sary to main­tain per­for­mance.

Ref­er­ences

Test Whether a De­vise Sup­ports TRIM

To test whether the SSD de­vice sup­ports TRIM/​​​Discard op­tion you can use ei­ther of the fol­low­ing com­mands.

sudo hdparm -I /dev/sda | grep TRIM
* Data Set Management TRIM supported (limit 8 blocks)
sudo smartctl --all /dev/sda | grep TRIM
TRIM Command:     Available

To test does an NVMe sup­ports TRIM (phys­i­cal dis­card op­tion) the out­put of the fol­low­ing com­mand must be greater than 0. This ap­proach is ap­plic­a­ble al­so for SSD de­vices.

cat /sys/block/nvme0n1/queue/discard_max_bytes
cat /sys/block/sda/queue/discard_max_bytes

In ad­di­tion if the columns DISC-GRAN and DISC-MAX with­in the out­put of ls­blk ‑D has val­ues the rel­e­vant de­vices sup­ports TRIM.

lsblk -dD
NAME    DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda            0        4K       2G         0   # SSD
sdb            0        0B       0B         0   # HDD
sr0            0        0B       0B         0   # DVD ROM
nvme0n1        0      512B       2T         0   # NVMe

Get Full SSD/​​​NVMe/​​​HDD De­vice In­fo

For SSD/HDD de­vices use:

smartctl -x /dev/sda            # -x, --xall; -a, --all
hdparm -I /dev/sda              # doesn't support NVMe

For NVMe de­vices use:

smartctl -x /dev/nvme0n1        # -x, --xall; -a, --all
nvme smart-log -H /dev/nvme0n1  # apt install nvme-cli

Ref­er­ences

[Batch dis­card] TRIM from CLI

fstrim com­mand

sudo fstrim -av             # trim/discardd all mounted devices, verbose output
sudo fstrim -v /            # trim/discardd the root fs, verbose output
sudo fstrim /mount-point    # trim/discardd a device mounted at specific mount point

Prox­moxVE Node

For unpriv­i­leged Lin­ux con­tain­ers use the fol­low­ing com­mand at the Prox­moxVE host side .

pct fstrim 151              # Where 151 is the Id of the container

For priv­i­leged con­tain­ers fstrim could be ex­e­cut­ed al­so from the guest's side. For the vir­tu­al ma­chines – en­able the dis­card and SSD em­u­la­tion op­tions in the stor­age de­vice con­fig­u­ra­tion, use Vir­tIo SC­SI as con­troller and trim at the guest side. Al­so we can use one of the fol­low­ing com­mands at he Prox­moxVE host side.

qm guest cmd 251 fstrim     # Where 251 is the Id of the container
qm agent 251 fstrim         # Where 251 is the Id of the container

[Pe­ri­od­ic Dis­card] Set the TRIM Job to Dai­ly

sudo systemctl enable fstrim.timer
sudo mkdir /etc/systemd/system/fstrim.timer.d
sudo nano /etc/systemd/system/fstrim.timer.d/override.conf
[Timer]
OnCalendar=
OnCalendar=daily

Re­boot the sys­tem or do dae­mon-re­load and check the up­dat­ed val­ue.

sudo systemctl daemon-reload
systemctl cat fstrim.timer
# /lib/systemd/system/fstrim.timer
[Unit]
Description=Discard unused blocks once a week
Documentation=man:fstrim
ConditionVirtualization=!container

[Timer]
OnCalendar=weekly
AccuracySec=1h
Persistent=true

[Install]
WantedBy=timers.target

# /etc/systemd/system/fstrim.timer.d/override.conf
[Timer]
OnCalendar=
OnCalendar=daily
sudo systemctl status fstrim.service
sudo systemctl status fstrim.timer

Un­do the change if you need.

sudo rm -v /etc/systemd/system/fstrim.timer.d/override.conf

Ref­er­ences

[On­line Dis­card] En­able TRIM in /​​​etc/​​​fstab

This ap­proach is not rec­om­mend­ed by the most man­u­als.

sudo nano /etc/fstab
#/dev/disk/by-uuid/09e7c--18b1696fc714 / ext4 defaults 0 0
#/dev/disk/by-uuid/09e7c--18b1696fc714 / ext4 discard,defaults 0 0
#/dev/disk/by-uuid/09e7c--18b1696fc714 / ext4 discard,async,noatime,nodiratime,errors=remount-ro 0 1
/dev/disk/by-uuid/09e7c--18b1696fc714 / ext4 discard,errors=remount-ro 0 1

Warn­ing: Users need to be cer­tain that their block de­vice sup­ports TRIM be­fore at­tempt­ing to use the dis­card mount­ing op­tion. Oth­er­wise da­ta loss can oc­cur!

Tweak the AMP val­ue of SSD

Most Lin­ux dis­tri­b­u­tions use Lin­ux Kernel’s “Ad­vanced Pow­er Man­age­ment (APM)” API to han­dle con­fig­u­ra­tion, op­ti­mize per­for­mance, and en­sure sta­bil­i­ty of stor­age de­vices. These de­vices are as­signed an APM val­ue be­tween 1 and 255 to con­trol their pow­er man­age­ment thresh­olds. A val­ue of 254 in­di­cates best per­for­mance, while a val­ue of 1 in­di­cates bet­ter pow­er man­age­ment. As­sign­ing a val­ue of 255 will dis­able APM al­to­geth­er. By de­fault, SS­Ds are as­signed an APM of 254 when the sys­tem is run­ning on ex­ter­nal pow­er. In bat­tery mode, the APM lev­el is set to 128, re­duc­ing the read and write speeds of SS­Ds. This ar­ti­cle ex­plains how to in­crease SSD APM lev­els to 254 when your Lin­ux lap­top is run­ning on bat­tery mode.

sudo hdparm -B254 /dev/sda

Get the cur­rent AMP val­ue.

sudo hdparm -B /dev/sda

Test the per­for­mance.

sudo hdparm -tT /dev/sda

Ref­er­ences

See al­so