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

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

作者: VChao | 来源:发表于2019-07-21 09:44 被阅读0次

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

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


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

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

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

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

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

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

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


多线程多队列单网卡发送

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


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

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

相关文章

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

    2019/07/21问题:项目中对发包过程没有使用DPDK,而且此时的多个队列要同时往一个网卡上进行发包。大致问题...

  • Java 官方计数器 CountdownLatch

    一个线程(或者多个),等待另外N个线程完成某个事情之后才能执行。是并发包中提供的一个可用于控制多个线程同时开始某个...

  • Java底层分析多线程行为

    多线程是指同时执行多个线程以提高应用程序的性能。 例如,处理大量信息的框架(如Spring批处理)使用线程来管理数...

  • 并发—高并发

    并发:多个线程操作相同的资源,保证线程安全,合理使用资源高并发:服务能同时处理很多请求,提高程序性能 线程安全性 ...

  • [OS] 进程管理 内存管理

    并发和并行 高并发: 提高了系统的利用率 并行: 多核计算机同时运行多个进程或线程, 提高了性能 进程和线程 进程...

  • Java并发基础

    并发:多个线程操作相同的资源,保证线程安全,合理使用资源 高并发:服务能同时处理很多请求,提高程序性能 (1230...

  • 2021-02-04 多线程

    为啥要并发 让多个任务同时执行 提高app运行的性能,保证App实时响应1因为UI界面运行在主线程之上,它是一个串...

  • 给ubuntu16.04做bond

      所谓bond,就是把多个物理网卡绑定成一个逻辑上的网卡,使用同一个IP工作,在增加带宽的同时也可以提高冗余性,...

  • CountDownLatch简介

    CountDownLatch是并发包中提供的一个可用于控制多个线程同时开始某动作的类,可以看做是一个计数器,计数器...

  • 线程核心之同步,死锁,交互

    同步 多个线程同时修改一个数据时(也叫并发操作),容易导致同步问题(同时修改),产生脏数据 解决方法 在多个线程同...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/ypirlctx.html