socket的Write函数效率

xpyuanhang 发布于 2016/09/28 15:08
阅读 104
收藏 0

用C++,在开发一个网关程序,在测试性能的时候发现Socket的Write函数,在Linux机器上,要使用大概10微妙左右(有时候20微妙)

目前优化的几个地方:

1.尽量减少了Write的调用

2.关闭了TCP_NODELAY

3.设置了SO_SNDBUF缓冲区大小

4.设置了FD为非阻塞

请问一下,还有什么可以优化的,因为希望这个网关的处理在30微妙内,而这个函数就用了10-20微妙。

有可能优化到5微秒以内吗?

加载中
0
快乐的一只小青蛙
快乐的一只小青蛙
linux上没有Write这个函数
0
x
xpyuanhang
::write    或则 send也一样
0
GestureWei
GestureWei
比较好奇你是怎么测出非阻塞的write时间?是否准确,是否有程序其他部分的代码干扰?还有,1ms==1000us,最后应该是5微秒?
0
x
xpyuanhang

引用来自“GestureWei”的评论

比较好奇你是怎么测出非阻塞的write时间?是否准确,是否有程序其他部分的代码干扰?还有,1ms==1000us,最后应该是5微秒?

就是在write函数的前后记录了一下时间,中间无其它代码,我记录的就是微妙,耗时10-20微妙

记时的代码:

 struct timeval  tv;
 (void)gettimeofday(&tv, 0);  通过这个获取的微妙数

 

GestureWei
GestureWei
我感觉这样测的时间并不精确,接收的数据量不是确定的,应该测有一定规模的数据,在多长时间内能够处理完,测程序整体性能,如果不满足要求,就得考虑算法层面、更换协议等等的事情
0
乌龟壳
乌龟壳
你目标具体是要多少时间?你写的5毫秒是500微秒,是这个意思吗?
0
x
xpyuanhang

引用来自“乌龟壳”的评论

你目标具体是要多少时间?你写的5毫秒是500微秒,是这个意思吗?

不好意思,我写错了,我要优化到5微秒内

乌龟壳
乌龟壳
1.在驱动层面做。2.使用udp延迟更低。3.既然是走网络的,就不应该要求那么高,如果真的那么高还走网络,是不是设计问题?本来应该放同一块板子解决的东西,非得通过两个板子通信来解决。
返回顶部
顶部