UDP收发buffer尺寸对收发包流量的影响
下午验证一个高流量发包问题时,发现了一个值得记录的问题:socket的收发buffer尺寸是会影响收发包的效率的,高流量通讯时,若socket的收发buffer尺寸过小会一定程度降低收发包效率。
自己先分别获取了一下Windows/Linux系统中默认的收发包尺寸值
在x86 Win7环境里实际程序验证结果为
$ ./sockopt.exe
UDP socket options:
receive buffer: 0x2000
send buffer: 0x2000
TCP socket options:
receive buffer: 0x2000
send buffer: 0x2000
只有8KiB。
在cubieboard2环境(Linux cubieboard2 3.4.79 #1 SMP PREEMPT Fri Dec 19 17:51:20 CST 2014 armv7l GNU/Linux)里程序验证结果为
cubie@cubieboard2:~$ ./sockopt_linux
UDP socket options:
receive buffer: 0x28000
send buffer: 0x28000
TCP socket options:
receive buffer: 0x15554
send buffer: 0x4000
可见在Windows下默认的socket收发buffer尺寸都比较小,后续的结果表明,对应对收发包的效率影响更为明显。实际测试代码如下
#include "net/udp_peer.h"
#include "util/log.h" #include <stdlib.h>
#include <string.h> static inetaddr_t addr;
static char data[]; static void on_message(udp_peer_t *peer, void *message, unsigned size, void* userdata, const inetaddr_t *peer_addr)
{
return;
} static void on_writable(udp_peer_t *peer, void* userdata)
{
udp_peer_send(peer, data, sizeof(data), &addr); return;
} int main(int argc, char *argv[])
{
loop_t *loop;
udp_peer_t *peer; #ifdef WIN32
WSADATA wsa_data;
WSAStartup(MAKEWORD(, ), &wsa_data);
#endif log_setlevel(LOG_LEVEL_INFO); inetaddr_initbyipport(&addr, argv[], ); loop = loop_new();
peer = udp_peer_new(loop, "0.0.0.0", , on_message, on_writable, NULL);
udp_peer_expand_send_buffer(peer, (**));
/* udp_peer_expand_recv_buffer(peer, (2*1024*1024)); */ loop_loop(loop); udp_peer_destroy(peer);
loop_destroy(loop); #ifdef WIN32
WSACleanup();
#endif return ;
}
在cubieboard和Windows系统上互相通过UDP进行快速收发包,通过不同方式调节socket收发包buffer尺寸,并进行流量统计,最终得出的结果分别如下(在Windows上利用NetWorx进行流量统计)
1,保持默认的收发buffer尺寸,进行快速发包,直至将百兆带宽打满,流量图如下
2,仅将两端发包buffer尺寸增加2MiB,同样将百兆带宽打满,流量图如下
3,将两端收发包都增加2MiB,将百兆带宽打满,流量图下
可见将socket的发包buffer增大之后,在Windows下发包流量有明显的提升(峰值增加了大概2MiB,约20%)。
自己分析认为这是因为默认情况下Windows下socket发包Buffer较小,发包流量高时,出现发包Buffer满的情况概率较高,而使得后续的sendto()调用失败的概率也对应升高,从而就降低了发包效率,在此处就形成了一个瓶颈,限制了发包流量的进一步升高。而增大socket的发包Buffer之后,此处的限制得到解除,而使得最终的限制就落在网口的最大速率带宽上。
~~ end ~~
UDP收发buffer尺寸对收发包流量的影响的更多相关文章
- udp之关于linux udp收发包缓冲区大小
1.修订单个socket的缓冲区大小:通过setsockopt使用SO_RCVBUF来设置接收缓冲区,该参数在设置的时候不会与rmem_max进行对比校验,但是如果设置的大小超过rmem_max的话, ...
- 交换芯片收发包的 DMA 实现原理
交换芯片支持:报文.计数.表项3种DMA类型,其中报文DMA包括系统从芯片到接收报文或发送报文到交换芯片,计数DMA用来从片上获取统计计数,表项DMA功能分为SLAM DMA(系统内存DMA到片上交换 ...
- kernel笔记——网络收发包流程
本文将介绍网络连接建立的过程.收发包流程,以及其中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 应用层 对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个 ...
- [development][dpdk][pktgen] 网卡收发包性能测试
一: 多队列及中断信息收集 [root@T185 ~]# ethtool -g eth0 Ring parameters for eth0: Pre-set maximums: RX: RX Mini ...
- DPDK收发包全景分析
前言:DPDK收发包是基础核心模块,从网卡收到包到驱动把包拷贝到系统内存中,再到系统对这块数据包的内存管理,由于在处理过程中实现了零拷贝,数据包从接收到发送始终只有一份,对这个报文的管理在前面的mem ...
- C#实现的UDP收发请求工具类实例
本文实例讲述了C#实现的UDP收发请求工具类.分享给大家供大家参考,具体如下: 初始化: ListeningPort = int.Parse(ConfigurationManager.AppSetti ...
- python 爬虫 ~ 查看收发包的情况
DebugLog 可以用来查看收发包的情况,比较有意思,现特意记录下来: Sample: import urllib2 httpHandler = urllib2.HTTPHandler(debugl ...
- linux系统上用户态pppoe收发包过程
花了几天看了一下ppp/pppoe有关的东西,画了一下用户态pppoe收发包的示意图.
- 浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个 ...
随机推荐
- Provisioning Services 7.6 入门到精通系列之二:基础架构环境
在阅读本博文之前强烈建议同学们提前了解Citrix XenDesktop和XenApp等产品,并对PVS相关产品概念架构有深入的理解. 1.1 以下是在上一章节中规划的本次测试环境的配置清单(后续 ...
- Git 仓库和记录操作到仓库
Git 配置好了,来 clone 个或者新建个仓库来试试, $ git clone git@github.com:git/git.git 把 Git 的源码克隆下来,克隆会自动创建本地仓库,并创建本地 ...
- 1310. ACM Diagnostics
http://acm.timus.ru/problem.aspx?space=1&num=1310 题目中说的 “the lexicographically increasing list” ...
- 查询数据库表大小sql
SELECT a.name, b.rowsFROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.idWHERE (a.type = ' ...
- c++学习笔记2
T: 1.默认实参只能声明一次: 设计含有默认实参的函数时,要合理设置形参的顺序 :局部变量不能作为默认实参 2.内联机制用于优化规模较小.流程直接.频繁调用的函数 3.constexpr函数 返 ...
- ubuntu 使用中的一些问题汇总
1.IOError: [Errno 13] Permission denied /usr/local…… 这个错误是在terminal中运行pip install 时产生的,说的时没有权限运行安装包, ...
- 封装pyMysql
#!/usr/bin/python import MySQLdb class SpiderPDO: def __init__(self): db_host = '127.0.0.1' db_user ...
- Debian 7环境安装TightVNC+Gnome远程桌面环境
昨天下午的时候一个Hostus网友希望在购买的VPS主机中安装桌面环境用来跑软件项目,其实也是我们很多用户习惯的VNC桌面,毕竟在LINUX服务器中也无法去安装WINDOWS系统,尤其是OPENVZ架 ...
- 常用CSS样式
1.line-height:行高.默认normal normal:允许内容顶开或溢出制定的容器边界; length:15px,可以为负数; ... 2.overflow:滚动条设置 overflow- ...
- Xcode 7如何 免费 真机调试iOS应用
运行Xcode后,点击菜单中的Preferences…进入Accounts标签,这里选择添加Apple ID: 在弹出的对话框中登入你的Apple ID,没有的话去注册一个就是了,登录成功后会看到下面 ...