一、简介
二、Ubuntu 14安装SoftRoce
2.1、编译内核
-
我使用的是 Ubuntu 14.04,内核版本为:
-
安装 新版本的内核
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux
下载成功:
Cloning into ‘linux’…
remote: Counting objects: 5548596, done.
remote: Compressing objects: 100% (498423/498423), done.
remote: Total 5548596 (delta 403806), reused 0 (delta 0)
Receiving objects: 100% (5548596/5548596), 1.03 GiB | 292.00 KiB/s, done.
Resolving deltas: 100% (4638969/4638969), done.
Checking out files: 100% (56233/56233), done. -
下载完成后,多出一个linux 文件夹来,进入
-
在linux目录下,执行
cp /boot/config-4.4.0-142-generic .config
,注意这里要拷贝的config- 后面的内容要和自己机器的linux内核版本一致 -
执行以下命令:
apt-get install ncurses-dev
apt-get install bison
apt-get install flex
add-apt-repository ppa:ubuntu-toolchain-r/test #添加gcc源
apt-get update
apt-get install gcc-5 g++5
ls /usr/bin/gcc*
#将5的优先级设为100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 100
#原来的4.8也设为100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
#切换gcc,切换为5
update-alternatives --config gcc
-
执行
make menuconfig
-
在打开的界面执行下面的操作
1、 按“ /”:这将为您打开一个文本字段(搜索)
2、 输入“ rxe”和“确定”
3、 按“ 1”转到“以太网RDMA软件(ROCE)驱动程序”
4、 按“空格”启用“以太网RDMA软件(ROCE)驱动程序”。 您应该在其前面看到“ ”
5、 使用键盘上的向右箭头转到“保存”,然后按“ Enter”
6、 按“ Enter”将文件另存为“ .config”文件
7、 按“ Enter”退出
8、 回到主界面,选择最下面的kernel hacking
9、 选择第二行的 Compile-time checks and compiler options
10、点击 Enter 进入后,修改 Warn for stack frames larger than 的值为4096 (点击enter,在输入框中输入4096),点击ok
11、向右箭头 选择 save
12、内核编译时的gdb信息我也关闭了, 即Kernel hacking > Compile-time checks and compiler options
,将“Compile the kernel with debug info”
选项去掉
13、使用右箭头转到“退出”,然后反复按“exit”,直到退出向导。 -
make –j $(nproc)
,$(nproc)表示当前机器的线程数目,make -j为并行编译,即用当前机器的内核线程数目的线程来并行make。可能会提示少一些库或者文件,然后去按照错误提示安装对应的库即可。例如我安装了以下几个:apt-get install libelf-dev
,解决缺少 gelf.h 头文件apt-get install openssl
和apt-get install libssl-dev
解决缺少opensslv.h- 我这里由于 Makefile 文件的配置,make 的时候会将warning当作error,导致编译退出,所以通过vim编辑 Makefile,找到
KBUILD_CFLAGS
这个选项,添加KBUILD_CFLAGS += -w
禁用将warning 当作 error
-
make modules_install
-
make install
-
前两步我没遇到什么坑,所以如果出错,请自己百度。成功之后,重启机器
-
重启之后,查看内核信息以及RDMA信息
2.2、安装用户库
- 克隆用户库:
git clone https://github.com/linux-rdma/rdma-core.git
,如果连接不上,则执行git clone git://github.com/linux-rdma/rdma-core.git
- 安装 cmake,
apt-get install cmake
apt-get install valgrind pandoc python-docutils libnl-3-dev libnl-route-3-dev libibverbs-dev libswitch-perl rdmacm-utils ibverbs-utils systemd libudev-dev librdmacm-dev libsystemd-journal0 cython
- 进入 rdma_core目录,执行
bash build.sh
- 进入build目录,执行 make install
三、Ubuntu 18安装Soft Roce
由于Ubantu 18默认开启了Soft Roce支持,所以不需要重新编译内核,直接安装用户库即可。
- 安装 Ubuntu 18,sudo passwd root 设置root用户
apt install git
- 安装用户库:
apt-get install libibverbs-dev librdmacm-dev rdma-core
apt install vim maven make g++
- 安装jdk,下载 jdk (我使用的 jdk1.8),解压
tar -xzvf jdk-8u301-linux-x64.tar.gz -C /usr
,编辑 /etc/profile,添加以下环境变量:
export JAVA_HOME=/usr/jdk1.8.0_301 #这里是你自己的jdk所在路径
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
source /etc/profile
,执行 java -version 和 javac,看是否有相应输出- 如果此时显示的是 ubuntu自带的open jdk,则使用如下命令:
sudo update-alternatives --install /usr/bin/java java /usr/jdk1.8.0_301/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/jdk1.8.0_301/bin/javac 300
sudo update-alternatives --install /usr/bin/jar jar /usr/jdk1.8.0_301/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /usr/jdk1.8.0_301/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /usr/jdk1.8.0_301/bin/javap 300
#切换为自己安装的jdk版本
sudo update-alternatives --config java
sudo update-alternatives --config javac
-
安装 java disni库:
git clone https://github.com/zrlio/disni
,如果连接不上,则用git clone git://github.com/zrlio/disni
-
mvn -DskipTests install
-
cd libdisni
-
apt-get install autoconf automake libtool
-
apt-get install libffi-dev
-
./autoprepare.sh
-
./configure --with-jdk=$JAVA_HOME
-
make install
,如果提示缺少 jni.h 和 jni_mod.h 头文件,则执行以下命令:cp /usr/jdk1.8.0_301/include/jni.h /usr/include/
cp /usr/jdk1.8.0_301/include/linux/jni_md.h /usr/include/
-
export LD_LIBRARY_PATH=/usr/local/lib
-
cd ../target
,从libdisni目录 进入disni目录下的target -
启动 soft-roce ,首先
rxe_cfg start
,再执行rxe_cfg add ens33
,注意最后的网卡名要和自己本机的网卡一致 -
执行
rxe_cfg status
,显示如下:
-
java -cp disni-2.1-jar-with-dependencies.jar:disni-2.1-tests.jar com.ibm.disni.examples.SendRecvServer -a 192.168.220.139
,这里的ip填写自己的ip地址 -
java -cp disni-2.1-jar-with-dependencies.jar:disni-2.1-tests.jar com.ibm.disni.examples.SendRecvClient -a 192.168.220.139
,注意 ip地址是服务器的ip -
显示如下,则表示成功。
引用
error: Can’t find expat.h. 缺libexpat1-dev库
sudo apt-get install libexpat1-dev
1
No package ‘pciaccess’ found
sudo apt-get install libpciaccess-dev
1
2
3
No package ‘libxml-2.0’ found
apt-get install libxml2-dev
1
error: bison not found
sudo apt-get install bison
1
flex not found
sudo apt-get install flex
1
No module named mako
sudo apt-get install python-mako
1
No package ‘xcb-composite’ found
No package ‘xcursor’ found
No package ‘cairo-xcb’ found
sudo apt-get install libxcb-shm0-dev
sudo apt-get install xcb
sudo apt-get install libxcursor-dev
sudo apt-get install libcairo2-dev