存储 – Linux – 实际硬件RAID控制器调优(scsi和cciss)

我管理的大多数 Linux系统都具有硬件RAID控制器(大多数为 HP Smart Array).他们都在运行RHEL或CentOS.

我正在寻找真实的可调参数来帮助优化设置的性能,这些设置将硬件RAID控制器与SAS磁盘(Smart Array,Perc,LSI等)和电池支持或闪存支持的缓存相结合.假设RAID 1 0和多个主轴(4个磁盘).

我花了相当多的时间调整Linux网络设置,以实现低延迟和金融交易应用程序.但其中许多选项都有详细记录(更改发送/接收缓冲区,修改TCP窗口设置等).工程师在存储方面做了什么?

从历史上看,我已经对I/O scheduling elevator进行了更改,最近选择了截止日期和noop调度程序来提高我的应用程序的性能.随着RHEL版本的发展,我也注意到SCSI和CCISS块设备的编译认值也发生了变化.这会随着时间的推移对建议的存储子系统设置产生影响.但是,自从我看到任何明确的建议以来,已经有一段时间了.我知道操作系统认值不是最佳的.例如,对于服务器级硬件上的部署,似乎128kb的认预读缓冲区非常小.

以下文章探讨了在块队列上更改预读缓存和nr_requests值对性能的影响.

http://zackreed.me/articles/54-hp-smart-array-p410-controller-tuning

http://www.overclock.net/t/515068/tuning-a-hp-smart-array-p400-with-linux-why-tuning-really-matters

http://yoshinorimatsunobu.blogspot.com/2009/04/linux-io-scheduler-queue-size-and.html

例如,这些是HP Smart Array RAID控制器的建议更改:

echo "noop" > /sys/block/cciss\!c0d0/queue/scheduler 
blockdev --setra 65536 /dev/cciss/c0d0
echo 512 > /sys/block/cciss\!c0d0/queue/nr_requests
echo 2048 > /sys/block/cciss\!c0d0/queue/read_ahead_kb

还有哪些可以可靠地调整以提高存储性能
我特意在生产场景中寻找sysctl和sysfs选项.

解决方法

我发现当我不得不调整较低的延迟与吞吐量时,我已经将nr_request调低了认值(低至32).小批量的想法等于较低的延迟.

同样对于read_ahead_kb,我发现对于顺序读/写,增加此值可提供更好的吞吐量,但我发现此选项实际上取决于您的工作负载和IO模式.例如,在我最近调整的数据库系统上,我更改了此值以匹配单个数据库页面大小,这有助于减少读取延迟.超出此值的增加或减少证明在我的情况下会损害性能.

至于块设备队列的其他选项或设置:

max_sectors_kb =我设置此值以匹配硬件允许单次传输的值(检查sysfs中max_hw_sectors_kb(RO)文件的值以查看允许的内容)

nomerges =这使您可以禁用或调整查找逻辑以合并io请求. (将其关闭可以节省一些cpu周期,但是在为我的系统更改此设置时我没有看到任何好处,所以我将其保留为认值)

rq_affinity =我还没有尝试过,但这里是内核文档背后的解释

If this option is ‘1’,the block layer will migrate request completions to the
cpu “group” that originally submitted the request. For some workloads this
provides a significant reduction in cpu cycles due to caching effects.
For storage configurations that need to maximize distribution of completion
processing setting this option to ‘2’ forces the completion to run on the
requesting cpu (bypassing the “group” aggregation logic)”

scheduler =你说你试过截止日期和noop.我已经测试了noop和截止日期,但是我发现我最近为数据库服务器做的测试已经找到了截止日期.

NOOP表现不错,但对于我们的数据库服务器,我仍然能够在调整截止日期调度程序时获得更好的性能.

截止日期调度程序的选项位于/ sys / block / {sd,cciss,dm – } * / queue / iosched /:

fifo_batch =类似于nr_requests,但特定于调度程序.经验法则是将其调低以降低延迟或提高吞吐量.控制读取和写入请求的批处理大小.

write_expire =设置写批次的到期时间认为5000ms.再次减小此值会减少写入延迟,同时增加该值会增加吞吐量.

read_expire =设置读取批次的到期时间认为500ms.这里适用相同的规则.

front_merges =我倾向于关闭它,认情况下它是打开的.我没有看到调度程序需要浪费cpu周期来尝试合并IO请求.

writes_starved =因为截止日期是针对读取的,所以认处理是在处理写入批处理之前处理2个读取批处理.我发现认值为2对我的工作量有好处.

相关文章

在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...