我管理的大多数 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 选项。
我们有 2 台 Red Hat 服务器,专门用于客户速度测试。它们都使用 10Gb 光纤连接并位于 10Gb 链路上。这些服务器之间的所有网络设备都完全支持 10Gb/s。使用 Iperf 或 Iperf3,我能得到的最好的速度大约是 6.67Gb/s。话虽如此,一台服务器正在生产中(客户正在使用它),另一台服务器在线但未使用。(我们用它来测试 atm) 6.67Gb/s 也是一种方式,我应该提一下。我们将这些称为服务器 A 和服务器 B。
当服务器 A 作为 iperf 服务器时,我们获得了 6.67Gb/s 的速度。当服务器 A 作为服务器 B 的客户端时,它只能推送大约 20Mb/s。
我做了什么:
到目前为止,我所做的唯一一件事就是将两台服务器上的 TX/RX 缓冲区增加到最大值。一个设置为 512,另一个设置为 453。(仅 RX,TX 已经最大化)所以这里是更新后的样子:
Server A:
Ring parameters for em1:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Server B:
Ring parameters for p1p1:
Pre-set maximums: …
Run Code Online (Sandbox Code Playgroud) 当您拥有 LVM 时,您将拥有一个用于/sys/block
物理卷、每个单独逻辑卷和原始设备的调度程序条目。
我们有一个运行 Xen 管理程序 4.0(3Ware 9650 SE 硬件 RAID1)的 Debian 6 LTS x64、内核 2.6.32 系统。在每个逻辑卷上运行虚拟机时,如果您想影响操作系统如何调度它们,您需要在哪个逻辑卷上设置调度程序?如果将逻辑卷设置为deadline
,那么当物理卷设置为 时,它还会做任何事情cfq
吗?如果您确实将它设置为逻辑卷上的截止日期,即使由于其他 LV 上的 IO 设置为 IO 而导致磁盘速度变慢,这些截止日期也会得到遵守cfq
吗?
问题与虚拟机上的 IO 导致其他虚拟机速度减慢有关。所有来宾都在内部使用 noop 作为调度程序。
编辑:根据this,在多路径环境中,只有DM的调度程序才会生效。因此,如果我想以某种deadline
方式处理虚拟机之间的 IO ,我必须将物理卷的 DM 路径(在我的情况下为 dm-1)设置为deadline
. 那正确吗?还有sdc的调度器,是我dm-1的原始块设备。为什么不应该这样做呢?
edit2:但是有人在评论中说 dm-0/1 在较新的内核中没有调度程序:
famzah@VBox:~$ cat /sys/block/dm-0/queue/scheduler
none
Run Code Online (Sandbox Code Playgroud)
在我的系统(Debian 6,内核 2.6.32)上,我有:
cat /sys/block/dm-1/queue/scheduler
noop anticipatory [deadline] cfq
Run Code Online (Sandbox Code Playgroud)
还有一个问题,我有多路径设置吗?pvs
显示:
# pvs
PV VG Fmt Attr PSize PFree
/dev/dm-0 universe lvm2 …
Run Code Online (Sandbox Code Playgroud) 我有两台服务器:一台 VPS 和一台笔记本电脑。我最近重新构建了它们,MySQL 在笔记本电脑上的运行速度慢了大约 20 倍。
两台服务器过去都运行 CentOS 5.8,我认为 MySQL 5.1,而笔记本电脑过去做得很好,所以我认为不是硬件。
对于 VPS,我的提供商安装了 CentOS 6.4,然后我使用带有 CentOS 存储库的 yum 安装了 MySQL 5.1.69。
对于笔记本电脑,我安装了 CentOS 6.4 基本服务器,然后使用带有 CentOS 存储库的 yum 安装了 MySQL 5.1.69。
两台服务器的 my.cnf 是相同的,我在下面显示了。对于这两个服务器,我还在下面的输出SHOW VARIABLES;
以及 sysbench 的输出、文件系统信息和 cpu 信息中包含了这些信息。我试过添加skip-name-resolve
,但没有帮助。
下面的矩阵显示了SHOW VARIABLES
来自不同服务器的输出。同样,MySQL 的安装方式相同,所以我不知道它为什么不同,但确实如此,而且我认为这可能是笔记本电脑执行 MySQL 如此缓慢的原因。
为什么笔记本电脑运行 MySQL 很慢,我该如何解决?
SHOW VARIABLES
两台服务器的区别
+---------------------------+-----------------------+-------------------------+
| Variable | Value-VPS | Value-Laptop |
+---------------------------+-----------------------+-------------------------+
| hostname | vps.site1.com | laptop.site2.com |
| max_binlog_cache_size | 4294963200 | 18446744073709500000 |
| …
Run Code Online (Sandbox Code Playgroud)