<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Soul Of Free Loop &#187; rping</title>
	<atom:link href="https://zohead.com/archives/tag/rping/feed" rel="self" type="application/rss+xml" />
	<link>https://zohead.com</link>
	<description>Uranus Zhou&#039;s Blog</description>
	<lastBuildDate>Sat, 19 Jul 2025 15:42:46 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8</generator>
	<item>
		<title>Chelsio RDMA Block设备驱动测试</title>
		<link>https://zohead.com/archives/chelsio-rbd/</link>
		<comments>https://zohead.com/archives/chelsio-rbd/#comments</comments>
		<pubDate>Wed, 11 May 2016 07:55:41 +0000</pubDate>
		<dc:creator><![CDATA[Uranus Zhou]]></dc:creator>
				<category><![CDATA[存储]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Chelsio]]></category>
		<category><![CDATA[Infiniband]]></category>
		<category><![CDATA[iWARP]]></category>
		<category><![CDATA[RBD]]></category>
		<category><![CDATA[RDMA]]></category>
		<category><![CDATA[rping]]></category>
		<category><![CDATA[万兆]]></category>
		<category><![CDATA[块设备]]></category>

		<guid isPermaLink="false">https://zohead.com/?p=1225</guid>
		<description><![CDATA[RDMA Block 设备驱动介绍 我们现在测试使用的 Chelsio T4 及 T5 系列万兆以太网卡支持 iWARP RDMA 功能，查阅文档之后发现此系列的万兆网卡除了支持常用的基于 IP 协议的 iSCSI 以及 NFS-RDMA 之类的功能，Chelsio 还特别提供了基于 RDMA 的 Block 设备驱动（以下简称 RBD 驱动）。 RDMA 技术本身我就不做详细介绍了，Chelsio 提供的 RBD 驱动则支持通过 iWARP 网卡的 RDMA 连接在 Linux 系统中虚拟新的块设备，其架构如下图所示，可以看到也是 target - initiator 模式： 基于 iWAR [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2 id="rdma-block-设备驱动介绍">RDMA Block 设备驱动介绍</h2>
<p>我们现在测试使用的 Chelsio T4 及 T5 系列万兆以太网卡支持 iWARP RDMA 功能，查阅文档之后发现此系列的万兆网卡除了支持常用的基于 IP 协议的 iSCSI 以及 NFS-RDMA 之类的功能，Chelsio 还特别提供了基于 RDMA 的 Block 设备驱动（以下简称 RBD 驱动）。</p>
<p>RDMA 技术本身我就不做详细介绍了，Chelsio 提供的 RBD 驱动则支持通过 iWARP 网卡的 RDMA 连接在 Linux 系统中虚拟新的块设备，其架构如下图所示，可以看到也是 target - initiator 模式：</p>
<div style="width: 620px" class="wp-caption alignnone"><a href="http://res.cloudinary.com/digwht2y0/image/upload/v1737370804/chelsio-rbd.png" target="_blank"><img alt="RDMA Block 设备驱动架构" src="http://res.cloudinary.com/digwht2y0/image/upload/v1737370804/chelsio-rbd.png" width="610" height="300" /></a><p class="wp-caption-text">RDMA Block 设备驱动架构</p></div>
<p>基于 iWARP 的 RBD 对比 iSCSI 等技术可以显著提高性能及降低延迟，虽然 RBD 驱动目前仍然处于测试阶段，只支持 Linux 系统，而且也存在一些限制：</p>
<ul>
<li>最大 RBD I/O 大小为 128 KB；</li>
<li>Outstanding I/O 最大为 256；</li>
<li>目前物理和逻辑扇区都固定为 4 KB。</li>
</ul>
<p>但看起来并不妨碍我们拿来做一些简单的测试的。</p>
<h2 id="测试环境">测试环境</h2>
<ul>
<li>Chelsio T420-CR 双口 10Gbps 万兆网卡；</li>
<li>万兆网卡都使用 PCI-E 2.0 x 8 插槽；</li>
<li>服务器和客户端均采用 Linux 64 位 3.18 版本 kernel；</li>
<li>万兆网卡及 RDMA Block 设备驱动使用 ChelsioUwire-2.11.1.0 版本；</li>
<li>服务器和客户端使用直连方式连接。</li>
</ul>
<h2 id="测试步骤">测试步骤</h2>
<h3 id="配置万兆网卡">配置万兆网卡</h3>
<p>首先分别在服务器和客户端安装 ChelsioUwire 驱动，如果一切正常的话系统应该能自动加载 <code>cxgb4</code> 万兆网卡驱动及对应的 iWARP 驱动：</p>
<pre class="brush: bash; title: ; notranslate">
~ # lsmod | grep iw
iw_cxgb4 145655 0
iw_cm 21013 1 rdma_cm
ib_core 53913 13 xprtrdma,svcrdma,ib_ipoib,rdma_ucm,ib_ucm,ib_uverbs,ib_umad,rdma_cm,ib_cm,ib_sa,ib_mad,iw_cxgb4,iw_cm
cxgb4 300161 1 iw_cxgb4
</pre>
<blockquote>
<p><strong>提示</strong></p>
<p>为了让需要支持 RDMA 的应用程序也能正常使用 InfiniBand Verbs API 功能，建议同时安装 Chelsio 万兆网卡的 <code>cxgb4</code> 驱动对应的 RDMA 用户模式驱动程序 <code>libcxgb4</code>（libcxgb4-rdmav2.so）。</p>
</blockquote>
<p><br/>
<p>如果没有正确加载 iWARP 驱动那也可以尝试手工加载 RDMA 相关驱动：</p>
<pre class="brush: bash; title: ; notranslate">
~ # modprobe iw_cxgb4
~ # modprobe rdma_ucm
</pre>
<p>接下来为万兆网卡配置 IP 地址，为了测试性能考虑可以将两端的万兆网卡 MTU 值修都改为 9000，假设服务器和客户端的 IP 地址分别为：</p>
<ul>
<li>10.10.1.1</li>
<li>10.10.1.2</li>
</ul>
<h3 id="测试-rdma-连接">测试 RDMA 连接</h3>
<p>这里我使用 <code>rping</code> 工具测试 RDMA 连接，<code>rping</code> 工具可以兼容所有支持 RDMA 功能的协议，例如：InfiniBand、RoCE、iWARP 等。CentOS 等系统中可以安装 <code>librdmacm</code> 软件包支持 <code>rping</code> 工具，对应的 Ubuntu 等系统中也可以使用 <code>rdmacm-utils</code> 软件包。</p>
<p><code>rping</code> 命令的 <code>-a</code> 参数指定要监听（服务器端）或者连接（客户端）的地址，对于 Infiniband 需要启用并配置 IPoIB 网卡并使用 IPoIB 接口设备的 IP 地址，而对于 RoCE 和 iWARP 则可以直接使用网卡接口设备的 IP 地址。</p>
<p>我测试的 Chelsio 万兆网卡就是支持 iWARP 的，因此可以直接使用上面列出的网卡 IP 地址进行测试，分别看看服务端和客户端的使用方式和测试结果，<code>rping</code> 命令的 <code>-s</code> 参数指定当前主机做服务端：</p>
<pre class="brush: bash; title: ; notranslate">
~ # rping -s -a 10.10.1.1 -v
server ping data: rdma-ping-0: ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr
server ping data: rdma-ping-1: BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs
server ping data: rdma-ping-2: CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst
server ping data: rdma-ping-3: DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu
server DISCONNECT EVENT...
wait for RDMA_READ_ADV state 9
</pre>
<p><code>rping</code> 命令的 <code>-c</code> 参数指定客户端，<code>-a</code> 参数指定服务器端地址，<code>-C</code> 参数和普通的 <code>ping</code> 命令类似：</p>
<pre class="brush: bash; title: ; notranslate">
~ # rping -c -a 10.10.1.1 -v -C 4
ping data: rdma-ping-0: ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr
ping data: rdma-ping-1: BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs
ping data: rdma-ping-2: CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst
ping data: rdma-ping-3: DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu
client DISCONNECT EVENT...
</pre>
<p>看起来 RDMA 连接是正常的，下面就可以编译 RDMA Block 设备驱动测试了。</p>
<h3 id="测试-rbd-驱动">测试 RBD 驱动</h3>
<p>Chelsio RBD 驱动也在 ChelsioUwire 软件包中，假设一切安装正常，首先我们可以在服务器端建立卷设备，然后加载 RBD target 模式驱动：</p>
<pre class="brush: bash; title: ; notranslate">
~ # modprobe rbdt
</pre>
<p>至于 initiator 客户端则加载对应 RBD 驱动，并使用 <code>rbdctl</code> 命令添加 RDMA Block target：</p>
<pre class="brush: bash; title: ; notranslate">
~ # modprobe rbdi
~ # rbdctl -n -a 10.10.1.1 -d /dev/lv/rdmat -p 65000
</pre>
<p>上面 <code>rbdctl</code> 的 <code>-a</code> 参数指定 RBD 服务器端 iWARP 网卡 IP 地址，<code>-d</code> 参数指定需要访问的卷设备，<code>-p</code> 参数指定端口。</p>
<p>添加完成之后可以分别确认 target 和 initiator 端是否正常，先看看 target 端是否有正常的连接日志：</p>
<pre class="brush: bash; title: ; notranslate">
~ # tail /var/log/messages
Apr 20 17:06:42 node1 kernel: [17765.479389] rbdt: setting up rdma target on 0.0.0.0:65000
Apr 20 17:16:24 node1 kernel: [18348.143852] rbdt: connected 10.10.1.1:65000&lt;-&gt;10.10.1.2:35010!
</pre>
<p>initiator 端应该能正确看到新的 RBD 设备了：</p>
<pre class="brush: bash; title: ; notranslate">
~ # tail /var/log/messages
Jan 20 17:13:07 node2 kernel: [ 2741.710561] rbdi: connected 10.10.1.2:35010&lt;-&gt;10.10.1.1:65000!
Jan 20 17:13:07 node2 kernel: [ 2741.710658] rbdi: initialized /dev/rbdi0 (51201024 sectors; 209719394304 bytes)
</pre>
<p>这样就可以使用 <code>/dev/rbdi0</code> 设备进行各种读写性能相关测试了，根据 Chelsio 官方的测试数据，RBD 驱动的性能要比 Network Block Device（NBD 设备）好不少，已经比较接近 target 端本地读写的性能，而且延迟也控制的很好，我就不贴出详细数据咯。</p>
<p>另外运行过程中也可以查看 RBD 驱动的实时运行状态，下面是我在 RBD target 端看到的统计结果（kernel 需要开启 debugfs 支持）：</p>
<pre class="brush: bash; title: ; notranslate">
~ # cat /sys/kernel/debug/rbdt/rdmat/stats
reqs_started 656320
reqs_completed 656320
immd_writes 0
immd_reads 0
stall_sq_full 0
stall_ordq_full 0
max_outstanding_reqs 256
cq_waits 221261
max_rcq_polled 160
max_scq_polled 246
</pre>
]]></content:encoded>
			<wfw:commentRss>https://zohead.com/archives/chelsio-rbd/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
