问题:多个线程同时往一个网卡发包,如何提高性能

2019/07/21
问题:项目中对发包过程没有使用DPDK,而且此时的多个队列要同时往一个网卡上进行发包。大致问题就是这样,虽然如果使用DPDK会好很多,但这个算是历史遗留问题吧,只能就现在这种情况,尽可能来提高性能。

这里场景还是没有说清楚,项目中使用的发包函数是libnet提供的,也就是说我如果是发包的话,必然是要走系统网络内核的。


我来仔细梳理一下,针对这个问题的几个难点。
(只考虑多个进程发包,不管别的)

  1. 利用什么工具来衡量发包的性能,除了在程序内部记录相关数据,还有什么别的方式吗
  2. 从哪些角度来发现发包的瓶颈。
    现在比较尴尬的地方,就是也不知道从什么地方来验证,也不知道从什么来地方来查看。
    目前为止能用的手段就是一个查看系统的中断数;我还是希望能知道,就是如果采用这种发包方式,怎么样才能尽可能保证性能最优。

其实说到现在都没有说到重点,还是说自己对这部分的性能调优不太理解。
既然找不到可说的内容,说明对这部分的内容的确很薄弱,就把能有的一些想法都列举出来,尝试这种这些名目中找到一些可以优化的内容。

  • 本次发包过程中使用的函数,libnet_write底层是用的sendto,这个函数默认是阻塞的。但是尝试了修改这部分代码,并没有什么效果,所以这也是很尴尬。(但要说明的情况是,当时是为了减缓丢包的数量进行的修改,修改后丢包情况并没有减少,所以说到底是不是呢,也不好说)
  • 多个线程同时发包(底层用的是同一个网卡),是不是存在抢系统调用的情况,但这种情况怎么来看
  • 多个线程同时发包,网卡可以实现多队列,是不是可以从这个地方进行优化

上面的说法还是不够具体,来从函数调用的流程来说明下这个情况。

  1. 一个线程调用sendto这个系统调用;
  2. sendto调用一些底层的函数,包括什么我就不管了,但是他到了底层网卡驱动的时候,是什么情况
  3. 多个线程,同时发包,是否调用多个队列,那么多个队列是否是不同的终端?
  4. 如果队列和发包线程数量不太对称怎么办?

如此说来,我应该重点关注的是,在网卡发包部分的这个系统调用是怎么分配的,是不是说他们有冲突。


多线程多队列单网卡发送

上午简单翻了一下网卡模块那本数,发现这里面的关系远比我想象中的要复杂的多,所以要从中找出关键的部分:系统调用的过程、网卡队列的分配。


当前的运行状态是配置的单队列,但是是十多个线程同时利用这个网卡进行发包,在中断部分的统计数据上看只有一个核在工作一样,所以这里的数据又说明了什么信息。

这样看来,我需要进一步了解的信息,包括发包过程是利用了什么过程,按理说中断过程应该只为收包服务的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值