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. 【例题 6-20 UVA - 1599】Ideal Path

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 逆向做一遍bfs. 得到终点到某个点的最短距离. 这样,我们从起点顺序的时候. 就能知道最短路的下一步是要走哪里了. 这样,我们从起 ...

  2. python输出杨辉三角

    使用python列表,展示杨辉三角 # !/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan yanghui = [] fo ...

  3. nios博文

    小时不识月:http://www.cnblogs.com/yuphone/archive/2010/09/20/1831448.html cracy bingo:http://www.cnblogs. ...

  4. 【Codeforces Round #434 (Div. 1) B】Polycarp's phone book

    [链接]h在这里写链接 [题意] 给你n个电话号码. 让你给每一个电话号码选定一个字符串s; 使得这个串s是这个电话号码的子串. 且不是任何一个其他电话号码的子串. s要求最短. [题解] 字典树. ...

  5. vim编辑器经常使用命令

    高级一些的编辑器,都会包括宏功能,vim当然不能缺少了.在vim中使用宏是很方便的: :qx     開始记录宏,并将结果存入寄存器xq     退出记录模式@x     播放记录在x寄存器中的宏命令 ...

  6. Source Insight 3.50.0065使用详解

    转自calvinlee1984 Subject:Source Insight3.50.0065使用详解 Date:     21-Oct-2011 By:         Calvinlee1984@ ...

  7. 硬件——STM32 , SN74HC573锁存器

    74HC573是一款高速CMOS器件: 上图中:输出使能为:OE   锁存使能为:LE 典型电路: 上图中:PWR-AL-0,PWR-AL-1,PWR-AL-2:是单片机输出的高低电平给573 对应的 ...

  8. jQuery----鼠标移动、点击案例

    单击隐藏: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  9. JavaScript中双叹号“!!”作用

    1.JavaScript的逻辑非(!)操作符的作用 (逻辑非) 如果操作数能够转换为true则返回false:否则返回true. 2.!!的作用 !!一般用来将后面的表达式强制转换为布尔类型的数据(b ...

  10. jquery实现ajax提交form表单的方法总结(转)

    方法一: 复制代码 代码如下: function AddHandlingFeeToRefund() {            var AjaxURL= "../OrderManagement ...