RDMA방식의 TCP Bypass인 Mellanox VMA 설치와 설정

1.
Mellanox의 VMA를 설치하려고 이런저런 작업을 진행하였습니다. 저는 차근차근 문서를 읽어보고 정리를 한 다음 머리속으로 작업순서를 그리고 진행하는 방식이 아니라 무엇을 하고 장벽에 부딪히면 찾아보고 다시 하는 좌충우돌같은 방식으로 일합니다. 이번에 문제 해결식으로 일을 하다 보니까 불필요한 시간을 낭비하지 않았나 후회를 하기도 했습니다. 그렇지만 처음 접한 과제를 놓고 어떤 문서를 읽어야 할지 캄캄한 상태에서 어쩔 수 없는 선택이었다고 위안을 해봅니다.

VMA를 설치하면서 RDMA와 관련한 라이브러리를 자주 접하였습니다. 왜 그런가 찾아보니까 제가 알던 TCP Bypass와 전혀 다른 구조를 가지고 있네요. Infiniband의 기반기술을 이용하고 있습니다. 몰랐던 부분입니다.

VMA은 Voltaire가 처음으로 개발하여 상용으로 판매하였던 솔류션입니다. 2011년 Mellanox가 인수한 후 2013년 오픈소스로 공개하였네요. Chelsio와 Solarflare가 10G시장을 놓고 경쟁하던 때에 Mellanox가 경쟁력을 강화하려고 인수한 듯 합니다. 2011년 Onload, SDP(Sockets Direct Protocol), VMA 및 Infiniband를 비교한 자료입니다. OpenOnLoad와 VMA의 차이점이 바로 Verbs에 있었습니다.

Verbs An abstract description of the functionality of a network adapter. Using the verbs, any application can create / manage objects that are needed in order to use RDMA for data transfer.
Verbs is an abstract description of the functionality that is provided for applications forusing RDMA.

And known, that both SDP and VMA use RDMA-Verbs and can be used for already compiled binary of program as (libpreload) LD_PRELOAD: As with Openonload, SDP and Mellanox’s VMA all preload to accelerate an existing TCP/IP socket program. Openonload retains the TCP/IP protocol so can be used single ended. SDP and VMA both map to VERBS so must be deployed on both ends of the wire.
What is the difference between SDP and VMA?중에서

그리면 Mellanox가 소개하는 VMA구조입니다. Voltaire의 자료와 동일합니다.

Top-Level

The VMA library is a dynamically linked user-space library. Use of the VMA library does not require any code changes or recompiling of user applications. Instead, it is dynamically loaded via the Linux OS environment variable, LD_PRELOAD. However, it is possible to load VMA library dynamically without using the LD_PRELOAD parameter, which requires minor application modifications.

When a user application transmits TCP and UDP, unicast and multicast IPv4 data, or listens for such network traffic data, the VMA library:

Intercepts the socket receive and send calls made to the stream socket or datagram socket address families.
Implements the underlying work in user space (instead of allowing the buffers to pass on to the usual OS network kernel libraries).

VMA implements native RDMA verbs API. The native RDMA verbs have been extended into the Ethernet RDMA-capable NICs, enabling the packets to pass directly between the user application and the InfiniBand HCA or Ethernet NIC, bypassing the kernel and its TCP/UDP handling network stack.

You can implement the code in native RDMA verbs API, without making any changes to your applications. The VMA library does all the heavy lifting under the hood, while transparently presenting the same standard socket API to the application, thus redirecting the data flow.

The VMA library operates in a standard networking stack fashion to serve multiple network interfaces.

The VMA library behaves according to the way the application calls the bind, connect, and setsockopt directives and the administrator sets the route lookup to determine the interface to be used for the socket traffic. The library knows whether data is passing to or from an InfiniBand HCA or Ethernet NIC. If the data is passing to/from a supported HCA or Ethernet NIC, the VMA library intercepts the call and does the bypass work. If the data is passing to/from an unsupported HCA or Ethernet NIC, the VMA library passes the call to the usual kernel libraries responsible for handling network traffic. Thus, the same application can listen in on multiple HCAs or Ethernet NICs, without requiring any configuration changes for the hybrid environment.

2.
개론은 끝내고 본론입니다. 당연히 VMA를 지원하는 어댑터가 있어야 합니다. 이와 관련하여 Adpator Driver를 다운로드하여야 합니다. 위 개론을 주절주절 적어놓은 이유는 드라이버가 두 종류이기때문입니다.

Mellanox EN Driver for Linux
Mellanox OpenFabrics Enterprise Distribution for Linux (MLNX_OFED)

사실 둘 중 어느 것을 설치하여도 무방합니다. 저는 처음에 MLNX_OFED를 설치한 후 Port Type을 Ethernet으로 설정하여 사용하려고 했습니다. 그런데 뜻대로 되지 않아서 MLNX_EN을 설치하였습니다. OS에 맞는 프로그램을 다운받아서 압축을 풀면 설치와 관련한 shell인 install을 실행합니다. Kernel버전에 따라 아래와 같은 메시지를 접하는 경우가 많습니다. 찬찬히 읽어보고 하라는 대로 하면 됩니다.(^^)

mlnx_add_kernel_support.sh 을 실행해보니까 기대한 대로 동작하지 않아서 옵션을 추가하였습니다. 그리고 VMA를 사용하려고 할 경우에는 “–vma”를 추가합니다. 이렇게 설치명령을 한 결과입니다.

어떤 드라이버가 설치되었는지 확인을 하였습니다.

다음으로 어댑터의 포트가 어떻게 설정되었는지를 확인했습니다.

3.
이제 libvma.so를 사용할 때입니다. root 계정으로 실행해보니까 정상적으로 sockperf를 실행합니다.

사용하려는 프로그램이 zeroaos이기 때문에 일반계정으로 같은 명령어를 실행하였습니다. 예상외의 결과값이 나왔습니다.

아래 때문에 정상적으로 동작하지 않았습니다.

Offloaded resources are restricted to root or user with CAP_NET_RAW privileges

Mellanox의 문서를 보니까 아래의 문장이 있네요.

Option disable_raw_qp_enforcement is not supported in MLNX_OFED v5.1 and later, thus, libvma should have CAP_NET_RAW privileges to be used

좀더 잧아보니까 관련한 해결책이 있네요. VMA over RHEL 7.x with inbox driver의 일부분입니다.

Load libvma and run the app (as root): LD_PRELOAD=libvma.so

For running as user (as non root user): Set cap_net_raw for the executable. For example to use sockperf:

setcap cap_net_raw=ep /usr/bin/sockperf

Set special permission for library (SET_UID) and place in standard location (which libvma is now already). These steps are required when using LD_PRELOAD with capabilities set on executable.

chmod u+s /usr/lib64/libvma.so.8*

위의 명령어를 실행한 후 일반계정으로 실행하니까 원했던 결과가 나왔습니다.

앞서 CAP_NET_RAW과 관련한 문제외 다른 문제도 있었습니다.

사실 제일 어려웠던 문제였습니다. LD_PRELOAD와 관련한 검색이 제시한 해결책을 사용했지만 원하는 결과는 없습니다. 다시금 메뉴얼을 보니까 아래의 문장이 있었습니다.

Issue # 2: On running an application with VMA, the following error is reported:
ERROR: ld.so: object ‘libvma.so’ from LD_PRELOAD cannot be preloaded: ignored.
Solution: Check that libvma is properly installed, and that libvma.so is located in /usr/lib (or in /usr/lib64, for 64-bit machines)

정상적으로 설치하였던 “아니다”라고 프로그램이 말해서 혹시나 하는 마음으로 zeroaos계정으로 설치했습니다. 무슨 차이인지 모르지만 위 증상이 보이지 않았습니다.이상이 설치와 실행하면서 접한 시행착오들입니다. 도움이 되시길 바랍니다.

마지막으로 혹시나 하는 마음으로 Infiniband 프로그래밍과 관련한 기록을 남겨놓습니다.

InfiniBand 프로그래밍에 필요한 기본 개념
InfiniBand: An Introduction + Simple IB verbs program with RDMA Write

2 Comments

  1. 김종래

    저렴한 ConnectX-3 에서 해보려니까 힘드네요. onload 쓰던 solarflare 1/10 가격이라 해 보는 중인데 과연..

    Reply
    1. smallake (Post author)

      오랜만입니다.. 잘 될 겁니다…^^

      Reply

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.