文档章节

容器网络启用RDMA高速通讯-Freeflow

openthings
 openthings
发布于 2018/06/13 10:04
字数 1661
阅读 441
收藏 1

容器网络启用RDMA高速通讯-Freeflow

1、Freeflow简介

RDMA是一种网卡间直接高速互联的通讯机制。对比传统DMA的内部总线IO,RDMA通过网络在两个端点的应用软件之间实现buffer的直接传递;而对比传统的网络传输,RDMA又无需操作系统和协议栈的介入。RDMA可以轻易实现端点间的超低延时、超高吞吐量传输,而且基本不需要CPU、OS的资源参与,在高速网络环境下,不必再为网络数据的处理和搬移耗费过多资源。RDMA具有三大特性:CPU offload 、kernel bypass、zero-copy。详细架构和原理参见-https://www.cnblogs.com/zafu/p/8335200.html 。

Freeflow是一个高速的容器覆盖网络,通过启用RDMA通讯加速TCP socket达到物理链路级的传输速度。

Freeflow工作于流行的覆盖网络的上层,包括Flannel、Weave等解决方案。容器具有自己的virtual network interfaces 和 IP 地址,不需要直接访问硬件的 NIC interface。一个轻量级的Freeflow library 位于 containers之中,桥接RDMA 和 TCP socket APIs, 以及一个容器外的 Freeflow router帮助加速这些 APIs。

2、Freeflow的三种工作模式

Freeflow工作有三种模式:fully-isolated RDMA, semi-isolated RDMA, 以及 TCP。

当前释放的版本仅支持fully-isolated RDMA,提供了不同容器件的最好的隔离性,与 multi-tenant 环境工作良好。提供了典型的 RDMA performance (40Gbps带宽和1微秒时延), 这通过一些 CPU开销来实现。

我们未来将释放支持另外两种模式的版本。Semi-isolated RDMA 提供同样的 CPU 效率,作为bare-metal RDMA, 同时没有data path的full isolation。TCP mode 加速了TCP socket 的性能到与 bare-metal一样。在典型的Linux server,如果带有40Gbps NIC,达到 25Gbps 带宽,只需要单个TCP 连接,时延小于20微秒。

3、快速运行Freeflow演示

下面是在fully-isolated RDMA 模式下运行Freeflow的步骤:

  • Step 1: 启动Freeflow router (每一个server一个实例)。
sudo docker run --name router1 --net host -e "FFR_NAME=router1" -e "LD_LIBRARY_PATH=/usr/lib/:/usr/local/lib/:/usr/lib64/" -v /sys/class/:/sys/class/ -v /freeflow:/freeflow -v /dev/:/dev/ --privileged -it ubuntu:14.04 /bin/bash

然后 log into到router container,通过:

sudo docker run exec -it router1 bash

下载和安装与host主机同样版本的RDMA libraries 和 drivers。目前,Freeflow开发和测试通过 "MLNX_OFED_LINUX-4.0-2.0.0.1-ubuntu14.04-x86_64.tgz" ,你可以下载在:

然后,检出获取 libraries-router/librdmacm-1.1.0mlnx/的代码,Build 和 install 该library 到 /usr/lib/ (缺省目录)。

最后,检出获取 ffrouter/的代码,通过"build.sh"在源码目录Build,通过运行 "./router router1"。

  • Step 2: 重复Step 1,在其它的Host上启动router。你可以捕获router1的Docker image,用于避免重复building 和安装的过程。
  • Step 3: 在同一个host作为router1启动一个customer container:
sudo docker run --name node1 --net weave -e "FFR_NAME=router1" -e "FFR_ID=10" -e "LD_LIBRARY_PATH=/usr/lib" -e --ipc container:router1 -v /sys/class/:/sys/class/ -v /freeflow:/freeflow -v /dev/:/dev/ --privileged --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm -it ubuntu /bin/bash

你可以使用任何容器覆盖网络,本例子中我们使用Weave (https://github.com/weaveworks/weave)。

环境变量 "FFR_NAME=router1" 指向 container 到在同一个host的 router (router1) ;"FFR_ID=10" 是在 FreeFlow中的容器ID。同一个host中的每一个 container有一个独立的 FFR_ID。在下一版本中,FFR_ID 将被移除。

下载和安装与host主机同样版本的RDMA libraries 和 drivers。目前,Freeflow开发和测试通过 "MLNX_OFED_LINUX-4.0-2.0.0.1-ubuntu14.04-x86_64.tgz" ,你可以下载在:

然后,检出获取 libraries-router/librdmacm-1.1.0mlnx/的代码,Build 和 install 该library 到 /usr/lib/ (缺省目录)。

  • Step 4: 重复 Step 2在更多的host上启动 customer containers。你可以捕获router1的Docker image,用于避免重复building 和安装的过程。

注意:该版本的实现硬编码了 host IPs 和 virtual IP到 host IP 的映射,在  https://github.com/Microsoft/Freeflow/blob/master/ffrouter/ffrouter.cpp#L215 和 https://github.com/Microsoft/Freeflow/blob/master/ffrouter/ffrouter.h#L76。为了快速测试,你需要按照你的环境进行编辑。理想的实现方式,该router将从container overlay controller/zookeeper/etcd中读取出来。

  • Validation: 在 customer containers, 安装 RDMA 性能测试工具,通过 "sudo apt-get install perftest"。尝试 "ib_send_bw" 或 "ib_send_lat"。

4、Freeflow应用

对于 RDMA的应用,Freeflow 已经测试的平台包括 RDMA-based Spark (http://hibd.cse.ohio-state.edu/), HERD (https://github.com/efficient/HERD), Tensorflow with RDMA enabled (https://github.com/tensorflow/tensorflow) 以及 rsocket (https://linux.die.net/man/7/rsocket)。大部分应用不需要做任何修改(或很少修改)即可运行, 取得超过传统 TCP socket实现的性能。

对于 TCP,Freeflow 在很多applications/framework下进行了测试,包括 DLWorkspace (https://github.com/Microsoft/DLWorkspace) and Horovod (https://github.com/uber/horovod).

  • 联系开发者

该实现是一个研究原型,代码还未进入产品级状态。技术细节将通过科研论文出版,如果您感兴趣,欢迎到 Github提交issue或者直接联系下面的作者。

5、在Kubernetes部署FreeFlow插件

很多时候,在Kubernetes集群中的pod-to-pod网络带宽不如 host-to-host的好,有很多种原因的影响。 对于分布式的计算尤其是分布式机器学习中,网络带宽在很大程度上影响性能。为了优化 pod-to-pod 网络, FreeFlow plugin (https://github.com/Microsoft/Freeflow) 是非常有帮助的,而且只需要两个步骤就能使用。

部署FreeFlow为 DaemonSet

示范的yaml在 here。在yaml文件中,改变环境变量 HOST_IP_PREFIX 为实际的pods使用的 IP 范围。

kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: freeflowrouter
  namespace: default
spec:
  selector:
    matchLabels:
      freeflowrouter-node: pod 
  template:
    metadata:
      name: freeflowrouter
      labels:
        freeflowrouter-node: pod      
    spec:
      dnsPolicy: ClusterFirstWithHostNet 
      hostNetwork: true        
      containers:
      - name: freeflowrouter
        image: dlws/freeflow:0.16
        securityContext:
          privileged: true
        volumeMounts:
        - mountPath: /freeflow
          name: freeflow
        env:
        - name: HOST_IP_PREFIX
          value: 10.240.0.0/16
      volumes:
      - name: freeflow
        hostPath:
          path: /freeflow        
      tolerations:
      - key: CriticalAddonsOnly
        operator: Exists
      - key: node-role.kubernetes.io/master
        effect: NoSchedule           

创建启用FreeFlow的pod

示范的yaml在 here. 添加两个环境变量 LD_PRELOAD 和 VNET_PREFIX到 pod 定义中,如下所示。然后,改变环境变量VNET_PREFIX的值为实际的pods使用的 IP 范围。

containers:
      - name: tf-worker1
        image: tensorflow/tensorflow:1.8.0-gpu
        env:
        - name: LD_PRELOAD
          value: "/freeflow/libfsocket.so"
        - name: VNET_PREFIX
          value: 10.244.0.0/16

挂载 volume /freeflow,其中包含pod中用到的 FreeFlow library。

volumeMounts:
        - mountPath: /freeflow
          name: freeflow      
      volumes:
      - name: freeflow
        hostPath:
          path: /freeflow

现在,有了一个使用 FreeFlow来进行网络带宽加速的Kubernetes应用pods,保存为freeflow.yaml文件,使用kubernetes create -f freeflow.yaml即可部署到集群进行测试。

© 著作权归作者所有

openthings
粉丝 322
博文 1138
码字总数 687611
作品 1
东城
架构师
私信 提问
在Kubernets上使用RDMA

RDMA RDMA(全称RemoteDirect Memory Access) 它为了解决网络传输中服务器端数据处理的延迟而产生。 它的原理是将待传输的数据从一台计算机的内存,直接传输到另一台计算机的内存,整个传输过...

萧元
2018/11/05
0
0
构建Tensorflow RDMA的Docker镜像

RDMA是一个远程通讯技术,它通过Kernel bypass等方式降低数据传输中的延迟和CPU消耗。 在分布式训练中,由于多个Worker之间或者Worker和Paramater Server 之间需要大量传输模型变量。当GPU到...

萧元
01/29
0
0
CNA, FCoE,HBA等基础概念

FCoE:以太网光纤通道 (Fibre Channel Over Ethernet) 它是一个存储网络协议,允许在以太网上发送光纤通道帧, 且IP通信和光纤通道通信使用相同的以太网端口。 HBA:host bus adapter,主机总...

hNicholas
07/10
0
0
Ceph Upstream 添加 InfiniBand RDMA 互联支持

10月19日,国内软件定义存储企业XSKY开源了历时近1年时间研发的基于Ceph的IB RDMA互联支持,并且向Ceph社区提交了IB RDMA的协议栈代码。基于该部分代码,Mellanox研发部门表示也会参与其中,...

耿航-Devin
2016/10/21
4.6K
4
阿里云弹性计算-超级计算集群发布

产品介绍: 超级计算集群(SCC),面向高性能计算、人工智能/深度学习、科学/工程计算、数据分析、音视频处理,提供极致计算性能和并行效率、高速RDMA网络互联、弹性、安全的CPU和异构(GPU...

昀龙
2018/09/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么要在网站中应用CDN加速?

1. 网页加载速度更快 在网站中使用CDN技术最直接的一个好处就是它可以加快网页的加载速度。首先,CDN加速的内容分发是基于服务器缓存的,由于CDN中缓存了不少数据,它能够给用户提供更快的页...

云漫网络Ruan
36分钟前
7
0
亚玛芬体育(Amer Sports)和信必优正式启动合作开发Movesense创新

亚玛芬体育和信必优正式启动合作开发Movesense创新,作为亚玛芬体育的完美技术搭档,信必优利用Movesense传感器技术为第三方开发移动应用和服务。 Movesense基于传感器技术和开放的API,测量...

symbiochina88
47分钟前
4
0
创龙TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA核心板规格书

SOM-TL437xF是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA芯片设计的核心板,采用沉金无铅工艺的10层板设计,适用于高速数据采集和处理系统、汽车导航、工业自动化等领...

Tronlong创龙
47分钟前
4
0
好程序员Java学习路线分享MyBatis之线程优化

  好程序员Java学习路线分享MyBatis之线程优化,我们的项目存在大量用户同时访问的情况,那么就会出现大量线程并发访问数据库,这样会带来线程同步问题,本章我们将讨论MyBatis的线程同步问...

好程序员官方
53分钟前
6
0
IDEA 自定义方法注解模板

IDEA 自定义方法注解模板 1、使用效果 /*** 计算交易费用* @Author wangjiafang* @Date 2019/9/11* @param feeComputeVo* @return*/@PostMapping("/v1/fee_compute")public ApiResp......

小白的成长
53分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部