<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RoCE on Council of Elrond</title><link>https://songkou.github.io/tags/roce/</link><description>Recent content in RoCE on Council of Elrond</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 18 Jul 2026 20:00:00 +0800</lastBuildDate><atom:link href="https://songkou.github.io/tags/roce/index.xml" rel="self" type="application/rss+xml"/><item><title>Perftest_RDMA_Benchmarking</title><link>https://songkou.github.io/posts/perftest/</link><pubDate>Sat, 18 Jul 2026 20:00:00 +0800</pubDate><guid>https://songkou.github.io/posts/perftest/</guid><description>&lt;h2 id="what-is-perftest"&gt;What is perftest?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;perftest&lt;/strong&gt; is the standard micro-benchmark suite for RDMA — it validates and benchmarks InfiniBand, hardware RoCE, and Soft-RoCE links, not ordinary TCP networking. Each tool measures one RDMA verb:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Test&lt;/th&gt;
					&lt;th&gt;Measures&lt;/th&gt;
					&lt;th&gt;Real-world workloads it models&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ib_write_bw&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;RDMA Write bandwidth&lt;/td&gt;
					&lt;td&gt;Data replication, storage writes, GPU/bulk data transfers&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ib_write_lat&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;RDMA Write latency&lt;/td&gt;
					&lt;td&gt;Updating remote memory — small one-sided writes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ib_read_bw&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;RDMA Read bandwidth&lt;/td&gt;
					&lt;td&gt;Distributed storage and database reads, remote memory access&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ib_read_lat&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;RDMA Read latency&lt;/td&gt;
					&lt;td&gt;Fetching remote memory — storage/database-style lookups&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ib_send_bw&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Send/Receive bandwidth&lt;/td&gt;
					&lt;td&gt;MPI messages, RPC, request queues&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ib_send_lat&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Send/Receive latency&lt;/td&gt;
					&lt;td&gt;Small request/response round trips — RPC and MPI latency&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ib_atomic_bw&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Atomic operation rate&lt;/td&gt;
					&lt;td&gt;Distributed locks and counters&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ib_atomic_lat&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Atomic latency&lt;/td&gt;
					&lt;td&gt;Synchronization primitives&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="write-read-and-send-are-different-operations"&gt;Write, Read, and Send are different operations&lt;/h3&gt;
&lt;p&gt;The grouping in the table is not accidental — the three verbs have different semantics:&lt;/p&gt;</description></item><item><title>RoCE_Cumulus_Linux</title><link>https://songkou.github.io/posts/roce_cumulus_linux/</link><pubDate>Fri, 17 Jul 2026 20:00:00 +0800</pubDate><guid>https://songkou.github.io/posts/roce_cumulus_linux/</guid><description>&lt;h2 id="part-1-roce-and-rdma-fundamentals"&gt;Part 1: RoCE and RDMA fundamentals&lt;/h2&gt;
&lt;p&gt;In the context of &lt;strong&gt;NVIDIA/Cumulus Linux and HPC networking&lt;/strong&gt;, &lt;strong&gt;RoCE&lt;/strong&gt; stands for:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;RoCE = RDMA over Converged Ethernet&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is widely used in &lt;strong&gt;AI clusters, HPC, GPU clusters, storage networks, and low-latency data centers&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="what-is-roce"&gt;What is RoCE?&lt;/h3&gt;
&lt;p&gt;RoCE allows &lt;strong&gt;RDMA (Remote Direct Memory Access)&lt;/strong&gt; to run over an Ethernet network.&lt;/p&gt;
&lt;p&gt;Normally, when one server sends data to another:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Application
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;TCP/IP Stack
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Kernel
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NIC
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Ethernet
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The CPU has to copy memory, handle interrupts, process TCP/IP, and switch between user and kernel space. This consumes CPU cycles and adds latency.&lt;/p&gt;</description></item></channel></rss>