ENode通信层性能测试结果
测试环境
两台笔记本网线直连,通过测速工具(jperf)测试,确定两台电脑之间的数据传输速度可以达到1Gbps,即千兆网卡的最大速度。两台电脑硬件配置如下:
- client服务器,CPU:Intel i5-3230 2.6GHz 内存:8G
- server服务器,CPU:Intel i5-3210 2.5GHz 内存:4G
ENode使用的通信层(有兴趣的可以下载ECommon的源代码,运行代码中的Remoting的Sample),支持Oneway, Async, Sync三种通信模式。
- Oneway表示client将数据通过socket发送后不关心server的处理结果,这种模式类似于Push-Pull的通信方式;
- Async表示client将数据发送到server后异步等待server的处理结果;
- Sync表示client将数据发送到server后同步等待server的处理结果;
由于Sync的方式效率较低,且因为ENode中使用通信层只会用到Oneway和Async两种方式;所以我只测试了Oneway, Async这两种通信模式。
测试结果
Oneway

说明:
- 理论上如果两台电脑之间的带宽是千兆,即1Gbps,即125MB的话,那假设一个消息大小是1KB,那如果发送者和接收者的CPU和内存不会成为瓶颈,那理论上每秒应该可以发送接收125 * 1024 = 128000/s。
- 关于客户端数量是指在client机器上开几个进程进行发送消息,目前我是一个进程一个TCP连接。
- 大家可以看到,当消息大小为1K时,客户端机器4个进程同时发送,服务端机器全部接收完用时39.5s,也就是每秒101265接近网卡的极限。为什么没有达到网卡的极限,其实可以到达只要我开6个进程发送消息即可。只是我上面为了方便对比,每个消息大小最多开4个进程。
- 测试过程中,我发现客户端向服务端发送数据的吞吐量,主要的瓶颈还是在CPU。如果CPU好,那发送速度会很快,直到把网卡压满位置。
- 在消息大小为2K时,我没有测试4个进程同时发送消息的场景,因为内存不够用了。
Async

说明:
- 大家可以看到Async的通信模式,性能下降很多。是因为Async要比Oneway的方式,在逻辑上要多很多逻辑。比如发送前要先把一个TaskCompletionSource加入到一个ConcurrentDictionary中,然后当对应的RemotingRequest有回复时,获取到对应的TaskCompletionSource,然后设置回复结果,从而让发送数据的Task完成。以此实现异步发送数据的过程。
- 测试Async的过程中,我发现假如瞬间假如100W个TaskCompletionSource到ConcurrentDictionary,然后通过Socket进行异步发送数据,一开始CPU会压力非常大;所以我为了降低CPU的瓶颈,让每个客户端只发送50W数据;
- 从上面的测试结果可以看出,1K大小的数据,Async模式发送,吞吐量最大在3.3W。经过我的分析,主要的瓶颈还是在CPU。因为此时CPU基本接近极限,而网卡只跑了250MB左右。说明我们应该尽量优化CPU的利用率,减少并发冲突。将来我准备使用Disruptor.Net来尝试看看是否能提高Async模式的性能。
- 在消息大小在1K和2K的情况下,我没有测试客户端数量为4的情况,因为此时Client端机器的CPU,内存都已经成为瓶颈,没必要测试了。实际上,在客户端进程数量在3的时候,也已经成为瓶颈。
关于阿里云ECS的测试计划
接下来准备再阿里云ECS服务器上再做一下类似的测试,之前简单摸底了一下。购买了两台ECS虚拟机,配置都是4核8G内存。通过内网IP进行TCP测试(使用jperf工具)。发现两台虚拟机之间,最大只能达到60MB的速度。这说明,阿里云的ECS服务器之间,带宽无法达到125MB,比较遗憾。但这也是我未来希望部署ENode案例的真实服务器,所以在这个环境上的测试结果,应该更具参考价值。
未来的测试计划
大概知道通信层的性能之后,我准备对EQueue发送消息和接收做性能测试。这个测试结果,就是决定ENode各个节点之间,消息传递吞吐量的主要依据。
ENode通信层性能测试结果的更多相关文章
- motan源码分析六:客户端与服务器的通信层分析
本章将分析motan的序列化和底层通信相关部分的代码. 1.在上一章中,有一个getrefers的操作,来获取所有服务器的引用,每个服务器的引用都是由DefaultRpcReferer来创建的 pub ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.2
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.4.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.3.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
随机推荐
- Python 下载网络mp4视频资源
最近着迷化学, 特别是古代的冶炼技术,感叹古人的聪明. 春秋时期的炼铁方法是块炼铁,即在较低的冶炼温度下,将铁矿石固态还原获得海绵铁,再经锻打成的铁块.冶炼块炼铁,一般采用地炉.平地筑炉和竖炉3种.铁 ...
- UWP学习记录2-设计和UI之布局
UWP学习记录2-设计和UI之布局 1.导航基础知识 应用里,多个页面会有层次关系或者对等关系.这两种关系,通常在一个复杂应用里都会存在,而关系的选定依据: 对于对等导航,一般用选项卡(tabs)或者 ...
- Arduino uno LED灯实验
http://jingyan.baidu.com/article/a65957f4e358d924e67f9bad.html
- 工作中常用的awk命令
http://man.linuxde.net/awk 1.为一列id加逗号 awk 'BEGIN {ORS=","}{print $1}' test.txt 2.统计一列id中重复 ...
- 学习微信小程序之css10外边距
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 设置NotePad++设置"不打开上次关闭的文件"
notepad++是一个很好的记事本工具,但是默认会记录上次打开时未关闭的文件,但是实际上用起来并不方便, 可以按照下面的方式去除,notepad++版本:v6.6.2,os:win7 64位 按照以 ...
- echarts之tooltip-position
当postion为Array时 tooltip : { trigger: 'axis', position:[3,3] //赋予一个[x,y]的位置 } 当postion为function时 tool ...
- 网页中插入外部视频的几种方法(PC与手机网页通用)
网页中加入视频的几种方法(PC与手机网页通用) 方法一: <!doctype html> <html> <head> <meta charset=" ...
- iOS之 状态栏字体颜色的设置
前一段时间接手一个项目后,熟悉的过程中发现了不少问题,其中有一个就是关于状态栏的问题. 我们都知道:状态栏字体颜色在不同界面不一样的,原因是系统设置的时候把状态栏的字体颜色的界面控制器设置的yes. ...
- [转]webpack
什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. 我们可以 ...