> 文档中心 > 2022年6月6日记:Linux服务器开发,King,DPDK环境与testpmd/l3fwd/skeletion

2022年6月6日记:Linux服务器开发,King,DPDK环境与testpmd/l3fwd/skeletion

推荐一个 零声学院 免费公开课程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习]
后台服务器:https://course.0voice.com/v1/course/intro?courseId=5&agentId=0


原理

2022年6月6日记:Linux服务器开发,King,DPDK环境与testpmd/l3fwd/skeletion
网卡对数据转发的功能是没有发挥出来的,所以可以把网卡放到应用程序中去处理。
巨页的用途是减少内存页的置换。
2022年6月6日记:Linux服务器开发,King,DPDK环境与testpmd/l3fwd/skeletion
将网卡到协议栈的线路down掉,通过ifconfig etho down命令。

dpdk编译完内核模块,需要经过哪三个步骤?

1、insmod igb_uio.ko 插入到内核里面
2、bind,pci-address绑定pci地址
3、open

一个net_dev对应一个网络适配器,或者说是网口。每一个网口都一个私有空间,用于接收发送数据。

struct rte_kni_device_info{char name[RTE_KNI_NAMESIZE];phys_addr_t tx_phys;phys_addr_t rx_phys;phys_addr_t alloc_phys;phys_addr_t free_phys;phys_addr_t req_phys;phys_addr_t resp_phys;phys_addr_t sync_phys'void * sync_va;void * mbuf_va;phys_addr_t mbuf_phys;}

通过ioctl传到了内核里面。

rte_knl_tx_burst(struct rte_kni *kni,struct tte_ml){num=RTE_MIN(kni_fifo_free_count(kni=>rx_q),num);void * phy_mbufs[num];unsigned int ret;unsigned int i;for(i=0;i<num;i++)phy_mbufs[i]=va2pa_all(mbufs[i]);ret=kni_fifo_put(kni->rtx_q,phy_mbufs,num);kni_free_mbufs(kni);return ret;}

站在内核的角度是收,站在dpdk的角度是发。我们只要去内核里去找,就好了。

dpdk的实际意义

  • a、虚拟机、路由器、虚拟网络设备
  • b、网管服务,代理
  • c、防火墙、网络安全领域
  • d、攻击、测试
    提升性能,防火墙的规则都可以控制。

PCI

2022年6月6日记:Linux服务器开发,King,DPDK环境与testpmd/l3fwd/skeletion
每个设备不一样的pci地址,就像动车的站,每一个站都有一个对应地址,每个地址都有一个设备。它是一个多设备复用总线,通过不同地址映射出来的。
内存池在接收的时候要用,在send时候我们也要用。

总结

本节课是King老师dpdk专题的第一节课,老师讲述对整体框架有一个了解就足够了,我觉得我对整体的思路还是有一个比较清晰的认识的。为了花团锦簇和雄兵百万,只能自己一人默默的忍受着孤独。今天居然不自觉的玩起了手游,真的是造孽啊!好啦,闲言碎语不要讲,开始下节课的学习了!再见。

开发者涨薪指南 2022年6月6日记:Linux服务器开发,King,DPDK环境与testpmd/l3fwd/skeletion 48位大咖的思考法则、工作方式、逻辑体系