6.2. 分析
成功调整存储栈性能需要了解数据在系统中的流程,并精通基础存储知识以及它在各种负载下的工作原理。它还要求理解要调整的实际负载。
无论合适您部署新系统时,最好彻底分析该存储。从原始 LUN 或者磁盘开始,并使用直接 I/O(绕过内核也缓存的 I/O)评估其性能。这是您可以执行的最基本测试,同时也将成为您检测栈中 I/O 性能的标准。请使用基本负载生成器(比如 aio-stress)可生成各种 I/O 大小和队列深度的连续和随机读取及写入。
接下来是来自 aio-stress 运行的系列图表,每个运行有四个阶段:顺序写入、顺序读取、随机写入和随机读取。在这个示例中,将该工具配置为以不同记录大小(x 轴)和队列深度(每图一个)运行。队列深度代表在给定时间进程的 I/O 操作总和。
图 6.1. 一线程、一文件的 aio-stress 输出结果
注意从左下角到右上角的流量线趋势。还请注意在给定记录大小时,您可以通过增加进程中的 I/O 数从存储中获得更多流量。
通过根据您的存储运行这些简单负载,您可以了解在此负载下的存储性能。保留这些测试生成的数据用来在分析更复杂的负载时进行比较。
如果您要使用设备映射或者 md,在下一步添加那一层并重复您的测试。如果性能损失严重,请确定那是预期的或者可以解释的。例如:如果在该栈中添加 checksumming raid 层则一定会有性能下降。意外的性能损失可能由无法同步的 I/O 操作造成。默认情况下红帽企业版 Linux 以最佳方式对齐分区和设备映射器元数据。但不是所有类型的存储都报告其最佳校准,因此可能需要手动调整。
软件设备映射或者 md 层后,在块设备顶端添加一个文件系统并根据其进行测试,仍使用直接 I/O。同样,将结果与之前测试的结果进行比较,保证您理解所有不符之处。直接写入 I/O 通常在预分配文件中性能更好,因此请确定在测试性能前预先分配文件。
您可能会认为有用的人工负载生成器包括:
- aio-stress
- iozone
- fio