当前位置: 技术问答>linux和unix
请高手指点,关于linux系统网络收发性能的问题
来源: 互联网 发布时间:2016-04-24
本文导语: 我的试验环境是一个多核cpu,安装的linux2.6.14.7内核版本 测试一:用1个1000M网卡处理网络收发,通过0核0线程接收网络收发的中断,然后启用30 ftp client任务(调用内核提供的ftpget,但是目标文件为/dev/null,目的是不...
我的试验环境是一个多核cpu,安装的linux2.6.14.7内核版本
测试一:用1个1000M网卡处理网络收发,通过0核0线程接收网络收发的中断,然后启用30 ftp client任务(调用内核提供的ftpget,但是目标文件为/dev/null,目的是不在本地做写文件的操作)进行文件下载
此时测试发现:0核0线程 的cpu(top 命令中的si)项占用60%,统计此时的下载速度达到112MB/s(1Gbps),相当于将1个1000M网卡跑满了。
此时,我修改成用1核的0线程来处理收发包的中断,其他条件不变,下载速度也能跑满1个1000M网口,但是此时1核0线程的CPU占用si的平均值为90%
1.不知道这两种情况下,CPU占用情况的差异在什么地方?为什么会不一样呢?
2.另外,如果我再加一个1000M网卡,还是用1核0线程处理收发包的中断,当cpu的si为100%时,统计得出下载速度可以达到1.4Gbps,这里也有个问题,难道90%时候才1.4Gbps,到100%时为什么就能达到1.4Gbps了呢?10%的CPU跑了0.4Gbps?这怎么解释?
3.我现在的linux是用中断的方式处理的网络收发,看到现在好多人提到了NAPI(轮询)的方式,这种方式在网络流量较大时有优势?不知道对网络收发的性能能有多大的帮助?会提高很多吗?有没有数据给参考一下?
4.linux的TCP/IP协议栈是跑在内核里的?对吧?我理解协议栈就是一套代码,那么可不可以这样理解?我的多核多线程的环境下,如果在每个线程上都起一个FTP任务,那么相当于TCP/IP协议栈就是“并行”的了,而不是和我的linux内核一样,一个系统只有一份!不知道这样说对不对?
测试一:用1个1000M网卡处理网络收发,通过0核0线程接收网络收发的中断,然后启用30 ftp client任务(调用内核提供的ftpget,但是目标文件为/dev/null,目的是不在本地做写文件的操作)进行文件下载
此时测试发现:0核0线程 的cpu(top 命令中的si)项占用60%,统计此时的下载速度达到112MB/s(1Gbps),相当于将1个1000M网卡跑满了。
此时,我修改成用1核的0线程来处理收发包的中断,其他条件不变,下载速度也能跑满1个1000M网口,但是此时1核0线程的CPU占用si的平均值为90%
1.不知道这两种情况下,CPU占用情况的差异在什么地方?为什么会不一样呢?
2.另外,如果我再加一个1000M网卡,还是用1核0线程处理收发包的中断,当cpu的si为100%时,统计得出下载速度可以达到1.4Gbps,这里也有个问题,难道90%时候才1.4Gbps,到100%时为什么就能达到1.4Gbps了呢?10%的CPU跑了0.4Gbps?这怎么解释?
3.我现在的linux是用中断的方式处理的网络收发,看到现在好多人提到了NAPI(轮询)的方式,这种方式在网络流量较大时有优势?不知道对网络收发的性能能有多大的帮助?会提高很多吗?有没有数据给参考一下?
4.linux的TCP/IP协议栈是跑在内核里的?对吧?我理解协议栈就是一套代码,那么可不可以这样理解?我的多核多线程的环境下,如果在每个线程上都起一个FTP任务,那么相当于TCP/IP协议栈就是“并行”的了,而不是和我的linux内核一样,一个系统只有一份!不知道这样说对不对?
|
2. 正如我所说,CPU占用略影响因素很多,所谓的90%和100%其实没有的比较其实没有什么意义,但如果它的负担很重的话,通常会把线程迁移到其他cpu。除非禁止了这种迁移同时你用NAPI的方式让它单独处理这些流量。
中断应该只是被路由到这个核,但中断以外的处理到不一定只在这个核上进行。具体还要看你的网卡是用在DMA方式还是网卡本身已经有较大的存储空间,可以让cpu直接拿数据。我的意思是说除了中断处理的那部分之外其他的处理要看具体的驱动实现方式。所以这种CPU占用略的比较其实是没有多大意义的,因为处理的过程本身可能发生在其他任何一个核上面。这也应该可以解释这种性能的“特增”吧?
3。我没有做过比较,不过在禁止线程迁移的情况用下用NAPI让一个核来处理网络流量除了省掉中断开销,也剩下不少调度开销。
只是我地理解^_^.
中断应该只是被路由到这个核,但中断以外的处理到不一定只在这个核上进行。具体还要看你的网卡是用在DMA方式还是网卡本身已经有较大的存储空间,可以让cpu直接拿数据。我的意思是说除了中断处理的那部分之外其他的处理要看具体的驱动实现方式。所以这种CPU占用略的比较其实是没有多大意义的,因为处理的过程本身可能发生在其他任何一个核上面。这也应该可以解释这种性能的“特增”吧?
3。我没有做过比较,不过在禁止线程迁移的情况用下用NAPI让一个核来处理网络流量除了省掉中断开销,也剩下不少调度开销。
只是我地理解^_^.