On Thu, Dec 18, 2008 at 7:24 AM, Lars Ellenberg <span dir="ltr">&lt;<a href="mailto:lars.ellenberg@linbit.com">lars.ellenberg@linbit.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">On Wed, Dec 17, 2008 at 04:17:00PM -0500, Parak wrote:<br>
&gt; Hi all,<br>
&gt;<br>
&gt; I&#39;m currently playing with DRBD (8.2.7) on 20Gb/s Infiniband, and it seems that<br>
&gt; I&#39;m running at the sync rate as the limiting speed factor. The local storage on<br>
&gt; both nodes is identical (SAS array), and has been benchmarked at about 650MB/s<br>
&gt; (or higher, depending on benchmark) to native disk, and about 550MB/s when<br>
&gt; writing to it through a disconnected DRBD device. The network link for DRBD is<br>
&gt; Infiniband as well (IPoIB), which has been benchmarked with netperf at ~800MB/<br>
&gt; s.<br>
&gt;<br>
&gt; The fastest speed that I&#39;m able to get from the DRBD sync with this<br>
&gt; configuration is ~340MB/s, which limits the speed from my initiator to that as<br>
&gt; well. Interestingly, I was also able to benchmark DRBD sync speed over 10Gbe,<br>
&gt; which despite my repeated attempts to tweak drbd.conf, mtu, and tcp kernel<br>
&gt; parameters, has produced the same speed as the aformentioned 340MB/s over<br>
&gt; IPoIB.<br>
&gt;<br>
&gt; Here&#39;s the drbd.conf:<br>
&gt;<br>
&gt; global {<br>
&gt; &nbsp; &nbsp; usage-count yes;<br>
&gt; }<br>
&gt;<br>
&gt; common {<br>
&gt; &nbsp; syncer {<br>
&gt; &nbsp; &nbsp; &nbsp;rate 900M;<br>
<br>
</div>check if<br>
 &nbsp; &nbsp; &nbsp; &nbsp;cpu-mask 3;<br>
or &nbsp; &nbsp; &nbsp;cpu-mask 7;<br>
or &nbsp; &nbsp; &nbsp;cpu-mask f;<br>
or something like that<br>
has any effect.</blockquote><div>&nbsp;<br>No effect for these.<br><br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d"><br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; }<br>
&gt;<br>
&gt; resource drbd0 {<br>
&gt;<br>
&gt; &nbsp; protocol C;<br>
&gt;<br>
&gt; &nbsp; handlers {<br>
&gt; &nbsp; }<br>
&gt;<br>
&gt; &nbsp; startup {<br>
&gt; &nbsp; &nbsp; degr-wfc-timeout 30;<br>
&gt; &nbsp; }<br>
&gt;<br>
&gt; &nbsp; disk {<br>
&gt; &nbsp; &nbsp; on-io-error &nbsp; detach;<br>
&gt; &nbsp; &nbsp; fencing dont-care;<br>
&gt; &nbsp; &nbsp; no-disk-flushes;<br>
&gt; &nbsp; &nbsp; no-md-flushes;<br>
&gt; &nbsp; &nbsp; no-disk-drain;<br>
&gt; &nbsp; &nbsp; no-disk-barrier;<br>
&gt; &nbsp; }<br>
&gt;<br>
&gt; &nbsp; net {<br>
&gt; &nbsp; &nbsp; ko-count 2;<br>
&gt; &nbsp; &nbsp; after-sb-1pri discard-secondary;<br>
&gt; &nbsp; &nbsp; sndbuf-size 1M;<br>
<br>
</div>you can try sndbuf-size 0; (auto-tuning)</blockquote><div><br>Slightly slower by about 20-30MB/s. <br></div><div>&nbsp;<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

and check whether tweaking<br>
/proc/sys/net/ipv4/tcp_rmem<br>
/proc/sys/net/ipv4/tcp_wmem<br>
/proc/sys/net/core/optmem_max<br>
/proc/sys/net/core/rmem_max<br>
/proc/sys/net/core/wmem_max<br>
and the like has any effect.</blockquote><div><br>These did have a positive effect, but they were already applied in my case (as per recommendations from the Infiniband vendor and ixgb readme):<br><br>net.ipv4.tcp_timestamps=0<br>
net.ipv4.tcp_sack=0<br>net.ipv4.tcp_rmem=&#39;10000000 10000000 10000000&#39;<br>net.ipv4.tcp_wmem=&#39;10000000 10000000 10000000&#39;<br>net.ipv4.tcp_mem=&#39;10000000 10000000 10000000&#39;<br>net.core.rmem_max=524287<br>
net.core.wmem_max=524287<br>net.core.rmem_default=524287<br>net.core.wmem_default=524287<br>net.core.optmem_max=524287<br>net.core.netdev_max_backlog=300000<br></div><div>&nbsp;<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

check wether the drbd option<br>
 &nbsp; &nbsp; &nbsp; &nbsp; no-tcp-cork;<br>
has any positiv/negative effect.</blockquote><div>&nbsp;</div><div>This one has a negative effect - about 70MB/s slower. <br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">
&gt; &nbsp; }<br>
&gt;<br>
&gt; &nbsp; on srpt1 {<br>
&gt; &nbsp; &nbsp; device &nbsp; &nbsp; /dev/drbd0;<br>
&gt; &nbsp; &nbsp; disk &nbsp; &nbsp; &nbsp; /dev/sdb;<br>
&gt; &nbsp; &nbsp; address &nbsp; &nbsp;<a href="http://10.0.0.2:7789" target="_blank">10.0.0.2:7789</a>;<br>
&gt; &nbsp; &nbsp; flexible-meta-disk &nbsp;internal;<br>
&gt; &nbsp; }<br>
&gt;<br>
&gt; &nbsp; on srpt2 {<br>
&gt; &nbsp; &nbsp; device &nbsp; &nbsp; /dev/drbd0;<br>
&gt; &nbsp; &nbsp; disk &nbsp; &nbsp; &nbsp; /dev/sdb;<br>
&gt; &nbsp; &nbsp; address &nbsp; &nbsp;<a href="http://10.0.0.3:7789" target="_blank">10.0.0.3:7789</a>;<br>
&gt; &nbsp; &nbsp; flexible-meta-disk &nbsp;internal;<br>
&gt; &nbsp; }<br>
&gt; }<br>
&gt;<br>
&gt; Any advice/thoughts would be highly appreciated; thanks!<br>
<br>
</div>cpu utilization during benchmarks?<br>
&quot;wait state&quot;?<br>
memory bandwidth?<br>
interrupt rate?</blockquote><div><br>The cpu utilization during the sync for the top tasks looks like so (fluctuates, and typically lower), and is similiar on both nodes. I have not seen any iowait:<br>Cpu(s):&nbsp; 1.2%us, 43.9%sy,&nbsp; 0.0%ni, 13.6%id,&nbsp; 0.0%wa,&nbsp; 0.5%hi, 40.9%si,&nbsp; 0.0%st<br>
<br>&nbsp; PID USER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PR&nbsp; NI&nbsp; VIRT&nbsp; RES&nbsp; SHR S %CPU %MEM&nbsp;&nbsp;&nbsp; TIME+&nbsp; COMMAND<br>29513 root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0 R&nbsp;&nbsp; 69&nbsp; 0.0&nbsp;&nbsp; 7:31.92 drbd0_receiver<br>&nbsp;&nbsp; 32 root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp; -5&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0 S&nbsp;&nbsp; 39&nbsp; 0.0&nbsp; 44:32.93 kblockd/0<br>
29518 root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -3&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0 S&nbsp;&nbsp; 18&nbsp; 0.0&nbsp;&nbsp; 1:55.06 drbd0_asender<br>21392 root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0 S&nbsp;&nbsp;&nbsp; 1&nbsp; 0.0&nbsp;&nbsp; 0:36.02 drbd0_worker<br><br>The memory bandwidth I&#39;ve benchmarked with ramspeed to be ~2500-2700Mb/s on one node, and ~2200Mb/s on the other, due to it having fewer memory modules and memory total.<br>
<br>Interrupt rate is ~13500-14000/sec on the primary and ~11500/sec on the secondary during a sync.<br></div><div>&nbsp;<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

maybe bind or unbind NIC interrupts to cpus?<br>
&nbsp;/proc/interrupts<br>
&nbsp;/proc/irq/*/smp_affinity</blockquote><div><br>They are on CPU0 currently, but would it help to move it if the CPU is not being overly taxed?<br><br>Thanks,<br><br>-Gennadiy <br></div></div>