磁盘分区格式与测试
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。
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"