我们有以下硬件:
> Sun Blade X6270
> 2 * LSISAS1068E SAS控制器
> 2 *带有1 TB磁盘的Sun J4400 JBOD(每个JBOD 24个磁盘)
> Fedora Core 12
> 2.6.33从FC13发布内核(也尝试使用FC12的最新2.6.31内核,结果相同)
这是SAS硬件的数据表:
http://www.sun.com/storage/storage_networking/hba/sas/PCIe.pdf
它使用PCI Express 1.0a,8x通道.每个通道的带宽为250 MB /秒,我们应该能够为每个SAS控制器执行2000 MB /秒的速度.
每个控制器每端口可以达到3 Gb /秒,并且有两个4端口PHY.我们将两个PHY从控制器连接到JBOD.因此,在JBOD和控制器之间,我们有2个PHY * 4个SAS端口* 3 Gb /秒= 24 Gb /秒的带宽,这超过了PCI Express带宽.
启用写入缓存和执行大写操作时,每个磁盘可以维持大约80 MB /秒(靠近磁盘的起始位置).有24个磁盘,这意味着我们应该能够为每个JBOD做1920 MB /秒.
multipath { rr_min_io 100 uid 0 path_grouping_policy multibus failback manual path_selector "round-robin 0" rr_weight priorities alias somealias no_path_retry queue mode 0644 gid 0 wwid somewwid }
我为rr_min_io尝试了50,100,1000的值,但似乎并没有太大的区别.
随着rr_min_io的变化,我尝试在启动dd之间添加一些延迟以防止它们同时在相同的PHY上写入,但这没有任何区别,所以我认为I / O正在适当地分散.
根据/ proc / interrupts,SAS控制器正在使用“IR-IO-APIC-fasteoi”中断方案.由于某种原因,机器中的核心#0只处理这些中断.通过为每个SAS控制器分配一个单独的内核来处理中断,我可以稍微提高性能:
echo 2 > /proc/irq/24/smp_affinity echo 4 > /proc/irq/26/smp_affinity
使用dd写入磁盘会生成“函数调用中断”(不知道它们是什么),它们由核心#4处理,因此我也将其他进程保留在此核心之外.
我运行48 dd(每个磁盘一个),将它们分配给不处理中断的内核,如下所示:
taskset -c somecore dd if=/dev/zero of=/dev/mapper/mpathx oflag=direct bs=128M
oflag = direct可防止任何类型的缓冲区缓存参与其中.
我的核心似乎都没有达到最大化.处理中断的内核大多是空闲的,所有其他内核都在等待I / O,正如人们所期望的那样.
cpu0 : 0.0%us,1.0%sy,0.0%ni,91.2%id,7.5%wa,0.0%hi,0.2%si,0.0%st cpu1 : 0.0%us,0.8%sy,93.0%id,0.2%wa,6.0%si,0.0%st cpu2 : 0.0%us,0.6%sy,94.4%id,0.1%wa,4.8%si,0.0%st cpu3 : 0.0%us,7.5%sy,36.3%id,56.1%wa,0.0%si,0.0%st cpu4 : 0.0%us,1.3%sy,85.7%id,4.9%wa,8.1%si,0.0%st cpu5 : 0.1%us,5.5%sy,36.2%id,58.3%wa,0.0%st cpu6 : 0.0%us,5.0%sy,58.7%wa,0.0%st cpu7 : 0.0%us,5.1%sy,58.5%wa,0.0%st cpu8 : 0.1%us,8.3%sy,27.2%id,64.4%wa,0.0%st cpu9 : 0.1%us,7.9%sy,55.8%wa,0.0%st cpu10 : 0.0%us,7.8%sy,56.0%wa,0.0%st cpu11 : 0.0%us,7.3%sy,56.4%wa,0.0%st cpu12 : 0.0%us,5.6%sy,33.1%id,61.2%wa,0.0%st cpu13 : 0.1%us,5.3%sy,36.1%id,0.0%st cpu14 : 0.0%us,4.9%sy,36.4%id,0.0%st cpu15 : 0.1%us,5.4%sy,36.5%id,58.1%wa,0.0%st
鉴于此,运行“dstat 10”报告的吞吐量在2200-2300 MB /秒的范围内.
鉴于上面的数学,我期望在2 * 1920~ = 3600 MB / sec的范围内.
有没有人知道我的丢失带宽去了哪里?
谢谢!
解决方法
我自己就是一个速度快的人,而且我认为你这些钱是诚实的.我一半期望看到你的吞吐量低于它,但我认为你已经有了一个小的,预期的,效率低下的积累.例如,PCIe总线很难一直达到100%,最好假设总体速率低90%.鉴于抖动,这将导致它也意味着PHY将不会100%’馈送’,所以你会丢失一点,相同的缓存,磁盘,非耗费中断,IO调度等.基本上它是次要的低效率次要的低效率……等等,它最终超过了5-10%的预期低效率.我见过这种事情,HP DL服务器使用W2K3与他们的MSA SAS盒子交谈,然后在多个NIC上使用NLB – 令人沮丧但我可以理解.无论如何,这是我的2c,对不起,这不是太积极.