前提条件:隔离CPU
隔离CPU可以防止Linux调度程序将任务和进程分配给CPU。 是非常有用的方式。
一旦taskset命令,cset命令或其他利用CPU亲和性系统调用(syscall)的软件将进程和任务手动分配给这个CPU。
隔离CPU对流量测试很重要,因为这样可以使OvS占用尽可能多地执行时间。 如果您的Arm系统已经有隔离的内核,并且系统配置与以下类似,则可以跳过本环节,从“Hugepage配置”环节开始即可。
1. 使用lscpu命令检查系统上的CPU内核数。我的N1SDP平台输出如下:
2. 将“ isolcpus”内核引导参数添加到/etc/default/grub 文件中的GRUB_CMDLINE_LINUX选项中。 我已经隔离了系统上的3个CPU内核,从CPU内核1到CPU内核
3. 最好将nohz_full 和rcu_nocbs 引导参数也添加到GRUB_CMDLINE_LINUX选项中进一步减少对CPU的干扰。 如果一个CPU在nohz_full 参数下被列出,则内核将停止向这个CPU发送计时器滴答声,从而使CPU花费较少的时间来处理中断和上下文切换。使用 rcu_nocbs 参数让CPU在“无RCU回调”模式下运行,即将回调转移给“housekeeping CPU”处理
4. 运行update-grub 更新核配置。
5. Reboot你的系统。系统启动后,检查CPU内核是否已经被隔离。
Hugepage配置
1. 您需要配置并分配hugepage才能成功用DPDK运行OvS。大多数Arm系统支持2MB或者1GB的hugepage大小。
使用sysctl命令进行2MB hugepage的运行时分配。
因为我们在运行时分配hugepage,hugepage的配置将不会在reboot后保留。您可以编辑
文件使hugepage分配可以在reboot后永久保留。
如果您的系统支持1GB作为默认的hugepage大小,那么系统boot后将无法保留hugepage。您可以编辑/etc/default/grub 文件添加用于保留1GB hugepage的内核引导参数:
在编辑完文件和reboot系统使更改生效后运行update-grub。您可以使用以下命令来验证hugepage的配置:
对于1GB的 hugepage,最好可以在系统第一次boot时或者在系统第一次boot后不久分配hugepage。这样可以防止物理内存碎片化,同时确保为hugepage分配连续的内存段。
2. 一旦分配好了hugepage,需检查hugepage是否已经被安装。如果看到以下输出,说明hugetlbfs已被安装而无需重装。
DPDK设置
1. 加载vfio-pci 内核模块。
2. 当我使用英特尔网络接口卡(NIC)时,我需要把接口(连在流量生成器)绑定到vfio 驱动。如果使用其他类型的NIC,可以跳过此步骤。 请检查NIC的制造商。 可以用以下第一个命令观察NIC的PCIe地址:
OvS设置
1. 终止任何现有的OvS守护进程和上次运行时生成的文件来清理OvS环境。
2. 创建OvS守护进程的目录。只需在首次设置PHY-PHY测试时执行此步骤。
3. 设置环境变量
4. 在启动ovs-vswitchd 之前,您需要启动它的数据库配置,ovsdb-server。在启动数据库之前,需要配置一个被ovsdb-server 使用的数据库。
5 配置ovsdb-server 来使用前一步所创建的数据库,以便侦听Unix域套接字,并连接到数据库中指定的任意管理器。
OVS的DPDK配置
1. 在启动ovs-vswitchd 之前,您需要启动它的数据库配置,ovsdb-server。在启动数据库之前,需要配置一个被ovsdb-server 使用的数据库。
2. 用ovs-vsctl初始化数据库。仅需在使用ovsdb-tool创建数据库后初始化一次,就可以在任意时刻运行。ovs-vswitchd需要一些额外的配置才能启用DPDK的功能。可以通过OvS表的other_config 列将DPDK配置参数传递给ovs-vswitchd 。 至少必须将dpdk-init 选项设置为true或try。所有未明确设置的配置选项都被提供默认值。
对于流量测试,必须为pmd-cpu-mask 参数分配一个隔离的CPU。借助以下命令检查系统上隔离的CPU:
在我的N1SDP平台上,我发现CPU1-3是被隔离的。因此,我可以将CPU 2设置为0x04将它分配给pmd-cpu-mask 参数
3. 启动主Open vSwitch Daemon,让它连接到先前创建的同一Unix域套接字。
如果DPDK初始化成功,那么以下日志项将被显示:
PHY-PHY配置
1. 添加Userspace brisge [YS1] [Ben Song2] 。 ovs-vsctl 命令可用于此目的。 应该使用与DPDK数据路径相对应的datapath_type=netdev 创建网桥。
2. 添加两个DPDK端口。ovs-vsctl 命令也可以用于此目的。
此时,可以使用以下命令查看网桥以及与网桥相关联的端口配置情况:
3. 调出网桥及其接口。
4. 添加测试流以便在DPDK端口之间转发数据包。流被成功配置后可以看到传输到任一端口的流量在另一端口返回。
此时,PHY-PHY测试的设置已全部完成,现在要做的就是配置流量发射器给DUT发送流量。
结束语
本文提供了有关如何为PHY-PHY测试使用DPDK设置OvS的分步教程。本文介绍的设置方法主要来自OvS官方文档,但着重介绍了与hugepage和OvS的DPDK配置相关的一些重要点。 这将有助于避免潜在的问题从而获得最佳的流量测试环境。
|