DPDK 应用程序开机后首次运行发送数据不成功,第二次运行就可以,为什么?下面是部分代码,帮忙看看。
static void port_init(struct rte_mempool *mbuf_pool)
{
g_dpdkPortId = 0;
while (g_dpdkPortId < RTE_MAX_ETHPORTS &&
rte_eth_devices[g_dpdkPortId].data->owner.id != RTE_ETH_DEV_NO_OWNER)
{
g_dpdkPortId++;
}
if (g_dpdkPortId == RTE_MAX_ETHPORTS)
{
rte_exit(EXIT_FAILURE, "There were no DPDK ports free.\n");
}
const int num_rx_queues = 1;
const int num_tx_queues = 1;
struct rte_eth_conf port_conf = port_conf_default;
if (rte_eth_dev_configure(g_dpdkPortId, num_rx_queues, num_tx_queues, &port_conf))
{
rte_exit(EXIT_FAILURE, "rte_eth_dev_configure() failed.\n");
}
if (rte_eth_tx_queue_setup(g_dpdkPortId, DPDK_QUEUE_ID_TX, TX_RING_SIZE,
rte_eth_dev_socket_id(g_dpdkPortId), NULL) < 0)
{
rte_exit(EXIT_FAILURE, "Couldn't setup TX queue.\n");
}
if (rte_eth_rx_queue_setup(g_dpdkPortId, DPDK_QUEUE_ID_RX, RX_RING_SIZE,
rte_eth_dev_socket_id(g_dpdkPortId), NULL, mbuf_pool) < 0)
{
rte_exit(EXIT_FAILURE, "Couldn't setup RX queue.\n");
}
if (rte_eth_dev_start(g_dpdkPortId) < 0)
{
rte_exit(EXIT_FAILURE, "Device start failed.\n");
}
}
int main(int argc, char *argv[])
{
struct timeval api_start_time, api_stop_time;
int i, j, ret;
uint32_t tx_count = 0;
uint32_t PKG_SIZE = 2048;
uint32_t SEND_TIMES = 10000000;
if (rte_eal_init(argc, argv) < 0)
{
rte_exit(EXIT_FAILURE, "Error with EAL initialization\n");
}
struct rte_mempool *mbuf_pool = rte_pktmbuf_pool_create("MBUF_POOL", NUM_MBUFS,
MBUF_CACHE_SIZE, 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
if (!mbuf_pool)
{
rte_exit(EXIT_FAILURE, "Couldn't create mbuf pool\n");
}
port_init(mbuf_pool);
}