--- creation date: 2022-01-08 tags: [note,linux,disk,archlinux] --- # Disk Speed ## Setting ext4 commit frequency to 60 Arch Wiki reference: https://wiki.archlinux.org/index.php/Ext4#Improving_performance Another way to improve performance on not-so-fast SSDs is increasing the ext4 commit frequency from every 5 seconds up to 60. Just add `commit=60` to the mount options for the boot partition in `/etc/fstab`: ```shell /dev/sda5 / ext4 rw,relatime,commit=60 0 1 ``` ## OR enable fast commit ```shell tune2fs -l /dev/nvme0n1p4 | grep features tune2fs -O fast_commit /dev/nvme0n1p4 ``` ## Maintenance for SSD - `systemctl enable --now fstrim.timer` to trim SSD weekly ## Using the BFQ scheduler Arch Wiki reference: https://wiki.archlinux.org/index.php/Improving_performance#Changing_I/O_scheduler Linux notoriously gets very slow with I/O intensive operations such as moving a lot of files at once and swapping. If you have a spinning hard drive or a not-so-fast SSD, the BFQ scheduler can help improve system responsiveness during I/O intensive operations. I still use a SATA SSD for lack of a faster connector on my laptop and I have perceived significantly better overall performance by using the BFQ I/O scheduler. If your boot disk is a fast NVme SSD it's generally not the best idea to use the `bfq` scheduler for it, but since the I/O scheduler is set per-disk, it might be a good idea to use it for any spinning hard disk permanently connected to the computer (e.g. a secondary disk to store games and movies). To set the BFQ scheduler, you need to specify some `udev` rules to tell Linux what scheduler to use on what kind of disks. For example, you could use the `mq-deadline` scheduler on your NVme drives and the `bfq` scheduler on your SSDs. I decided to set my rules in such a way that no scheduler is used for NVme SSDs, but `bfq` is used for everything else. To do this, create the file `/etc/udev/rules.d/60-ioschedulers.rules` and fill it in as below: ```shell # set scheduler for NVMe ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="none" # set scheduler for SSD and eMMC ACTION=="add|change", KERNEL=="sd[a-z]|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="bfq" # set scheduler for rotating disks ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq" ```