最近拥有 Dell PowerVault MD3600i 我遇到了一些奇怪的结果。
我有一个专用的 24x 10GbE 交换机 (PowerConnect 8024),设置为 9K 巨型帧。
MD3600 有 2 个 RAID 控制器,每个控制器有 2 个 10GbE 以太网网卡。开关上没有其他东西;一个 VLAN 用于 SAN 流量。
这是我的 multipath.conf
defaults {
udev_dir /dev
polling_interval 5
selector "round-robin 0"
path_grouping_policy multibus
getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
prio_callout none
path_checker readsector0
rr_min_io 100
max_fds 8192
rr_weight priorities
failback immediate
no_path_retry fail
user_friendly_names yes
# prio rdac
}
blacklist {
device {
vendor "*"
product "Universal Xport"
}
# devnode "^sd[a-z]"
}
devices {
device {
vendor "DELL"
product "MD36xxi"
path_grouping_policy group_by_prio
prio rdac
# polling_interval 5
path_checker rdac
path_selector "round-robin 0"
hardware_handler "1 rdac"
failback immediate
features "2 pg_init_retries 50"
no_path_retry 30
rr_min_io 100
prio_callout "/sbin/mpath_prio_rdac /dev/%n"
}
}
和 iscsid.conf :
node.startup = automatic
node.session.timeo.replacement_timeout = 15
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 10
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
经过我的测试;我几乎不能达到 200 Mb/s 读/写。
我应该期待更多吗?如果它有双 10 GbE,我的想法是 400 Mb/s。
有任何想法吗 ?指引?故障排除技巧 ?
编辑:
该阵列设置为 5.7TB 的单个逻辑卷 磁盘均为 1TB 7.2k SAS 6GB (ST1000NM0001) RAID 为 RAID10
Swith 配置的一些行:
interface Te1/0/23
storm-control broadcast
storm-control multicast
spanning-tree portfast
mtu 9000
switchport access vlan 40
exit
...
iscsi cos vpt 5
management access-list "default"
permit service ssh priority 1
permit service http priority 2
permit service https priority 3
和多路径输出:
[root@xnode4 ~]# multipath -ll -v2
multipath.conf line 30, invalid keyword: prio
mpath1 (36d4ae520009bd7cc0000030e4fe8230b) dm-2 DELL,MD36xxi
[size=5.5T][features=3 queue_if_no_path pg_init_retries 50][hwhandler=1 rdac][rw]
\_ round-robin 0 [prio=400][active]
\_ 7:0:0:0 sdc 8:32 [active][ready]
\_ 9:0:0:0 sde 8:64 [active][ready]
\_ 11:0:0:0 sdi 8:128 [active][ready]
\_ 13:0:0:0 sdn 8:208 [active][ready]
\_ round-robin 0 [prio=0][enabled]
\_ 10:0:0:0 sdj 8:144 [active][ghost]
\_ 12:0:0:0 sdh 8:112 [active][ghost]
\_ 8:0:0:0 sdd 8:48 [active][ghost]
\_ 6:0:0:0 sdb 8:16 [active][ghost]
从您的评论和编辑来看,您的瓶颈可能是存储。首先,假设您启用了写入缓存,那么在缓存已满之前的所有写入都应该以线速完成。你可以很容易地衡量这一点,方法是计算出你有多少缓存,并用比这更少的数据做一个 100% 的写入基准。其次,一旦缓存开始将数据转储到磁盘,RAID-10 上的写入性能(假设控制器没有引入瓶颈)将是读取性能的一半。这是因为每次写入都是对两个磁盘完成的,但读取只从一个磁盘完成。RAID-10 的一个好处是无需计算奇偶校验,因此控制器的处理器不太可能根本无法跟上。
接下来,如果您的基准测试正在测量读取和写入的混合,您将从存储控制器获得的性能将取决于 IO 的类型。如果它是顺序的,您将获得更多的 MB/s,但更少的 IO/s。如果它是随机的小块,您将获得少量的 MB/s,但是您的磁盘可以提供尽可能多的 IO/s。当您无法预测读取时,每个 7200 RPM 磁盘将提供一定数量的 IO/s,因此您的 raid 中的驱动器数量乘以每个驱动器的 IO/s 数量将是您的理论性能上限。
最后,如果您将一个大卷中的所有存储都显示为单个 LUN,您的命令队列可能会饱和。普通操作系统具有可配置的命令队列深度(它们将为存储排队的未完成 IO 的数量),并且每个卷/LUN 都有自己的队列。将所有存储都放在同一 LUN 中的另一个问题是,通常,IO 会发送到该 LUN 的单个控制器。即使在主动/主动存储系统(我不确定你的是)上,它们对一个控制器的亲和力优于另一个。目标是创建一堆卷并在控制器之间平均分配它们。
用单个磁盘对其进行基准测试,然后用 raid 0 中的所有磁盘再次进行基准测试。
Raid 0 不会有任何 raid10 或 raid 5 开销。
还要看看你在 MD 上的缓存。默认为 4k 块,但最多可达 32k 块。这两个值之间的速度差异高达 30%。不过,请针对您的工作负载对其进行测试。
在可以使用更多线程的地方使用类似 SQLIO 的东西。一旦我更加努力地工作,我的数字终于开始看起来不错。
并验证 MD 配置为 10G。端口上的选项是 10G 或 1G,它不会自动协商。
也许您想将阵列上的缓存块大小从 4k 增加到 16k 或 32k(特别是如果您正在寻找顺序工作负载)