<div dir="ltr"><div>Hello fellow LXC users!<br></div><div><br></div><div>I have hit a brick wall with a problem of trying to pass an infiniband network interface inside a container.</div><div><br></div><div>The host is Ubuntu 14.04.1 LTS (Trusty Tahr)</div><div><div>$ uname -a</div><div>Linux MYHOST 3.19.0-49-generic #55~14.04.1-Ubuntu SMP Fri Jan 22 11:24:31 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux</div></div><div><br></div><div>these are the infiniband network interfaces:</div><div><div>$ ifconfig </div></div><div><div>ib0       Link encap:UNSPEC  HWaddr 80-00-04-04-FE-80-00-00-00-00-00-00-00-00-00-00  </div><div>          inet addr:192.168.0.254  Bcast:192.168.0.255  Mask:255.255.255.0</div><div>          inet6 addr: fe80::202:c902:2a:7c31/64 Scope:Link</div><div>          UP BROADCAST RUNNING MULTICAST  MTU:65520  Metric:1</div><div>          RX packets:7456285 errors:0 dropped:0 overruns:0 frame:0</div><div>          TX packets:9528644 errors:0 dropped:130 overruns:0 carrier:0</div><div>          collisions:0 txqueuelen:256 </div><div>          RX bytes:276184857127 (276.1 GB)  TX bytes:16792176768 (16.7 GB)</div><div><br></div><div>ib1       Link encap:UNSPEC  HWaddr 80-00-04-05-FE-80-00-00-00-00-00-00-00-00-00-00  </div><div>          inet addr:192.168.1.254  Bcast:192.168.1.255  Mask:255.255.255.0</div><div>          inet6 addr: fe80::202:c902:2a:7c32/64 Scope:Link</div><div>          UP BROADCAST RUNNING MULTICAST  MTU:65520  Metric:1</div><div>          RX packets:4212 errors:0 dropped:0 overruns:0 frame:0</div><div>          TX packets:2234 errors:0 dropped:127 overruns:0 carrier:0</div><div>          collisions:0 txqueuelen:256 </div><div>          RX bytes:671192 (671.1 KB)  TX bytes:481417 (481.4 KB)</div></div><div><br></div><div>I create a Ubuntu Trust container called "mycontainer" with an alternate container path set to /home/sum/sumLXC</div><div>$ sudo lxc-create -t download -n mycontainer -P /home/sum/sumLXC -- -d ubuntu -r trusty -a amd64<br></div><div><br></div><div>I add ib0 / ib1 as a phys network type to the mycontainer's config file /home/sum/sumLXC/mycontainer/config</div><div><div># ib0 configuration</div><div>lxc.network.type = phys </div><div>lxc.network.flags = up</div><div>lxc.network.link = ib0 </div><div>lxc.network.ipv4 = <a href="http://192.168.0.63/24">192.168.0.63/24</a></div><div><br></div><div># ib1 configuration</div><div>lxc.network.type = phys </div><div>lxc.network.flags = up</div><div>lxc.network.link = ib1 </div><div>lxc.network.ipv4 = <a href="http://192.168.1.63/24">192.168.1.63/24</a></div></div><div><br></div><div>I start up the container</div><div>$ sudo lxc-start -n mycontainer -P /home/sum/sumLXC<br></div><div><br></div><div>Now ib0 / iib1 disappears from the host. I attach to the container</div><div><div>$ sudo lxc-attach -n mycontainer -P /home/sum/sumLXC</div></div><div><br></div><div>Now inside the container I see ib0 / ib1</div><div>root@mycontainer:/# ifconfig<br></div><div><div>ib0       Link encap:UNSPEC  HWaddr 80-00-04-04-FE-80-00-00-00-00-00-00-00-00-00-00  </div><div>          inet addr:192.168.0.63  Bcast:192.168.0.255  Mask:255.255.255.0</div><div>          inet6 addr: fe80::202:c902:2a:7c31/64 Scope:Link</div><div>          UP BROADCAST RUNNING MULTICAST  MTU:65520  Metric:1</div><div>          RX packets:7456338 errors:0 dropped:0 overruns:0 frame:0</div><div>          TX packets:9528739 errors:0 dropped:144 overruns:0 carrier:0</div><div>          collisions:0 txqueuelen:256 </div><div>          RX bytes:276184863867 (276.1 GB)  TX bytes:16792190084 (16.7 GB)</div><div><br></div><div>ib1       Link encap:UNSPEC  HWaddr 80-00-04-05-FE-80-00-00-00-00-00-00-00-00-00-00  </div><div>          inet addr:192.168.1.63  Bcast:192.168.1.255  Mask:255.255.255.0</div><div>          inet6 addr: fe80::202:c902:2a:7c32/64 Scope:Link</div><div>          UP BROADCAST RUNNING MULTICAST  MTU:65520  Metric:1</div><div>          RX packets:4288 errors:0 dropped:0 overruns:0 frame:0</div><div>          TX packets:2279 errors:0 dropped:141 overruns:0 carrier:0</div><div>          collisions:0 txqueuelen:256 </div><div>          RX bytes:682135 (682.1 KB)  TX bytes:489120 (489.1 KB)</div></div><div><br></div><div>The kernel version for the container matches that of the host</div><div><div>root@mycontainer:/# uname -a</div><div>Linux mycontainer 3.19.0-49-generic #55~14.04.1-Ubuntu SMP Fri Jan 22 11:24:31 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux</div></div><div><br></div><div>I install the infiniband software inside the container</div><div><div>root@mycontainer:/# apt-get install ibverbs-utils opensm infiniband-diags libopensm5 libibnetdisc5 libibverbs1 libibumad3 libibmad5 libibcommon1 libmlx4-1 libipathver    bs1 libmthca1</div></div><div><br></div><div>along with the kernel headers</div><div>root@mycontainer:/# apt-get install libmthca-dev linux-headers-3.19.0-49 linux-image-extra-3.19.0-49-generic linux-headers-3.19.0-49-generic<br></div><div><br></div><div>along with infiniband testing software</div><div>root@mycontainer:/# apt-get install perftest<br></div><div><br></div><div>next I add the /dev/infiniband special files to the container (done on host)</div><div><div><div>$ sudo lxc-device -n mycontainer -P /home/sum/sumLXC add /dev/infiniband/uverbs0</div><div>$ sudo lxc-device -n mycontainer -P /home/sum/sumLXC add /dev/infiniband/issm0</div><div>$ sudo lxc-device -n mycontainer -P /home/sum/sumLXC add /dev/infiniband/issm1</div><div>$ sudo lxc-device -n mycontainer -P /home/sum/sumLXC add /dev/infiniband/rdma_cm</div><div>$ sudo lxc-device -n mycontainer -P /home/sum/sumLXC add /dev/infiniband/umad0</div><div>$ sudo lxc-device -n mycontainer -P /home/sum/sumLXC add /dev/infiniband/umad1</div></div></div><div><br></div><div>Inside the container, give same permissions as the host</div><div>root@mycontainer:/# chmod a+w /dev/infiniband/rdma_cm<br></div><div>root@mycontainer:/# chmod a+w /dev/infiniband/uverbs0<br></div><div><br></div><div>So now inside the container /dev/infiniband exists like this:</div><div><div>root@mycontainer:/# ls -lh /dev/infiniband/</div><div>total 0</div><div>crw------- 1 root root 231,  64 Mar 10 06:55 issm0</div><div>crw------- 1 root root 231,  65 Mar 10 06:56 issm1</div><div>crw-rw-rw- 1 root root  10,  56 Mar 10 06:56 rdma_cm</div><div>crw------- 1 root root 231,   0 Mar 10 06:56 umad0</div><div>crw------- 1 root root 231,   1 Mar 10 06:56 umad1</div><div>crw-rw-rw- 1 root root 231, 192 Mar  4 08:01 uverbs0</div></div><div><br></div><div><br></div><div><div>root@mycontainer:/# ib_read_bw </div><div>------------------------------------------------------------------</div><div>                    RDMA_Read BW Test</div><div>Connection type : RC</div><div>Couldn't get context for mthca0</div></div><div><br></div><div>Now ib_read_bw works fine on the host, but not inside the container. I've searched for this error but could not solve it myself. Anyone had this same problem?</div><div><br></div><div>PS: The recommended way to use infiniband inside containers is to use SR-IOV. However our hardware network interface card is Realtek and it doesn't support SR-IOV so that is why I was hoping adding ib0 / ib1 as phys could do the trick.</div><div><br></div><div><a href="https://git.framasoft.org/AJNOURI/pipework">https://git.framasoft.org/AJNOURI/pipework</a><br></div><div>"Support Infiniband IPoIB<br><br>Passing an IPoIB interface to a container is supported. However, the entire device is moved into the network namespace of the container. It therefore becomes hidden from the host.<br><br>To provide infiniband to multiple containers, use SR-IOV and pass the virtual function devices to the containers."</div><div><br></div><div>Many thanks</div><div>Sum</div><div><br></div></div>