我正在尝试Linux libaio以在服务器应用程序中优化IO性能。我相信我已经做了所有必要的事情(使用O_DIRECT,将缓冲区与内存页面对齐...)。我在等待io_submit立即返回,但一个简单的测试显示它实际上需要80微秒左右的时间才能在我的核心i7笔记本电脑上返回。我是否期望过多或者测试计划有问题? (编译G ++ --std =的C++ 0x -laio)具有libaio性能问题的Linux异步IO

#include

#include

#include

#include

#include

#include

#include

#include

// Open the file for write, return the file descriptor

int open_write(char const* file)

{

int fd = open(file, O_DIRECT|O_CREAT|O_WRONLY, S_IRWXU|S_IRWXG|S_IROTH);

if (fd < 0) {

perror("open_write");

exit(1);

}

}

// Make a buffer of _size_ byte, fill with 'a', return the buffer, it should be aligned to memory page

void* make_write_buffer(size_t size)

{

void* buf = 0;

int ret = posix_memalign((void**)&buf, sysconf(_SC_PAGESIZE), size);

if (ret < 0 || buf == 0) {

perror("make_write_buffer");

exit(1);

}

memset(buf, 'a', size);

return buf;

}

int main (int argc, char *argv[])

{

static const size_t SIZE = 16 * 1024;

// Prepare file and buffer to write

int write_fd = open_write("test.dat");

void* buf = make_write_buffer(SIZE);

// Prepare aio

io_context_t ctx;

memset(&ctx, 0, sizeof(ctx));

const int maxEvents = 32;

io_setup(maxEvents, &ctx);

iocb *iocbpp = new iocb;

io_prep_pwrite(iocbpp, write_fd, buf, SIZE, 0);

using namespace std::chrono;

// Submit aio task

auto start = monotonic_clock::now();

int status = io_submit(ctx, 1, &iocbpp);

if (status < 0) {

errno = -status;

perror("io_submit");

exit(1);

}

auto dur = duration_cast(monotonic_clock::now() - start);

std::cout << "io_submit takes: " << dur.count() << " microseconds." << std::endl;

io_event events[10];

int n = io_getevents(ctx, 1, 10, events, NULL);

close(write_fd);

io_destroy(ctx);

delete iocbpp;

free(buf);

return 0;

}

+0

80微秒,慢? :p最佳猜想:你的过程已经安排完毕。如果你增加你的缓冲区大小呢? –

2011-12-25 13:07:38

+0

另外,测量几百(或几千)个调用,对该函数的第一次调用进行计时似乎不是一个好主意。 –

2011-12-25 13:08:37

+0

谢谢,马特。我做了几次,80微秒是平均水平。 “冷”操作有时可能需要400微秒。 –

2011-12-25 21:36:25

linux异步io缺陷,具有libaio性能问题的Linux异步IO相关推荐

  1. 如何查看linux服务器磁盘的I O性能,如何查看Linux服务器硬盘I/O读写负载

    首先 .用top命令查看 top – 16:15:05 up 6 days, 6:25, 2 users, load average: 1.45, 1.77, 2.14 Tasks: 147 tota ...

  2. 基于linux的netfilter处理数据包的过程分析,基于Linux的Netfilter处理数据包的过程分析...

    基于Linux的Netfilter处理数据包的过程分析 防火墙技术在保护网络安全方面的作用越来越明显.相比较window,Linux有更好的网络性能,因此基于Linux的Netfilter技术 (本文 ...

  3. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  4. 关于Linux性能调优中磁盘IO调优的一些笔记

    写在前面 和小伙伴分享一些Linux 磁盘 IO优化的笔记,内容很浅,可以用作入门 博文内容结合<Linux性能优化>读书笔记整理 涉及内容包括 使用vmstat 统计系统内磁盘分区I/O ...

  5. linux mysql io压力大_MySQL性能调优(四) Linux 磁盘IO

    1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...

  6. FIO测试在不同内核IO参数配置下性能变化情况实验数据记录

    实验环境为:四核八线程core i5 CPU,16G内存,350G HDD硬盘 可以在系统盘测试文件系统读写性能,不能测试裸盘的性能!!!测试的时候先利用fio写一个大文件,然后再做读的测试,防止读测 ...

  7. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

  8. linux网络编程—7层网络以及5种Linux IO模型以及相应IO基础

    一.七层网络模型 OSI是Open System Interconnection的缩写,意为开放式系统互联.国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,它是一个七层的. ...

  9. 巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!

    巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力! 一.什么是tmpfs和/dev/shm/? tmpfs是Linux/Unix系统上的一种基于内存的文件系统.tmpfs可以使用您的 ...

  10. linux查看cpu占用率_Linux 性能查看

    查看系统负载 uptime 这个命令可以快速查看机器的负载情况. 在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量. 命令的输出,load avera ...

最新文章

  1. 发改委最新《产业结构调整目录》公布!数据中心列入鼓励产业条目
  2. ubuntu18.10下面从视频中提取音频
  3. 区块链浏览器_区块链FBI——如何用区块链浏览器追踪链上数据
  4. ubuntu13.10 编译时 关于链接xlib 库阶段出错的问题解决
  5. linux网络状态检测libcurl,使用curl进行网络诊断 - msnshow的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  6. Javascript、Jquery获取浏览器和屏幕各种高度宽度
  7. python实现蒙特卡洛模拟_蒙特卡洛模拟(Python)深入教程
  8. AI智能语音系统源码搭建
  9. 察举科目-汉代察举制度的重要环节
  10. java ruby 比较_java和ruby的一些比较
  11. 前端实现 导出图片,导出PDF(截图原理)
  12. C语言输入Aa1Bb2Cc3,C语言shuzu_test.doc
  13. web期末复习---老师划重点!!
  14. 为了革命 保护眼睛 !—— 眼科专家配置的色调
  15. 【两周快速入门pr】熟稔常用操作,提高剪辑效率
  16. 理解CMMI 3级过程域非常好的例子
  17. java 为什么要get,set方法
  18. maskrcnn_benchmark 代码详解之 boxlist_ops.py
  19. 68.深度解密网络项目六:经久不衰的互联网“软件”项目
  20. Poletowin Pitcrew Holdings, Inc.任命Deborah Kirkham为其董事会成员

热门文章

  1. 安防系统管理服务器,安防弱电系统设计常用十个行业方案(含拓扑图)
  2. 听完吴声的演讲,我感觉智商梗阻了
  3. PHP声音鉴定源码 微信趣味声音测试吸粉H5源码
  4. 【笔记】openwrt - Dnsmasq替换SmartDns+ADguardHome、koolproxy
  5. WES7 SKU WES7E和WES7P的区别
  6. NAT协议(网络地址转换协议)详解
  7. IOS视频播放器缓存
  8. ce游戏逆向修改之扫雷
  9. Python 游戏辅助基础之 Aircv
  10. 《React小书》终结笔记