![SSD raid 上的 iops 真的很低(低于 1000)](https://linux22.com/image/653409/SSD%20raid%20%E4%B8%8A%E7%9A%84%20iops%20%E7%9C%9F%E7%9A%84%E5%BE%88%E4%BD%8E%EF%BC%88%E4%BD%8E%E4%BA%8E%201000%EF%BC%89.png)
我的服务器出现了严重的性能问题,IOPS 真的很低。
服务器 :
- ProLiant DL360p Gen8
- 配有 HP Smart Array P420i 控制器(固件 v6)
- 使用 4x Samsung 840 - 512GB RAID 1+0
以下是三星 840 的详细信息:
hpacucli ctrl slot=0 pd 2I:1:6 show detail
physicaldrive 2I:1:6
Port: 2I
Box: 1
Bay: 6
Status: OK
Drive Type: Data Drive
Interface Type: Solid State SATA
Size: 512.1 GB
Firmware Revision: DXM04B0Q
Serial Number: S12SNEAD102607E
Model: ATA Samsung SSD 840
SATA NCQ Capable: True
SATA NCQ Enabled: True
Current Temperature (C): 16
Maximum Temperature (C): 70
Usage remaining: 100.00%
Power On Hours: 0
SSD Smart Trip Wearout: False
PHY Count: 1
PHY Transfer Rate: 6.0Gbps
Drive Authentication Status: OK
Carrier Application Version: 11
Carrier Bootloader Version: 6
以下是基准测试结果
sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
test: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.1.3
Starting 1 process
test: Laying out IO file(s) (1 file(s) / 4096MB)
Jobs: 1 (f=1): [m] [99.8% done] [7152KB/2400KB/0KB /s] [1788/600/0 iops] [eta 00m:02s]
test: (groupid=0, jobs=1): err= 0: pid=36718: Thu Mar 5 18:15:12 2015
read : io=3071.7MB, bw=2536.5KB/s, iops=634, runt=1240097msec
write: io=1024.4MB, bw=866133B/s, iops=211, runt=1240097msec
cpu : usr=0.28%, sys=1.18%, ctx=401767, majf=0, minf=2347
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued : total=r=786347/w=262229/d=0, short=r=0/w=0/d=0
Run status group 0 (all jobs):
READ: io=3071.7MB, aggrb=2536KB/s, minb=2536KB/s, maxb=2536KB/s, mint=1240097msec, maxt=1240097msec
WRITE: io=1024.4MB, aggrb=845KB/s, minb=845KB/s, maxb=845KB/s, mint=1240097msec, maxt=1240097msec
Disk stats (read/write):
dm-1: ios=785968/267543, merge=0/0, ticks=50476776/28341176, in_queue=79704028, util=100.00%, aggrios=788659/265218, aggrmerge=1953/2589, aggrticks=50709304/27483028, aggrin_queue=78191444, aggrutil=100.00%
sda: ios=788659/265218, merge=1953/2589, ticks=50709304/27483028, in_queue=78191444, util=100.00%
在普通硬盘上运行相同的工作台时,IOPS 比 SSD 要高
任何想法 ?
答案1
由于 MLC SSD 的工作方式,它们需要一个大小合适的本地 DRAM 缓存来吸收传入的写入,同时写入支持 NAND。
然而,硬件 RAID 卡通常禁用磁盘缓存,完全依赖于自己的(卡上)DRAM 缓存。虽然这对于传统 HDD 来说不是问题,但如果无法使用内部 DRAM 缓存,NAND 芯片(以及在其上构建的 SSD)固有的不可覆盖特性会导致巨大的性能损失。
举个例子:256 GB Crucial M550,顺序写入速度超过 400 MB/s,下降到5MB/s,内部缓存已禁用。随机写入时,损失同样严重。这正是企业级 SSD 使用(过去)SLC NAND 的确切原因:与 MLC 甚至 eMLC 相比,它们的编程时间要短得多。
因此,在将消费级 SSD 与品牌硬件 RAID 卡组合时,我总是有点紧张。另一方面,Linux mdraid 与任何类型的 SSD 配合得非常好。
对于您的特定情况,您可以进行一些测试,尝试重新启用内部磁盘缓存(DELL/LSI 控制器提供了这种可能性,我不知道 HP 控制器是否提供这种可能性)。但是,请记住,如果启用了磁盘的写入缓存,则在断电时可能会丢失数据(除非您的磁盘具有断电保护功能,但这在消费领域非常罕见)。