![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dpdk
文章平均质量分 76
燕无鸻
这个作者很懒,什么都没留下…
展开
-
dpdk 网络数据包e1000和DMA
一 硬件布局:每个网卡(MAC)都有自己的专用DMA Engine,如上图的 TSEC 和 e1000 网卡intel82546。上图中的红色线就是以太网数据流,DMA与DDR打交道需要其他模块的协助,如TSEC,PCI controller以太网数据在 TSEC<–>DDR PCI_Controller<–>DDR 之间的流动,CPU的core是不需要介入的只有在数据流动结束时(接收完、发送完),DMA Engine才会以外部中断的方式告诉CPU的core二 dma eng转载 2021-08-19 15:13:15 · 1302 阅读 · 0 评论 -
关于pmd的几个流程图
虽然PMD是在用户态实现设备驱动,但还是依赖于内核提供的策略。其中uio模块,是内核提供的用户态驱动框架,而igb_uio是DPDK kit中拥有与uio交互,bind指定网卡的内核模块。当使用DPDK脚本dpdk-devbind来bind网卡时,会通过sysfs与内核交互,让内核使用指定驱动来匹配网卡。具体的行为向/sys/bus/pci/devices/(pci id)/driver_override写入指定驱动名称,或者向/sys/bus/pci/drivers/igb_uio(驱动名称)/new_转载 2021-08-04 18:32:24 · 625 阅读 · 0 评论 -
关于pci 驱动的几个接口
err = pci_set_dma_mask(dev, DMA_BIT_MASK(64)); if (err != 0) { dev_err(&dev->dev, "Cannot set DMA mask\n"); goto fail_release_iomem; }pci_set_dma_mask()和dma_set_mask()辅助函数用于检查总线是否可以接收给定大小的总线地址(mask),如果可以,则通知总线层给定的外围设备将使用该大小的总线地址err = pc.原创 2021-08-03 14:13:43 · 1794 阅读 · 0 评论 -
dpdk 网卡队列初始化 + 收发包
ixgbe_dev_rx_queue_start 设置好dma地址 IXGBE_WRITE_REG(hw, IXGBE_RDH(rxq->reg_idx), 0); IXGBE_WRITE_REG(hw, IXGBE_RDT(rxq->reg_idx), rxq->nb_rx_desc - 1);recv{ rxdp = &rx_ring[rx_id]; /* 若网卡回写的DD为0,跳出循环 */ stater.转载 2021-06-16 09:21:49 · 2096 阅读 · 0 评论