1. 分区格式

思维导图

ext4与xfs是现在主流格式,在大部分性能测试结果上看它们两个性能最优。

查看分区格式

$ df -T


2. 测试工具

2.1 查看接口信息

已知我有块SSD硬盘通过转换卡接在主板PCIE接口上,但我对这个PCIE速度不清楚。

$ ll /dev/nvme*
nvme0 nvme0n1

$ dmesg | grep nvme0
[    9.728576] nvme nvme0: pci function 0000:01:00.0 # <--- 01:00.0
[    9.728700] nvme 0000:01:00.0: irq 62 for MSI/MSI-X
[    9.832360] nvme nvme0: Shutdown timeout set to 8 seconds
[    9.871299] nvme nvme0: allocated 64 MiB host memory buffer.
[    9.913441] nvme 0000:01:00.0: irq 62 for MSI/MSI-X
[    9.913474] nvme 0000:01:00.0: irq 63 for MSI/MSI-X
[    9.913509] nvme 0000:01:00.0: irq 64 for MSI/MSI-X
[    9.913520] nvme 0000:01:00.0: irq 65 for MSI/MSI-X
[    9.913546] nvme 0000:01:00.0: irq 66 for MSI/MSI-X
[    9.913576] nvme 0000:01:00.0: irq 67 for MSI/MSI-X
[    9.913603] nvme 0000:01:00.0: irq 68 for MSI/MSI-X
[    9.913608] nvme 0000:01:00.0: irq 69 for MSI/MSI-X
[    9.913641] nvme 0000:01:00.0: irq 70 for MSI/MSI-X
[  434.115127]  nvme0n1: p1
[  489.295242] EXT4-fs (nvme0n1p1): mounted filesystem with ordered data mode. Opts: (null)

$ lspci | grep -i 01:00.0
01:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a809

$ lspci -n | grep 01:00.0
01:00.0 0108: 144d:a809

$ sudo lspci -n -d 144d:a809 -vvv |grep -i width
                LnkCap: Port #0, Speed 8GT/s, Width x4, ASPM L1, Exit Latency L0s unlimited, L1 <64us
                LnkSta: Speed 5GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-

结论主板PCIE接口支持8GT/s的速度,但这块SSD转换卡只支持到5GT/s。

pcie


2.2 测试

2.2.1 iostat : sudo yum install sysstat

$ sudo iostat -md 2 10000 /dev/nvme0n1
# 写
$ time dd if=/dev/zero of=./nvme/test.file bs=64k count=300000
# 读
$ time dd if=./nvme/test.file of=/dev/null bs=64k count=300000

btrfs分区格式实测读写速度 1.5GB/s,比ext4读速度 1.2GB/s快一些,写速度差不多。


2.2.1 hdparm

需要源码安装最新版本

$ wget https://jaist.dl.sourceforge.net/project/hdparm/hdparm/hdparm-9.60.tar.gz
$ tar -xvf hdparm-9.60.tar.gz
$ make
$ sudo ./hdparm -I /dev/sda
$ sudo ./hdparam -tT /dev/sda

3. 在SSD上使用btrfs文件系统的相关优化

$ sudo vi /etc/fstab
# <file system> <mount point>   <type>  <options>  <dump>  <pass>
UUID=<略>  /  btrfs defaults,ssd,discard,noatime,compress=lzo,subvol=@ 0   1
参数 说明 必须
ssd 开启针对SSD进行优化。 Y
discard 启用TRIM/discard,需要SSD支持TRIM功能(sudo hdparm -I /dev/sdX | grep TRIM),如果SSD不支持开启此功能可能造成丢数据。 N
noatime 禁止更新访问记录来减少不必要的写操作以提高性能。 y
compress lzo 速度更快,zlib 压缩率更高。注意确认SSD主控是否是非压缩主控,若为压缩主控不建议加入该参数。 N

SSD 结构不同于传统硬盘,寻址时间短,I/O 调度算法可选择 noop 以降低延迟。以下命令可查看与修改调度器:

$ sudo vi /etc/udev/rules.d/60-ssd-scheduler.rules
# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"