我管理的大多数 Linux 系统都具有硬件 RAID 控制器(主要是HP Smart Array)。他们都在运行 RHEL 或 CentOS。
我正在寻找真实世界的可调参数,以帮助优化将硬件 RAID 控制器与 SAS 磁盘(智能阵列、Perc、LSI 等)和电池后备或闪存后备缓存相结合的设置的性能。假设 RAID 1+0 和多个主轴(4 个以上的磁盘)。
我花了大量时间为低延迟和金融交易应用程序调整 Linux 网络设置。但其中许多选项都有详细记录(更改发送/接收缓冲区、修改 TCP 窗口设置等)。工程师在存储方面做什么?
从历史上看,我对I/O 调度电梯进行了更改,最近选择了deadline和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
Run Code Online (Sandbox Code Playgroud)
还有什么可以可靠地调整来提高存储性能?
我专门在生产场景中寻找 sysctl 和 sysfs 选项。
我见过这个问题: 如何识别大量写入磁盘?
而且我之前使用过dstat和atop ……但它们似乎没有指出是什么进程导致了磁盘 I/O。例如,来自 dstat:
dstat -ta --top-bio
----system---- ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- ----most-expensive----
time |usr sys idl wai hiq siq| read writ| recv send| in out | int csw | block i/o process
14-12 16:16:25| 22 3 49 26 0 0|2324k 0 | 17k 6144B| 0 0 |1324 0 |
14-12 16:16:26| 24 3 30 43 0 0|4960k 8192B|1498B 4322B| 0 0 |1494 0 |wget 0 4096B
14-12 16:16:27| 25 4 38 33 0 …Run Code Online (Sandbox Code Playgroud) 希望有人能指出我遇到的一些 iSCSI 性能问题的正确方向。我在较旧的 ProLiant DL360 G5 上运行 Openfiler 2.99。双 Xeon 处理器、6GB ECC RAM、英特尔千兆服务器网卡、SAS 控制器和 RAID 5 中的 3 个 10K SAS 驱动器。当我直接从盒子运行一个简单的写测试时,性能非常好:
[root@localhost ~]# dd if=/dev/zero of=tmpfile bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 4.64468 s, 226 MB/s
Run Code Online (Sandbox Code Playgroud)
因此,我创建了一个 LUN,将其连接到另一个运行 ESXi 5.1(Core i7 2600k、16GB RAM、英特尔千兆服务器网卡)的机器上,并创建了一个新的数据存储。一旦我创建了数据存储,我就能够创建并启动一个运行 CentOS 的虚拟机,它有 2GB 的 RAM 和 16GB 的磁盘空间。操作系统安装得很好,我可以使用它,但是当我在 VM 中运行相同的测试时,我得到了截然不同的结果:
[root@localhost ~]# dd if=/dev/zero of=tmpfile bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 26.8786 …Run Code Online (Sandbox Code Playgroud) hp ×1
hp-proliant ×1
io ×1
iscsi ×1
linux ×1
openfiler ×1
performance ×1
storage ×1
vmware-esxi ×1