DPDK 尝试(1)-开发一个小型dns服务
最近的学习暂时告一段落,一直看下去,不动手实操也不会有什么实际体验,还得是手写代码来走进每一个步骤才行。准备利用dpdk前面的知识,来尝试开发一个小型的dns服务,暂时名为mdns-D。
这一篇就用来记录中途碰见的问题和怎么解决它们的。
port_init
前面仿照着example写下来,先默认4个lcore和2个nic可用。碰到第一个问题,rte_eth_dev_configure
中的最后一个参数const struct rte_eth_conf * eth_conf
该怎么去理解和配置呢?
这里还得是直接去看源码,这个结构如下,一个个的来看就行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct rte_eth_conf {
uint32_t link_speeds;
struct rte_eth_rxmode rxmode;
struct rte_eth_txmode txmode;
uint32_t lpbk_mode;
struct {
struct rte_eth_rss_conf rss_conf;
struct rte_eth_vmdq_dcb_conf vmdq_dcb_conf;
struct rte_eth_dcb_rx_conf dcb_rx_conf;
struct rte_eth_vmdq_rx_conf vmdq_rx_conf;
} rx_adv_conf;
union {
struct rte_eth_vmdq_dcb_tx_conf vmdq_dcb_tx_conf;
struct rte_eth_dcb_tx_conf dcb_tx_conf;
struct rte_eth_vmdq_tx_conf vmdq_tx_conf;
} tx_adv_conf;
uint32_t dcb_capability_en;
struct rte_eth_intr_conf intr_conf;
};
rxmode
该结构体定义如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct rte_eth_rxmode {
enum rte_eth_rx_mq_mode mq_mode;
uint32_t mtu;
uint32_t max_lro_pkt_size;
/**
* Per-port Rx offloads to be set using RTE_ETH_RX_OFFLOAD_* flags.
* Only offloads set on rx_offload_capa field on rte_eth_dev_info
* structure are allowed to be set.
*/
uint64_t offloads;
uint64_t reserved_64s[2];
void *reserved_ptrs[2];
};
这里重点关注这个mq_mode
即MultiQueue-mode。可用的选项包含如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
enum rte_eth_rx_mq_mode {
RTE_ETH_MQ_RX_NONE = 0,
RTE_ETH_MQ_RX_RSS = RTE_ETH_MQ_RX_RSS_FLAG,
RTE_ETH_MQ_RX_DCB = RTE_ETH_MQ_RX_DCB_FLAG,
RTE_ETH_MQ_RX_DCB_RSS = RTE_ETH_MQ_RX_RSS_FLAG | RTE_ETH_MQ_RX_DCB_FLAG,
RTE_ETH_MQ_RX_VMDQ_ONLY = RTE_ETH_MQ_RX_VMDQ_FLAG,
RTE_ETH_MQ_RX_VMDQ_RSS = RTE_ETH_MQ_RX_RSS_FLAG | RTE_ETH_MQ_RX_VMDQ_FLAG,
RTE_ETH_MQ_RX_VMDQ_DCB = RTE_ETH_MQ_RX_VMDQ_FLAG | RTE_ETH_MQ_RX_DCB_FLAG,
RTE_ETH_MQ_RX_VMDQ_DCB_RSS = RTE_ETH_MQ_RX_RSS_FLAG | RTE_ETH_MQ_RX_DCB_FLAG |
RTE_ETH_MQ_RX_VMDQ_FLAG,
};
- RSS:Receive Side Scaling。接收端缩放,一种软件技术来通过hash散列,将不同连接交付给不同的cpu进行处理。更多的设置可以通过
rte_eth_conf.rx_adv_conf.rte_eth_rss_conf
来进行操作。 - DCB:Data Center Bridge。还没看。
- VMDQ。Virtual Machine Device Queues。还没看。
This post is licensed under CC BY 4.0 by the author.