芊芊君子 發表於 2023-10-29 14:49:00

【问题复盘】在Ubuntu 20.04下安装OFED驱动

<h2 id="复盘在ubuntu-2004下安装ofed驱动">复盘:在Ubuntu 20.04下安装OFED驱动</h2>
<h3 id="起因">起因</h3>
<p>最近收到两台服务器,都搭载了ConnectX-5 EX网卡。由于供应商预装了Ubuntu 20.04操作系统,而我们的后端代码也是基于Ubuntu开发的,因此需要在Ubuntu上安装ConnectX-5网卡的驱动。</p>
<h3 id="问题">问题</h3>
<p>尽管供应商已经预装了驱动,但运行我们的服务时出现以下错误:</p>
<pre><code class="language-shell">EAL: /lib/x86_64-linux-gnu/libmlx5.so.1: version `MLX5_1.15' not found (required by so/x86_64/libmlx5-64.so)
EAL: FATAL: Cannot init plugins
EAL: Cannot init plugins
</code></pre>
<h3 id="分析">分析</h3>
<p>首先怀疑OFED驱动是否已安装,通过运行命令<code>ibv_devinfo</code>查看网卡信息,确认驱动已安装。</p>
<p>按照手册的说法,我们想用英伟达网卡跑TRex那就必须在centos的特定版本下使用,版本对应关系如下:</p>
<table>
<thead>
<tr>
<th><strong>TRex 版本</strong></th>
<th><strong>OFED</strong></th>
<th>操作系统</th>
</tr>
</thead>
<tbody>
<tr>
<td>2.32及以下</td>
<td><strong>only</strong> 4.1</td>
<td>CentOS 7.3</td>
</tr>
<tr>
<td>2.33-2.56</td>
<td><strong>only</strong> 4.3</td>
<td>CentOS 7.4</td>
</tr>
<tr>
<td>2.57和v2.86</td>
<td><strong>only</strong> 4.6</td>
<td>CentOS 7.6</td>
</tr>
<tr>
<td>2.89及以上</td>
<td><strong>only</strong> GA 5.3-1</td>
<td>CentOS 7.9</td>
</tr>
</tbody>
</table>
<p>https://trex-tgn.cisco.com/trex/doc/trex_appendix_mellanox.html#_upgrade_procedure</p>
<p>然后注意到根据文档,使用NVIDIA网卡运行TRex需要特定版本的CentOS和OFED驱动。针对MCX516A系列网卡,需要下载OFED 5.x,并配套使用TRex 2.89版本。</p>
<p>决定重新安装驱动,因为不清楚供应商预装的驱动版本是否有问题。</p>
<p>下载OFED驱动:</p>
<pre><code>https://www.mellanox.com/page/mlnx_ofed_eula?mtag=linux_sw_drivers&amp;mrequest=downloads&amp;mtype=ofed&amp;mver=MLNX_OFED-5.4-3.7.5.0&amp;mname=MLNX_OFED_LINUX-5.4-3.7.5.0-ubuntu20.04-x86_64.tgz
</code></pre>
<img src="https://img2023.cnblogs.com/blog/2382229/202310/2382229-20231029145007593-1615908181.png" alt="image-20231029141524102" style="zoom: 50%">
<p>按以下步骤安装:</p>
<pre><code class="language-shell">tar -xf MLNX_OFED_LINUX-5.4-3.7.5.0-ubuntu20.04-x86_64.tgz
cd MLNX_OFED_LINUX-5.4-3.7.5.0-ubuntu20.04-x86_64

sudo ./mlnxofedinstall --with-mft --with-mstflint --dpdk --upstream-libs
</code></pre>
<p>安装过程中遇到问题:<br>
在安装<code>mlnx-ofed-kernel-dkms</code>时失败,出现类似以下提示信息:</p>
<pre><code class="language-log">Error: mlnx-ofed-kernel-dkms installation failed!
Collecting debug info...

See:
        /tmp/MLNX_OFED_LINUX.1976.logs/mlnx-ofed-kernel-dkms.debinstall.log
Removing newly installed packages...
</code></pre>
<p>查看日志发现以下提示信息:</p>
<pre><code class="language-log">Copying build sources from '/var/lib/dkms/mlnx-ofed-kernel/5.4/build/../build' to '/usr/src/ofa_kernel/5.15.0-58-generic' ...
/bin/cp: cannot stat 'Module*.symvers': No such file or directory
</code></pre>
<p>关键词是<code>5.15.0-58-generic</code>,即内核版本可能存在问题。</p>
<p>现有的安装方式在某些地方找不到对应的安装文件。</p>
<p>尝试复制报错中提到的文件到相应位置,但并未解决问题,因此决定尝试更换内核版本。</p>
<p>升级系统软件库和内核:</p>
<pre><code class="language-bash">apt-get install build-essential dkms
</code></pre>
<p>这个过程较慢,并且在安装升级<code>dkms</code>时出现错误,进一步证实问题可能是由当前内核版本引起的。</p>
<p>通过搜索得知,Ubuntu 20.04 + 5.4内核可以使用MLNX_OFED_LINUX-4.9-6.0.6.0驱动。</p>
<p>而Ubuntu 20.04 + 5.15内核只能使用默认版本的4.0驱动。</p>
<p>在这篇博客中,作者的系统为Ubuntu 20.04,通过安装最新版的MLNX_OFED_LINUX-5.8-3.0.7.0成功解决了类似问题。</p>
<p>由于我们的系统内核版本也是5.15(似乎5.15是Ubuntu 20.04的默认内核版本),决定尝试安装最新的OFED驱动,看是否能解决问题。</p>
<p>果然,在安装MLNX_OFED_LINUX-5.8-3.0.7.0时,<code>mlnx-ofed-kernel-dkms</code>成功安装。</p>
<p>问题解决。</p>
<h3 id="总结">总结</h3>
<p>整个问题主要是由于不同的内核版本导致文件路径不同,进而导致安装过程中某些库无法按预期安装而出现问题。</p>
<p>为什么使用最新的OFED驱动解决了问题呢?推测是最新驱动补充了之前缺失的某些文件,因此后续安装过程能够正常进行。</p>
<blockquote>
<p>例如,在OFED 5.4中,某个安装所需的文件F位于A处,但安装程序却在B处查找该文件,导致报错。而在OFED 5.8中,该安装所需的文件F被移回到B处,此时不管去哪里查找都能找到文件F,因此安装可以正常进行。</p>
</blockquote>
<p>ref:</p>
<p>1、https://skyao.io/learning-ubuntu-server/docs/router/update-drivers.html</p>
<p>2、https://blog.csdn.net/weixin_45485072/article/details/132892799</p><br><br>
来源:https://www.cnblogs.com/DAYceng/p/17795885.html
頁: [1]
查看完整版本: 【问题复盘】在Ubuntu 20.04下安装OFED驱动