DPDK:启动网卡

795 阅读1分钟

初始化/启动流程

  1. 通过struct rte_eth_conf确认需要打开的RX/TX功能设置
  2. rte_eth_dev_info_get()获得可以卸载到网卡的功能,如RSS相关的功能在flow_type_rss_offloads
  3. 将想要打开的功能和网卡具备的功能进行对比(&=)
  4. rte_eth_dev_configure()配置RX/TX队列数量以及struct rte_eth_conf信息
  5. rte_eth_dev_adjust_nb_rx_tx_desc()获取网卡支持的最大RX/TX队列长度
  6. 根据网卡支持的最大RX/TX队列长度,调用rte_eth_rx_queue_setup()设置RX队列的长度、mempool等
  7. rte_eth_dev_start()启动网卡
  8. rte_eth_add_rx_callback()为某个RX队列添加回调函数,例如这里添加了一个add_timestamp函数给每一个包添加时间戳。

image.png

网卡接收端的卸载能力

image.png

混杂模式promiscuous mode打开后,网卡收到目的MAC地址不是自己的MAC地址的包时,也会进行处理,否则会丢弃这个包。

rss_hf各个选项的含义

选项含义
ETH_RSS_IPV4使用IPv4的src/dst IP计算哈希
ETH_RSS_FRAG_IPV4分片的IPv4包用src/dst IP计算哈希
ETH_RSS_NONFRAG_IPV4_TCP非分片的IPv4 TCP包用src/dst port计算哈希(分片时只有第一个有端口号)
ETH_RSS_NONFRAG_IPV4_UDP非分片的IPv4 UDP包用src/dst port计算哈希(分片时只有第一个有端口号)

参考

  1. rss_hf的使用