SSD 磁盘和 10 Gb 网络的 iSCSI 性能不佳

Kev*_*ker 10 linux iscsi ssd open-iscsi

iSCSI 目标

Ubuntu 14.04 (Trusty Tahr) 具有 16 GB RAM 和 16 核 CPU 作为 LVM 支持的 iSCSI 目标,使用三个三星 SSD 磁盘,每个磁盘都能够使用带有板载缓存的 LSI 6 Gbit/s 控制器执行 65k IOPS。

目标中 SSD 磁盘的基准测试:

fio --filename=/dev/sdd --direct=1 --sync=1 --rw=write --bs=4k --numjobs=10 --iodepth=1 --runtime=60 --time_based --group_reporting --name=ssd-max

iops=65514
Run Code Online (Sandbox Code Playgroud)

sdd在硬件配置RAID 0使用三个三星850固态硬盘EVO。

发起人

我在具有 32 GB RAM 和 8 个核心 CPU 的 Ubuntu 14.04 客户端上导出了一个 500G LUN。

导出 LUN 的基准测试

fio --filename=/dev/sdg --direct=1 --sync=1 --rw=write --bs=4k --numjobs=10 --iodepth=1 --runtime=60 --time_based --group_reporting --name=client-max

iops=2400
Run Code Online (Sandbox Code Playgroud)

在执行 DAS 和通过网络时,性能显着下降,我预计至少 10k IOPS。

目标和发起方之间的通信小于 1 毫秒,iperf 显示网络吞吐量为 9.2 Gbit/s。

我知道 4k 写入会对性能产生影响,因为每个数据在写入磁盘之前都必须通过启动器和目标的网络堆栈,但从 65k 到 2k 的下降是不可接受的。

问题出在哪里?我在目标和启动器之间有一个10 Gbit/s 以太网NIC。有任何想法吗?

sho*_*hok 20

简短回答:这是网络延迟串行工作负载的结果(如您使用direct=1,sync=1和强加的iodepth=1)。

长答案:使用direct=1sync=1并且iodepth=1您创建了串行工作负载,因为在提交确认前一个写入之前,新写入无法排队。换句话说,写入提交率严格取决于网络延迟。ping两台机器之间的简单操作很可能超过 0.2 毫秒,当使用更高级别的协议作为 TCP(以及在它之上的 iSCSI)时更是如此。假设总网络延迟约为 0.33 毫秒,您的最大 IOPS 值约为 3000。这不考虑其他延迟来源(例如:磁盘本身),因此它与您记录的内容一致。

试试这个:在没有 的情况下执行第一个基准测试--direct=1 --sync=1,然后使用这些选项执行另一个基准测试,但将iodepth请求增加到 32 个。然后在这里报告结果。