解释:
我们有一个服务器:
- 型号:HP ProLiant DL160 G6
- 4 个 240GB SSD(RAID-10)
- 72GB DDR3 内存
- 2 个 L5639
- HP P410 RAID 控制器(256MB,V6.40,Rom 版本:8.40.41.00)
SSD 驱动器为 4 个全新 2.5 英寸 Intel 530,读取速度为 540MB/s,写入速度为 490MB/s
- CentOS 6
- 文件系统为 ext4
但这是在 raid 10 上读取速度的测试结果:
hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 824 MB in 3.00 seconds = 274.50 MB/sec
[root@localhost ~]# hdparm -t /dev/mapper/vg_localhost-lv_root
/dev/mapper/vg_localhost-lv_root:
Timing buffered disk reads: 800 MB in 3.01 seconds = 266.19 MB/sec
这是写入速度:
dd bs=1M count=512 if=/dev/zero of=test conv=fdatasync
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 4.91077 s, 109 MB/s
我们希望通过 raid 10 实现 1GB 的读取速度,但 270MB 甚至还不是单个磁盘的速度!
问题:
- 为什么这么慢?
- 是因为 RAID 控制器吗?
更新 1-相同的读/写速度:
按照答案中所述更改一些设置后,我得到以下结果:
(有人知道为什么读取速度显示 4GB 而不是 400MB 吗?!)
编辑:看起来命令是错误的,我们应该对这种大小的 RAM 使用 -s144g,这就是为什么它显示 4GB(正如 ewwhite 在评论中所建议的那样)
[root@192 ~]# iozone -t1 -i0 -i1 -i2 -r1m -s56g
Iozone: Performance Test of File I/O
Version $Revision: 3.408 $
Compiled for 64 bit mode.
Build: linux
Record Size 1024 KB
File size set to 58720256 KB
Command line used: iozone -t1 -i0 -i1 -i2 -r1m -s56g
Output is in Kbytes/sec
Each process writes a 58720256 Kbyte file in 1024 Kbyte records
Children see throughput for 1 initial writers = 135331.80 KB/sec
Children see throughput for 1 rewriters = 124085.66 KB/sec
Children see throughput for 1 readers = 4732046.50 KB/sec
Children see throughput for 1 re-readers = 4741508.00 KB/sec
Children see throughput for 1 random readers = 4590884.50 KB/sec
Children see throughput for 1 random writers = 124082.41 KB/sec
但旧hdparm -t /dev/sda
命令仍然显示:
缓冲磁盘读取时间:3.00 秒内读取 810 MB = 269.85 MB/秒
更新 2(tuned-utils pack)-读取速度现在为 600MB/s:
最后还是有希望的,我们之前已经禁用了 raid 控制器的缓存,并且做了一些其他的事情,但是都没有成功,但是因为我们重新加载了服务器并再次安装了操作系统,所以我们忘记按照 ewwhite 的回答中的建议安装“tuned-utils”(感谢 ewwhite 推荐的这个很棒的软件包)
安装tuned-utils
并选择enterprise-storage
配置文件后,读取速度现在约为 600MB/s+,但写入速度仍然非常慢(约为 160MB)(:
以下是命令的结果iozone -t1 -i0 -i1 -i2 -r1m -s144g
:
Children see throughput for 1 initial writers = 165331.80 KB/sec
Children see throughput for 1 rewriters = 115734.91 KB/sec
Children see throughput for 1 readers = 719323.81 KB/sec
Children see throughput for 1 re-readers = 732008.56 KB/sec
Children see throughput for 1 random readers = 549284.69 KB/sec
Children see throughput for 1 random writers = 116389.76 KB/sec
即使有hdparm -t /dev/sda
命令我们也有:
缓冲磁盘读取时间:3.00 秒内读取 1802 MB = 600.37 MB/秒
对于写入速度非常慢的问题,有什么建议吗?
更新 3 - 评论中要求的一些信息:
写入速度仍然很低 (~150MB/s,甚至不到单个磁盘的 1/3)
df -h
和的输出fdisk -l
:
[root@192 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 441G 3.2G 415G 1% /
tmpfs 36G 0 36G 0% /dev/shm
[root@192 ~]# fdisk -l
Disk /dev/sda: 480.0 GB, 480047620096 bytes
255 heads, 63 sectors/track, 58362 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00040c3c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 58363 468795392 83 Linux
答案1
虽然这里的其他答案提出了一些观点,但您的具体问题是由于平台限制和操作系统配置造成的:
您的吞吐量受到以下因素的限制:消费者 HP Smart Array P410 RAID 控制器上的 SATA SSDSATA 磁盘在这些控制器上的运行速度为 3.0Gbps(3G),而不是 6.0Gbps(6G)。因此,这是影响英特尔 SSD 读取速度的障碍;每个驱动器 300MB/s 或更低。
Smart Array P410 控制器具有具体要求和最佳实践与 SSD 一起使用时。简而言之,控制器能够达到 50,000 IOPS,禁用 SSD 卷的阵列加速器,性能最高可达约 6 个驱动器。
磁盘性能并不总是与连续读/写速度有关。尝试使用适当的工具进行基准测试,例如碘或者邦尼++。您仍然可以获得多个驱动器的随机 I/O 优势。
在操作系统级别,安装tuned-utils软件包并将配置文件设置为,
enterprise-performance
以从文件系统中删除写入屏障,并为您的设置设置正确的 I/O 提升器。这在其他问题请点击此处, 也。看起来您正在使用 LVM。这也会产生影响...
以下是运行以下操作系统的 G7 ProLiant 的 iozone 报告:四 消费级 6G SATA SSD(降档至 3G 速度)在同一个 HP Smart Array P410 RAID 控制器上。
您应该看到写入速度约为 470MB/s,读取速度约为 650MB/s+。
[root@mdmarra /data/tmp]# iozone -t1 -i0 -i1 -i2 -r1m -s56g
Iozone: Performance Test of File I/O
Version $Revision: 3.394 $
Compiled for 64 bit mode.
Build: linux
Record Size 1024 KB
File size set to 58720256 KB
Command line used: iozone -t1 -i0 -i1 -i2 -r1m -s56g
Output is in Kbytes/sec
Each process writes a 58720256 Kbyte file in 1024 Kbyte records
Children see throughput for 1 initial writers = 478209.81 KB/sec
Children see throughput for 1 rewriters = 478200.84 KB/sec
Children see throughput for 1 readers = 677397.69 KB/sec
Children see throughput for 1 re-readers = 679523.88 KB/sec
Children see throughput for 1 random readers = 437344.78 KB/sec
Children see throughput for 1 random writers = 486254.41 KB/sec
答案2
噢亲爱的,从哪儿开始呢?
涉及的内容太多了,你需要对一切都有很好的理解。仅仅将一堆磁盘扔到 RAID 控制器上不会产生你想要的结果。
这个问题很难回答。但至少,这里有一份你必须查看的内容列表:
- 控制器是否具有所需的吞吐量?(-> 数据表)
- 控制器是否有足够的带宽给主机(即使在 v1.0 中,它也有足够的带宽,因为它是 x8)
- 系统芯片组是否具有足够的吞吐量(CPU-控制器)?(未知)
- 您指示控制员采用什么写入策略?(这很可能就是你被咬过的东西)
- 所有内容 (分区开始、LV、PV) 是否都已对齐?
- 块大小是否协调?(RAID 条带大小、块大小、FS 块……)
- 文件系统是否针对 RAID 设置进行了优化?(级别和块大小)
由于您对整个 RAID(不考虑 FS)的吞吐量明显低于单个磁盘,因此您可能错误地设置了写入策略;控制器可能正在等待所有磁盘确认写入(除非您已为控制器电池上的 RAM 供电,否则这可能符合您的最佳利益)。