在Linux上改进SAS多路径到JBOD性能

我正在尝试使用 Linux优化某些Sun硬件上的存储设置.任何想法将不胜感激.

我们有以下硬件:

> 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,对不起,这不是太积极.

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...