Docker 컨테이너로 InfiniBand 부팅(성능도 측정)
6241 단어 Dockerinfiniband
이미 LXC에 발표된 논문이 있기 때문에 [1]로 Docker도 한번 실현해 봅시다.
절차.
컨디션
호스트 OS에서 IB(InfiniBand)가 문제 없이 실행되고 있습니다.
Docker로 centos6 이미지를 만들어 IB 주위 포장에 넣는다.
$ sudo docker pull centos
$ sudo docker run -i -t centos /bin/bash
# yum update
# yum install infiniband-diags
# その他 IB パッケージをいろいろ
검증된 환경 HCA는 ConnectX-2(mlx4)이므로 libmlx4 설치를 잊지 마십시오.# yum install libmlx4
/etc/libibverbs.d/mlx4.driver있는지 확인하다.
HCA에 해당하는 드라이버 패키지를 미리 넣지 않으면 ibvdevices 같은 거 할 때.
Warning: no userspace device-specific driver found for
/sys/class/infiniband_verbs/uverbs0
주의하세요, 제가 이렇게 말할게요.호스트 측
$ sudo docker commit XXXXXX(コンテナのID) centos6-ib
그림의 스냅숏으로ibstat 확인을 수행하면 호스트 OS와 동일한 결과가 표시됩니다.
# ibstat
ibv_devinfo를 실행해 보도록 하겠습니다.# ibv_devinfo
hca_id: mlx4_0
transport: InfiniBand (0)
fw_ver: 2.9.1000
node_guid: XXXX:XXXX:XXXX:XXXX
sys_image_guid: XXXX:XXXX:XXXX:XXXX
vendor_id: 0xXXXX
vendor_part_id: XXXX
hw_ver: 0xXX
board_id: MT_XXXXXXX
phys_port_cnt: 2
port: 1
state: PORT_DOWN (1)
max_mtu: 4096 (5)
active_mtu: 4096 (5)
sm_lid: 1
port_lid: 1
port_lmc: 0x00
link_layer: InfiniBand
port: 2
state: PORT_DOWN (1)
max_mtu: 4096 (5)
active_mtu: 4096 (5)
sm_lid: 0
port_lid: 0
port_lmc: 0x00
link_layer: InfiniBand
대박이다.ibhosts 해볼게요.
# ibhosts
src/query_smp.c:227; can't open UMAD port ((null):0)
/usr/sbin/ibnetdiscover: iberror: failed: discover failed
음...스트레이트로 ibnetdiscover 쫓아봐.# strace ibnetdiscover
…
open("/dev/infiniband/umad0", O_RDWR|O_NONBLOCK) = -1 ENOENT (No such file or directory)
write(2, "src/query_smp.c:227; can't open "..., 53src/query_smp.c:227; can't open UMAD port ((null):0)
...
거짓말이란 무엇인가!원래/dev/infiniband는 존재하지 않습니다./dev/infiniband 설정
Docker가 다른 추천 방법이 있는 것 같지만, 우선 호스트/dev/infniband를 컨테이너의/dev/infiniband에 강제로 연결해서 컨테이너를 시작합니다.
$ sudo docker run -privileged -v /dev/infiniband:/dev/infiniband -i -t centos6-ib /bin/bash
# ibhosts
Ca : 0xXXXXXXXXXXXXXX ports 2 "xeon HCA-1"
Cool! 대박이다.드디어 Docker(LXC)로 IB에 접근할 수 있게 되었습니다!성능
ib_read_bw, ib_write_bw, ib_read_lat, ib_read_bw로 측정했어요.한쪽은 LXC 컨테이너 내에서, 다른 한쪽은 Native에서 이동합니다.ConnectX2QDR(40Gbps)로 측정합니다.
Native(호스트 OS에서 직접 실행)와는 거의 변화가 없네요!과정은 LXC에서 작동하지만, 그 비용은 없다고 할 수 있다.Cool.
실행 로그는 다음과 같습니다.
Docker 내(LXC container)에서 실행
# ib_read_bw 192.168.11.16
…
-----------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]
65536 1000 3008.83 3008.80 0.048141
----------------------------------------------------
# ib_write_bw 192.168.11.16
…
-----------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]
65536 5000 3066.07 3066.05 0.049057
---------------------------------------------------------------------------------------
# ib_read_lat 192.168.11.16
…
-----------------------------------
#bytes #iterations t_min[usec] t_max[usec] t_typical[usec]
2 1000 1.66 20.13 2.65
---------------------------------------------------------------------------------------
# ib_write_lat 192.168.11.16
…
-----------------------------------
#bytes #iterations t_min[usec] t_max[usec] t_typical[usec]
2 1000 0.80 7.12 0.86
---------------------------------------------------------------------------------------
호스트 OS(Native)에서 실행
$ ib_read_bw 192.168.11.16
…
-----------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]
65536 1000 3015.43 3011.54 0.048185
---------------------------------------------------------------------------------------
$ ib_write_bw 192.168.11.16
…
-----------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]
65536 5000 3065.79 3065.63 0.049050
--------------------------------------------------------------------------------
$ ib_read_lat 192.168.11.16
…
-----------------------------------
#bytes #iterations t_min[usec] t_max[usec] t_typical[usec]
2 1000 1.68 39.48 2.67
---------------------------------------------------------------------------------------
$ ib_write_lat 192.168.11.16
…
-----------------------------------
#bytes #iterations t_min[usec] t_max[usec] t_typical[usec]
2 1000 0.80 4.70 0.86
---------------------------------------------------------------------------------------
TODO
한층 더 활용하다
IBHCA를 제외하고 Docker는 특권 모드+LXC 설정을 통해 GPU의 보급을 실현할 수 있다.
노력한다면 PCIex 장치는 일반적으로 Docker에서 실행될 수 있습니다.
참고 문헌
Reference
이 문제에 관하여(Docker 컨테이너로 InfiniBand 부팅(성능도 측정)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/syoyo/items/bea48de8d7c6d8c73435텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)