本文档一步一步教你如何在Intel平台上运行DPDK程序以获取最佳性能。

7.1. 硬件及存储需求¶

为了获得最佳性能,请使用Intel Xeon级服务器系统,如Ivy Bridge,Haswell或更高版本。

确保每个内存通道至少插入一个内存DIMM,每个内存通道的内存大小至少为4GB。 Note: 这对性能有最直接的影响。

可以通过使用 dmidecode 来检查内存配置:

dmidecode -t memory | grep LocatorLocator: DIMM_A1
Bank Locator: NODE 1
Locator: DIMM_A2
Bank Locator: NODE 1
Locator: DIMM_B1
Bank Locator: NODE 1
Locator: DIMM_B2
Bank Locator: NODE 1
...
Locator: DIMM_G1
Bank Locator: NODE 2
Locator: DIMM_G2
Bank Locator: NODE 2
Locator: DIMM_H1
Bank Locator: NODE 2
Locator: DIMM_H2
Bank Locator: NODE 2

上面的示例输出显示共有8个通道,从 AH,每个通道都有2个DIMM。

你也可以使用 dmidecode 来确定内存频率:

dmidecode -t memory | grep SpeedSpeed: 2133 MHz
Configured Clock Speed: 2134 MHz
Speed: Unknown
Configured Clock Speed: Unknown
Speed: 2133 MHz
Configured Clock Speed: 2134 MHz
Speed: Unknown
...
Speed: 2133 MHz
Configured Clock Speed: 2134 MHz
Speed: Unknown
Configured Clock Speed: Unknown
Speed: 2133 MHz
Configured Clock Speed: 2134 MHz
Speed: Unknown
Configured Clock Speed: Unknown

输出显示2133 MHz(DDR4)和未知(不存在)的速度。这与先前的输出一致,表明每个通道都有一个存储。

7.1.1. 网卡需求¶

使用 DPDK supported <http://dpdk.org/doc/nics> 描述的高端NIC,如Intel XL710 40GbE。

确保每个网卡已经更新最新版本的NVM/固件。

使用PCIe Gen3 插槽,如 Gen3 x8 或者 Gen3 x16 ,因为PCIe Gen2 插槽不能提供2 x 10GbE或更高的带宽。 可以使用 lspci 命令来检查PCI插槽的速率:

lspci -s 03:00.1 -vv | grep LnkStaLnkSta: Speed 8GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- ...
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+ ...

当将NIC插入PCI插槽时,需要查看屏幕输出,如 CPU0 或 CPU1,以指示连接的插槽。

同时应该注意NUMA,如果使用不同网卡的2个或更多端口,最好确保这些NIC在同一个CPU插槽上,下面进一步展示了如何确定这一点。

7.1.2. BIOS 设置¶

以下是关于BIOS设置的一些建议。不同的平台可能会有不同的名字,因此如下仅用于参考:

  1. 开始之前,请考虑将所有BIOS设置为默认值
  2. 禁用所有省电选项,如电源性能调整、CPU P-State, CPU C3 Report and CPU C6 Report。
  3. 选择 Performance 作为CPU电源及性能策略。
  4. 禁用Turbo Boost以确保性能缩放随着内核数量的增加而增加。
  5. 将内存频率设置为最高可用的值,NOT auto。
  6. 当测试NIC的物理功能时,禁用所有的虚拟化选项,如果要使用VFIO,请打开 VT-d if you wants to use VFIO.

7.1.3. Linux引导选项¶

以下是GRUB启动选项的一些建议配置:

  1. 使用默认的grub文件作为起点

  2. 通过grub配置保留1G的hugepage。例如,保留8个1G大小的页面:

    default_hugepagesz=1G hugepagesz=1G hugepages=8
    
  3. 隔离将用于DPDK的CPU core.如:

    isolcpus=2,3,4,5,6,7,8
    
  4. 如果要使用VFIO,请使用以下附加的grub参数:

    iommu=pt intel_iommu=on
    

7.2. 运行DPDK前的配置¶

  1. 构建目标文件,预留hugepage。参阅前面 在 Linux 环境中使用 Hugepages 描述。

    以下命令为具体过程:

    # Build DPDK target.
    cd dpdk_folder
    make install T=x86_64-native-linuxapp-gcc -j# Get the hugepage size.
    awk '/Hugepagesize/ {print $2}' /proc/meminfo# Get the total huge page numbers.
    awk '/HugePages_Total/ {print $2} ' /proc/meminfo# Unmount the hugepages.
    umount `awk '/hugetlbfs/ {print $2}' /proc/mounts`# Create the hugepage mount folder.
    mkdir -p /mnt/huge# Mount to the specific folder.
    mount -t hugetlbfs nodev /mnt/huge
    
  2. 使用命令 cpu_layout 来检查CPU布局:

    cd dpdk_folderusertools/cpu_layout.py
    

    或者运行 lscpu 检查每个插槽上的core。

  3. 检查NIC ID和插槽ID:

    # 列出所有的网卡的PCI地址及设备ID.
    lspci -nn | grep Eth
    

    例如,假设你的输入如下:

    82:00.0 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
    82:00.1 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
    85:00.0 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
    85:00.1 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
    

    检测PCI设备相关联的NUMA节点:

    cat /sys/bus/pci/devices/0000\:xx\:00.x/numa_node
    

    通常的,0x:00.x 表示在插槽0,而 8x:00.x 表示在插槽1。 Note: 为了说去最佳性能,请保证core和NIC位于同一插槽中。 在上面的例子中 85:00.0 在插槽1,因此必须被插槽1上的core使用才能获得最佳性能。

  4. 将测试端口绑定到DPDK兼容的驱动程序,如igb_uio。例如,将两个端口绑定到兼容DPDK的驱动程序并检查状态:

    # 绑定端口 82:00.0 和 85:00.0 到DPDK驱动
    ./dpdk_folder/usertools/dpdk-devbind.py -b igb_uio 82:00.0 85:00.0# 检查端口驱动状态
    ./dpdk_folder/usertools/dpdk-devbind.py --status
    

    运行 dpdk-devbind.py --help 以获取更多信息。

有关DPDK设置和Linux内核需求的更多信息,请参阅 使用源码编译DPDK目标文件 。

7.3. 网卡最佳性能实践举例¶

以下是运行DPDK l3fwd 例程并获取最佳性能的例子。使用 Intel 服务平台和Intel XL710 NICs。 具体的40G NIC配置请参阅i40e NIC指南。

本例场景是通过两个Intel XL710 40GbE端口获取最优性能。请参阅 Fig. 7.1 用于性能测试设置。

如何获取Intel平台上网卡的最佳性能,网卡与内存、cpu统一numa相关推荐

  1. 微星主板超频_微星垄断AMD、Intel平台内存超频记录 ITX小板惊人

    微星主板日前又创造了Intel平台的超频世界记录了,将内存频率进一步推向DDR4-5902MHz,更让人惊讶的是这次还是在微星Z390I GAMING EDGE AC这样一块ITX小板上创造的. 微星 ...

  2. 获取本机IP_考虑多网卡的情况

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  3. 本机获取Intel AMT IP地址的例子

    转自:http://software.intel.com/zh-cn/blogs/2009/02/10/intel-amt-ip/?cid=sw:51cto    Intel AMT的IP地址设置有两 ...

  4. ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程一(获取第三方平台access_token)...

    "出于安全考虑,在第三方平台创建审核通过后,微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,用于获取第三方平台接口调用凭据". ...

  5. 付费获取密码平台原理

    付费获取密码平台原理 故事开始 在网络上找一本书的pdf,通过一个网址找到了书籍对应的百度网盘的zip压缩包 开心得不得了,以为可以白嫖了pdf了 解压书籍,里面包含了一个zip加密压缩包(包含书籍p ...

  6. Intel万兆网卡,intel万兆双口网卡X540T2 性能解剖

    Intel万兆网卡的型号种类相对来说是比较丰富的,每款型号所拥有的性能也是不一样的,下面就和大家分享Intel万兆网卡中比较受欢迎的一款型号intel万兆双口网卡X540T2. intel万兆双口网卡 ...

  7. 硬件编解码开发 linux,Intel平台硬件加速视频编解码开发

    视频编解码分为硬件加速以及非硬件加速.硬件加速是指通过显卡,FPGA等硬件进行视频编解码,由于硬件有专门优化,所以性能高,能耗低,非硬件加速编解码是指通过CPU进行视频编解码,性能就没那么高(虽然有相 ...

  8. 外贸人获取LinkedIn平台邮箱的方法与技巧

    外贸人如何获取LinkedIn平台上大量的邮箱,无需在用领英也可用获取 相信做外贸的人都会使用Linkedin找人才资料,因为Linkedin平台是一个职业社交平台,使用的人都是公司的白领人士,而且L ...

  9. Intel平台计算机升级到22.60.0.6蓝牙驱动导致蓝牙不稳定,请卸载!

    由于蓝牙驱动更新导致华为蓝牙鼠标链接不稳定.这里设置驱动不自动更新.Intel平台计算机升级到22.60.0.6蓝牙驱动导致蓝牙不稳定,请卸载!

最新文章

  1. php 编译mcrypt,centos 6下编译安装php时安装mcrypt支持库
  2. 手机1像素线粗_豪威推出4800万像素手机传感器:1/2大底
  3. 编写高质量代码:改善Java的151个建议五(类、对象、方法)31-51
  4. PE学习(六)第六章 栈与重定位表 实例栈溢出、模拟加载器加载DLL、遍历重定位表
  5. 将原生安卓项目封装为cordova插件实例分析
  6. activity 和service通信,调用service方法
  7. linux sz命令详解,Linux rz和sz命令详解
  8. 6-5 奇数值结点链表 (20分)
  9. JVM 优化经验总结(原文已发表在IBM开发者论坛)
  10. 把视频解码为本地图片的简单方法
  11. 建设工程施工劳务分包合同
  12. 前端js实现京东轮播图
  13. SSL P2719 买礼物的艰辛
  14. FreeMaker一篇通
  15. Mac Terminal (终端) 使用ssh快速登录远程服务器
  16. 中科红旗卖身内幕:收购方放言不惜代价拿下
  17. 【前端】相对定位实现十字居中(上下左右居中)
  18. 1,JavaScript前世今生
  19. ArcBlock 将出席以太坊经典峰会 | ABT 预告
  20. crossorigin

热门文章

  1. 使用Glide加载https网址图片
  2. (伪代码)树的前中后遍历和层次遍历算法实现(考研适用,递归和非递归)
  3. 第十二届蓝桥杯 2021年国赛真题 (Java 大学A组)
  4. C# 操作Word书签,插入、删除书签
  5. deployment is out of date due to changes in tho underlying project contents
  6. keil中c语言问题汇总(佛科院——深夜学习)
  7. 微信小程序使用 wxParse 加载过慢问题
  8. Uber为何必须尽快上市:增长即将放缓
  9. c 中空格的asc码表_C语言常用转义字符表 和 ASCII码表完整版
  10. mysql中的rman备份与恢复_RMAN备份与恢复(二)--RMAN常用操作学习