`
chaoslawful
  • 浏览: 198433 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Erlang文件I/O性能评测

阅读更多

评测目的

本测试主要目的是考察Erlang文件I/O同C标准I/O之间具体的性能差异。

 

预备知识

Erlang中有普通文件I/O和裸文件I/O两类操作,其中普通文件I/O的文件句柄是一个进程ID,因此可以从Erlang节点网络的任意位置访问该句柄;而裸文件I/O的文件句柄是一个tuple结构,只在同一节点上打开该文件的进程内有效,无法跨进程跨节点访问。一般来说裸文件I/O速度要远高于普通文件I/O。

此外Erlang RTS还有一些选项能够改善大I/O流量情况下的进程响应速度,这里主要使用的是如下2个选项:

  • +K true|false - 该选项用于打开(true)或关闭(false,默认)Erlang RTS的Kernel poll功能。当Kernel poll被关闭时,RTS使用普通的用户态事件轮询接口select/poll进行进程和I/O调度,调度开销较大;打开Kernel poll时,RTS将使用内核级事件轮询接口(如Linux上的epoll等)进行调度,开销较小,可以提高存在大量进程时的响应速度。
  • +A integer - 该选项用于调整Erlang RTS用于异步I/O的异步线程池大小。目前可以设置为0(不使用异步I/O,默认)至1024之间的整数。当不使用异步I/O时,RTS会把对于较大数据块的I/O操作切分为多个小数据块的I/O,以避免单个大I/O操作阻塞RTS的消息循环导致其他进程无法继续响应;当使用异步I/O时,RTS会把I/O操作派发到异步线程池中的某个worker线程的任务队列里,由独立于RTS消息循环的worker线程来处理耗时很长的I/O操作(Leader-Follower模式)。这两种对大I/O操作的处理方式都存在一定开销:不使用异步I/O时单个I/O操作变成多次I/O操作,让I/O操作调用开销增加了N倍(N为平均切分出的I/O操作次数);使用异步I/O时,OS需要在RTS调度线程和异步I/O线程之间进行上下文切换,这也是相对较为耗时的操作。

为此,评测时也进行了默认状态(+K false +A 0 )和调整后状态(+K true +A 32 )的I/O性能比较。

 

评测环境及用例

评测环境为公司发放的笔记本HP nx6320,Intel Duo T2400 1.83GHz(2 cores),1GB RAM,60G SATA HD。

测试用例分为顺序读写和随机读写2种,每种类型下分别进行参数调整前后的读和写时间测试:

  • 顺序读算法:按照指定的块大小逐块读取测试数据文件,直至全部读取完毕为止,测量全部用时;
  • 顺序写算法:按照指定的块大小逐块将随机数据写入测试数据文件,直至写入大小满足要求为止,测量全部用时;
  • 随机读算法:随机移动到测试数据文件内某处,按照指定的块大小读取1块,直至累计读取长度满足要求为止,测量全部用时;
  • 随机写算法:将测试数据文件预先truncate到指定大小,然后随机移动到文件内某处,按照指定的块大小写入1块随机数据,直至累计写入长度满足要求为止,测量写入过程全部用时。

测试数据文件大小为100MB,I/O块大小从1KB、2KB开始按2的倍数递增至1024KB,以测试不同I/O块大小对性能的影响。

 

评测结果

顺序I/O

使用Erlang默认参数进行读操作时,C标准I/O速度是Erlang普通文件I/O速度的~5076%,是Erlang裸文件I/O速度的~191%;增加上述的RTS选项后Erlang I/O速度基本没有变化。图表如下:

使用Erlang默认参数进行写操作时,C标准I/O速度是Erlang普通文件I/O速度的~92%,是Erlang裸文件I/O速度的~194%;增加上述的RTS选项后,普通文件I/O速度降低,裸文件I/O速度提高,此时C标准I/O速度是Erlang普通文件I/O速度的~192%,是Erlang裸文件I/O速度的~124%。图表如下:

 

随机I/O

使用Erlang默认参数进行读操作时,C标准I/O速度是Erlang普通文件I/O速度的~2556%,是Erlang裸文件I/O速度的125%;增加上述的RTS选项后Erlang I/O速度基本没有变化。图表如下:

 
使用Erlang默认参数进行写操作时,C标准I/O速度是Erlang普通文件I/O速度的~128%,是Erlang裸文件I/O速度的~62%;增加上述的RTS选项后普通文件I/O速度有所提高,但裸文件I/O速度有所降低,此时C标准I/O速度是Erlang普通文件I/O速度的~125%,是Erlang裸文件I/O速度的~107%。图表如下:


测试代码

C标准I/O顺序读写代码

见附件中的 seq_rw.c.zip。

 

C标准I/O随机读写代码

见附件中的rand_rw.c.zip。

 

Erlang顺序读写代码

见附件中的 seq_rw.erl.zip。

 

Erlang随机读写代码

见附件中的 rand_rw.erl.zip。

 

  • 大小: 56.7 KB
  • 大小: 58.4 KB
  • 大小: 56.9 KB
  • 大小: 52.8 KB
分享到:
评论
2 楼 chaoslawful 2012-04-07  
dinimickyhu 写道
看了你的erlang的随机读取算法,我觉得里面有个问题,我一直不理解,你用随机数产生来得到偏移量,那么是不是存在重复读取的可能。

是有这个可能的,但C和Erlang测试代码的算法相同,统计上来说比较结果不受这个影响
1 楼 dinimickyhu 2012-03-25  
看了你的erlang的随机读取算法,我觉得里面有个问题,我一直不理解,你用随机数产生来得到偏移量,那么是不是存在重复读取的可能。

相关推荐

    erlang 25.1 放入/root/.kerl/archives,直接./kerl build 25.1

    `<安装路径>`可以是你希望Erlang二进制文件存放的位置,例如`/usr/local`。 6. **激活Erlang版本**:使用`./kerl activate 25.1`命令激活新安装的Erlang版本。 7. **验证安装**:最后,运行`erl`命令来启动Erlang ...

    erlang 24.0 龙芯 loongarch64 预编译版本

    在Erlang 24.0版本中,可能会包含一些新特性、性能优化以及bug修复。例如,可能改进了并发处理能力,增强了垃圾回收机制,或者对编译器和运行时系统进行了优化,使得Erlang程序在龙芯平台上运行得更加高效稳定。然而...

    Erlang/OTP 26.2.1

    Erlang/OTP 26.2.1,Erlang,OTP,26.2.1

    erlang最新api

    ### Erlang标准库(STDLIB)与I/O协议详解 #### 概述 Erlang是一种功能强大且灵活的编程语言,广泛应用于构建高并发、容错性良好的系统。其标准库(STDLIB)提供了丰富的函数集合以及一系列用于简化开发过程的工具。...

    rabbitmq安装相关的包,erlang.rpm/rabbitmq-server.rpm/socat.rpm

    rabbitmq安装相关的包,erlang.rpm/rabbitmq-server.rpm/socat.rpm,安装步骤看https://blog.csdn.net/qq_37846169/article/details/126085715?utm_source=app&app_version=5.5.0

    erlang25.0 windows版本

    在Windows环境下安装Erlang 25.0,你需要下载提供的文件`otp_win64_25.0.exe`。这是一个Windows 64位的可执行安装程序,包含了所有必要的组件来运行Erlang环境。在安装过程中,你通常会遵循以下步骤: 1. **下载**...

    Erlang / OTP 21.0 版本下载

    官网下载实在是困难,我把当前Erlang / OTP 21.0 版本提交到这里提供给大家和自己下载 原先积分0的现在都这么高了,为了方便大家,放出云盘地址:https://pan.百度.com/s/1hb8vPiMslXxNuJC8PvnKgg提取码wmx8

    基于erlang的文件存储

    9. **性能优化**:文件存储系统可能会涉及到大量的I/O操作,因此优化文件读写效率和内存管理至关重要。Erlang的轻量级进程和高效的内存管理机制有助于实现这一点。 综上所述,这个基于Erlang的文件存储项目结合了...

    evum:["Linux VM", ["Erlang 进程", ["Erlang VM"]]]

    虽然 Linux VM 像任何其他进程(内存、系统进程、磁盘)一样拥有自己的状态,但与外部世界的所有 I/O 都是通过 Erlang VM(当前工作:网络、系统控制台)作为消息发送的。 要求 sudo apt-get install user-mode-...

    Erlang/OTP reference

    ### Erlang/OTP系统文档概览与...遵循这些指导原则,可以确保Erlang/OTP的顺利安装和运行,为构建高性能、分布式应用程序奠定坚实的基础。对于更详细的安装指南和其他平台的安装方法,请参考完整的Erlang/OTP系统文档。

    erlang otp25 win安装包

    erlang otp25 win安装包

    Erlang-otp_win64_23.0.zip

    Erlang OTP 23.0是Erlang的一个重要版本,它带来了性能优化、新的API、错误修复以及对新特性的支持。在Windows 64位系统上安装这个版本,用户可以确保RabbitMQ能够在一个稳定且优化的环境中运行。安装过程中,用户...

    erlang api 最新资源

    综上所述,Erlang是一种在数据类型、模式匹配以及I/O通信机制方面都具有独特优势的编程语言。它以并发处理和容错性为核心设计原则,非常适合用于构建分布式系统和高可用性的应用程序。随着对Erlang API的了解,...

    java php python erlang 千万级内存数据性能比较

    在提供的文件"erlang_list_dict_test.erl"和"erlang_list_dict_test - pro_dict-check_duplicate.erl"中,可以看到Erlang对列表和字典(dict)操作的性能测试。Erlang的字典数据结构通常比其他语言的哈希表更快,...

    Erlang26-windows安装包

    RabbitMQ version Minimum required Erlang/OTP Maximum supported Erlang/OTP Notes 3.13.0 26.0 26.2.x The 3.13 release series is compatible wtih Erlang 26. OpenSSL 3 support in Erlang is considered to ...

    rabbitmq - erlang

    同时,源码还可能包含配置文件、脚本和文档,帮助开发者了解和定制RabbitMQ的行为。 深入研究RabbitMQ的源码,可以学习到以下知识点: 1. **AMQP协议的实现细节**:了解RabbitMQ如何解析和处理AMQP协议的数据包。 ...

    actor和proactor模式1

    这两种模式都涉及到如何有效地管理多个并发的I/O请求,以提高系统性能和响应速度。 首先,我们来理解一下`Actor`模式。`Actor`模式是一种并发编程模型,它源自并发理论,由Erlang语言引入并广泛应用于Akka等框架。...

    Erlang 运行环境的安装文件

    Erlang 是一种功能强大的并发性编程语言,主要用于构建分布式、高并发、容错性强的系统,尤其在电信、银行和互联网基础设施等领域有着广泛的应用。本文将详细介绍如何安装和配置 Erlang 运行环境。 首先,了解 ...

Global site tag (gtag.js) - Google Analytics