---
title: OVS队列选择策略优化
description: "当虚拟机是多队列的场景下，虚拟机qperf时延工具运行所在的CPU可能和virtio-net input中断的CPU不在同一个上面，此时虚拟机会涉及IPI中断陷出，从而增加了时延开销。所以对于时延敏感型场景，可以更改OVS侧发包队列的选择逻辑，新增发送模式，当PMD接收到来自虚拟机的网络包时，记录其五元组信息以及队列ID。下次往虚拟机发送包时，根据对应五元组信息匹配到对应的队列ID，这样就可以尽可能地减少虚拟机IPI陷出的情况，减少网络收发包的时延。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/systuningguide/systemtg/kunpeng_shty_zn_64_009.html
sourcePath: /source/zh/kunpengcpfs/systuningguide/systemtg/kunpeng_shty_zn_64_009.html
indexId: 644c3eae9b92bac37bb3f25d19434635b980ac3478e4ccdff656fd4c8f3f21ce74
---
# OVS队列选择策略优化

当虚拟机是多队列的场景下，虚拟机qperf时延工具运行所在的CPU可能和virtio-net input中断的CPU不在同一个上面，此时虚拟机会涉及IPI中断陷出，从而增加了时延开销。所以对于时延敏感型场景，可以更改OVS侧发包队列的选择逻辑，新增发送模式，当PMD接收到来自虚拟机的网络包时，记录其五元组信息以及队列ID。下次往虚拟机发送包时，根据对应五元组信息匹配到对应的队列ID，这样就可以尽可能地减少虚拟机IPI陷出的情况，减少网络收发包的时延。

1. 下载DPDK 24.11源码。
  1 git clone https://github.com/DPDK/dpdk.git -b v24.11

  在DPDK 24.11源码目录的上级目录下载OVS 3.5源码。

  1 git clone https://github.com/openvswitch/ovs.git -b v3.5.0

2. 在DPDK 24.11源码目录的上级目录下载OVS队列选择优化补丁。
  1 git clone https://gitcode.com/boostkit/cloud-virtual.git

3. 将补丁打入OVS源码。以下命令在OVS源码的根目录下执行。
  1 git am --reject ../cloud-virtual/dpdk/dpdk-24.11/\[Virtualization_Loss_Optimization\]0001-Adding-a-new-transmission-mode-TXQ_REQ.patch

4. 编译DPDK。以下命令在DPDK源码的根目录下执行。
  1 2 3 4 meson --prefix=/usr --libdir=/usr/lib64 --bindir=/usr/bin --sbindir=/usr/sbin --includedir=/usr/include/dpdk build ninja -C build ninja -C build install ldconfig

  编译OVS。以下命令在OVS源码的根目录下执行。

  1 2 3 4 ./boot.sh ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libdir=/lib64 --enable-ssl --enable-shared --with-dpdk=shared make -j`nproc` make -j`nproc` install

5. 开启OVS队列选择优化。
  1 ovs-vsctl set Interface tap0 other_config:tx-steering=txfollowrx

  如需关闭，使用命令： 1 ovs-vsctl remove Interface tap0 other_config tx-steering
