翻译自:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/storage_administration_guide/ch-ssd#ssddeploy
Chapter 21. Solid-State Disk Deployment Guidelines
固态硬盘部署指南SSD随着使用块的数量接近磁盘容量会有性能下降的问题。不同的品牌的SSD的性能的影响程度差异很大。但是,所有设备都会遇到一些性能退化。
为了解决性能下降问题,主机系统(例如,Linux内核)可以使用discard请求来通知存储,告知其给定范围的块不再被使用。 SSD可以使用这些信息来释放内部空间,使用空闲的块进行磨损平衡(译者注:不同于机械盘,SSD的半导体块是有使用寿命的,像TLC貌似只有1000次左右(个人消费级),也就是说超过了次数,存储2进制的块就很可能坏掉,所以必须由存储控制器进行写入平衡,也就是说将写请求分配到使用次数较少的块,否则一直怼着某个块重复擦写,这个块可能过不几天就坏了)。只有当存储控制器通知其支持存储协议(无论是ATA还是SCSI)时discard才能被使用。使用协商的特定于存储协议的discard命令(AIM的TRIM命令,UNMAP集的WRITE SAME或SCSI的UNMAP命令)向存储器发出放弃请求。
当文件系统的可用空间比较少时,启用discard是最有用的,此时文件系统已写入底层存储设备上的大多数块了。有关TRIM的更多信息,请参阅以下链接中的其数据集管理T13规范:
有关UNMAP的最新章节,请参考下面的连接的section 4.7.3.4 of the SCSI Block Commands 3 T10 Specification
http://www.t10.org/cgi-bin/ac.pl?t=f&f=sbc3r26.pdf
注意:
市场上并非所有的SSD都支持discard,验证是否支持discard,可以检查:cat /sys/block/sda/queue/discard_granularity
译者注:
原文没详细写,但是在:
https://www.centos.org/forums/viewtopic.php?t=47099
中有:
What is the output of :
cat /sys/block/sda/queue/discard_max_bytes
or
cat /sys/block/sda/queue/discard_granularity
(provided your device is sda)
If it is non-zero, discard operations are supported.
--假如非0,表示支持discard
21.1. Deployment Considerations
部署注意事项
由于SSD的内部布局和操作,最好在内部擦除块的边界上对器件进行分区(译者认为就是4K对齐)。如果SSD导出拓扑信息,则红帽企业版Linux 6中的分区工具将选择理想默认值。
但是,如果设备不导出拓扑信息,红帽建议在1MB边界处创建第一个分区。
从Red Hat Enterprise Linux 6.5开始,MD现在支持传递discard请求(MD是个撒子意思。。)。在6.5之前,它不被支持。相反, logical volume manager (LVM) 和 device-mapper (DM) targets 这种LVM用法都支持 discards。只有这些DM Target:dm-snapshot,dm-crypt和dm-raid45不支持discard。在Red Hat Enterprise Linux 6.1中添加了对dm-mirror的discard支持。
RED HAT建议在SSD上使用RAID1或RAID10作为LVM RAID,因为这些级别支持丢弃。在其他RAID级别的初始化阶段,一些RAID管理程序(如mdadm)会写入存储设备上的所有块,以确保校验和正常运行。这会导致SSD的性能迅速下降。
NOTE:
在RAID1,RAID10和奇偶校验RAID上可以使用--nosync,因为在第一次写入的那一刻进行奇偶校验将被计算出来,因此保持一致。 但是,执行清理操作时,尚未写入的部分将被计为mismatched/inconsistent
。
从Red Hat Enterprise Linux 6.4开始,ext4和XFS是唯一的fully-supported discard的文件系统。 Red Hat Enterprise Linux 6以前的版本只支持ext4 的fully-supported discard。 要在设备上启用丢弃命令,请使用mount选项丢弃。 例如,要将/dev/sda2挂载到启用了discard的/mnt,请运行:
# mount -t ext4 -o discard /dev/sda2 /mnt
默认情况下,ext4不会发出discard命令。 这主要是为了避免可能无法正确实施discard命令的存储设备出现问题。 Linux交换代码会向discard-enabled devices发出丢弃命令,并且没有选项来控制这种行为。
21.2. Tuning Considerations
调整注意事项
本节介绍可能影响SSD性能的几个配置。
I/O Scheduler
任何I/O scheduler都应该在大多数SSD中表现良好。 但是,与任何其他存储类型一样,红帽建议使用基准测试来确定给定工作负载的最佳配置。在使用SSD时,Red Hat建议仅将I/O scheduler更改为基准测试特定工作负载。 有关不同类型I/O scheduler的更多信息,请参阅I/O Tuning Guide(也由Red Hat提供)。 以下内核文档还包含有关如何在I/O scheduler之间切换的说明:
/usr/share/doc/kernel-version/Documentation/block/switching-sched.txt
Virtual Memory
像I/O scheduler一样,virtual memory(VM)子系统不需要特殊调整。 考虑到SSD上I/O的快速特性,应该可以关闭vm_dirty_background_ratio和vm_dirty_ratio设置,因为增加的写入活动不应当对磁盘上其他操作的延迟产生负面影响。 但是,这可以产生更多的整体I/O,因此通常不建议跳过特定于工作负载的测试。Swap
SSD也可以用作swap,并且可能会产生良好的page-out/page-in性能。