http://blog.sina.com.cn/s/blog_96b8a1540101317m.html

这段时间我们的项目遇到广播包的一些性能问题,想起之前看到yufeng老大提到的1s广播40K包的问题,我也想测试测试我们机器的IO能力。

这次仅仅测试发包的能力,采用的是一对一的方式。

测试代码:

-module(socket_io_test).

-export([server/0, client/1]).

server() ->

spawn(fun() -> do_server() end).

do_server() ->

case gen_tcp:listen(38888, [binary, {reuseaddr, true}, {active, false}]) of

{ok, ListenSocket} ->

do_server_loop(ListenSocket);

{error, Reason} ->

io:format("listen 38888 failed: ~p", [Reason])

end.

do_server_loop(LSock) ->

case gen_tcp:accept(LSock) of

{ok, ClientSocket} -> do_recv(ClientSocket);

{error, Reason} ->

io:format("accept failed: ~p", [Reason])

end.

do_recv(ClientSocket) ->

gen_tcp:recv(ClientSocket, 0),

do_recv(ClientSocket).

client(N) ->

case gen_tcp:connect("127.0.0.1", 38888, [binary]) of

{ok, Socket} ->

erlang:statistics(runtime),

erlang:statistics(wall_clock),

do_send(N, Socket),

{_, T1} = erlang:statistics(runtime),

{_, T2} = erlang:statistics(wall_clock),

io:format("~p ~p", [T1, T2]);

{error, Reason} ->

io:format("connect failed: ~p", [Reason])

end.

do_send(N, Socket) ->

lists:foreach(fun(_) -> gen_tcp:send(Socket, <<"Hello world!">>) end, lists:seq(1, N)).

启动服务端:

socket_io_test:server().

启动发包客户端:

socket_io_test:client(100000). 100000表示发包的数量,每个包的大小为12个字节,加上TCP头部,一共36字节。

测试包的数量: 400000(40W)

服务器环境:

Intel(R) Xeon(R) CPU   E5420  @ 2.50GHz 双四核

12G内存

100M带宽独享

测试结果:

runtime

wall_clock

-smp auto

650

1558

-smp auto +h 99999

630

1641

+K true

670

1626

-smp disable

410

770

+K true -smp disable

430

797

+K true -smp disable +h 99999

420

1133

结果表明 smp disable模式下发包速度明显快于smp auto模式,原因在于多核模式下,CPU切换的代价是相当高的。另外由于是一对一的发包,所以+K参数也没有什么效果。

产生的问题:

多核并发IO是否没有优势?得去看看Linux底层的实现了。(原谅我对这块的无知)

1.如果多核并发进行网络IO的能力要弱于单核,那么在用erlang进行服务端设计的时候就应该尽量让网关独占某个CPU并设置为-smp disable模式。

2.如果有优势,如何利用呢?嗯,这又是一个问题。

erlang tcp发包速度测试的更多相关文章

  1. 网络带宽和速度测试windows和linux用iperf工具

    网络带宽和速度测试windows和linux用iperf工具   Iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.Iperf可以测量最大TCP带宽,具有多种参数和UDP特性 ...

  2. snprintf/strncpy/strlcpy速度测试

    速度测试代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <un ...

  3. iOS5系统API和5个开源库的JSON解析速度测试

    iOS5系统API和5个开源库的JSON解析速度测试 iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果和工程代码附件. 我们选择的测试对 ...

  4. TF卡速度测试对比 Class数越高速度越快

    存储卡(TF卡)是手机扩展存储的大杀器,让你多装n部学习资料,多装n个外语听力练习.除了装东西外,存储卡性能不佳也会影响手机的整体性能以及体验的.本文主要针对Android手机,我是懒人,但我讨厌懒人 ...

  5. Erlang 集群互连测试

    Erlang 集群互连测试Erlang节点相同cookie全互联成为一个集群(cluster).如果2个集群不同cookie, 然后其中有节点连接到对方集群的节点,这2个集群会合并成一个集群吗?连接到 ...

  6. 使用 PsPing & PaPing 进行 TCP 端口连通性测试

    PsPing & PaPing 介绍 通常,我们测试数据包能否通过 IP 协议到达特定主机时,都习惯使用 ping 命令.工作时 ping 向目标主机发送一个 IMCP Echo 请求的数据包 ...

  7. 手机闪存速度测试工具,AndroBench

    手机闪存速度测试工具,AndroBench

  8. VPS性能测试(3):磁盘IO读写速度、SSD硬盘速度测试

    1.磁盘IO,即输入/输出(Input/Output),这是测试磁盘性能一个重要指标,一些便宜的VPS主机为了降低成本,以大量的低性能的硬盘来充当服务器,导致VPS主机因为IO差而拖了整个主机性能的后 ...

  9. 在线HTTP速度测试(响应时间测试)及浏览器兼容测试

    一.前言 网站的响应时间,是判断一个网站是否是好网站的重要的因素之一.百度首页的响应时间在全国各个省份小于10ms.这个响应时间远远好于竞争对手.根据美丽说的技术负责人分析,美丽说访问速度提升10%, ...

随机推荐

  1. Qt源码分析之信号和槽机制(QMetaObject是一个内部struct)

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...

  2. 79.cgi硬盘查询个人信息

    运行截图: 把cgi编码转为char*类型 //把cgi编码转为char*类型 char* change(char *str) { //分配内存 ); //x是tempstr的下标,y是str的下标 ...

  3. Flume Channels官网剖析(博主推荐)

    不多说,直接上干货! Flume Sources官网剖析(博主推荐) 一切来源于flume官网 http://flume.apache.org/FlumeUserGuide.html Flume Ch ...

  4. Linux体系结构

    linux内核结构: system call interface (SCI层) 为用户空间提供了一套标准的系统调用函数来访问linux内核. process management (PM层) 进程管理 ...

  5. JSP与Servlet的介绍说明

    什么是Servlet和JSP 用Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP. Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是 ...

  6. PatentTips - Resource partitioning and direct access utilizing hardware support for virtualization

    BACKGROUND The present disclosure relates to the resource management of virtual machine(s) using har ...

  7. FZU Problem 2156 Climb Stairs DP

    http://acm.fzu.edu.cn/problem.php?pid=2156 题目大意: 爬楼梯,要爬到n这个位置,每次可以走x也可以走y,然后一定要经过A和B两点,求最终到达n的方案数. 思 ...

  8. Windows下合并tar分卷

    如有例如以下几个tar分卷:logs.tar.gza1.logs.tar.gza2.logs.tar.gza3.在Windows下怎样进行合并呢? 按"win+r"键在弹出的输入框 ...

  9. Python 爬虫从入门到进阶之路(五)

    在之前的文章中我们带入了 opener 方法,接下来我们看一下 opener 应用中的 ProxyHandler 处理器(代理设置). 使用代理IP,这是爬虫/反爬虫的第二大招,通常也是最好用的. 很 ...

  10. Unity插件之NGUI学习(5)—— 创建Label图文混排及文字点击

    创建一个新的Scene,并按 Unity插件之NGUI学习(2)创建UI Root. 准备工作,制作Font.如今Project窗体创建一个Font目录.然后从系统自带字体目录中选择自己须要的字体,我 ...