linux异步io缺陷,具有libaio性能问题的Linux异步IO
我正在尝试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相关推荐
- 如何查看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 ...
- 基于linux的netfilter处理数据包的过程分析,基于Linux的Netfilter处理数据包的过程分析...
基于Linux的Netfilter处理数据包的过程分析 防火墙技术在保护网络安全方面的作用越来越明显.相比较window,Linux有更好的网络性能,因此基于Linux的Netfilter技术 (本文 ...
- Windows五种IO模型性能分析和Linux五种IO模型性能分析
Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...
- 关于Linux性能调优中磁盘IO调优的一些笔记
写在前面 和小伙伴分享一些Linux 磁盘 IO优化的笔记,内容很浅,可以用作入门 博文内容结合<Linux性能优化>读书笔记整理 涉及内容包括 使用vmstat 统计系统内磁盘分区I/O ...
- linux mysql io压力大_MySQL性能调优(四) Linux 磁盘IO
1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...
- FIO测试在不同内核IO参数配置下性能变化情况实验数据记录
实验环境为:四核八线程core i5 CPU,16G内存,350G HDD硬盘 可以在系统盘测试文件系统读写性能,不能测试裸盘的性能!!!测试的时候先利用fio写一个大文件,然后再做读的测试,防止读测 ...
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...
python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...
- linux网络编程—7层网络以及5种Linux IO模型以及相应IO基础
一.七层网络模型 OSI是Open System Interconnection的缩写,意为开放式系统互联.国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,它是一个七层的. ...
- 巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!
巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力! 一.什么是tmpfs和/dev/shm/? tmpfs是Linux/Unix系统上的一种基于内存的文件系统.tmpfs可以使用您的 ...
- linux查看cpu占用率_Linux 性能查看
查看系统负载 uptime 这个命令可以快速查看机器的负载情况. 在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量. 命令的输出,load avera ...
最新文章
- 发改委最新《产业结构调整目录》公布!数据中心列入鼓励产业条目
- ubuntu18.10下面从视频中提取音频
- 区块链浏览器_区块链FBI——如何用区块链浏览器追踪链上数据
- ubuntu13.10 编译时 关于链接xlib 库阶段出错的问题解决
- linux网络状态检测libcurl,使用curl进行网络诊断 - msnshow的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- Javascript、Jquery获取浏览器和屏幕各种高度宽度
- python实现蒙特卡洛模拟_蒙特卡洛模拟(Python)深入教程
- AI智能语音系统源码搭建
- 察举科目-汉代察举制度的重要环节
- java ruby 比较_java和ruby的一些比较
- 前端实现 导出图片,导出PDF(截图原理)
- C语言输入Aa1Bb2Cc3,C语言shuzu_test.doc
- web期末复习---老师划重点!!
- 为了革命 保护眼睛 !—— 眼科专家配置的色调
- 【两周快速入门pr】熟稔常用操作,提高剪辑效率
- 理解CMMI 3级过程域非常好的例子
- java 为什么要get,set方法
- maskrcnn_benchmark 代码详解之 boxlist_ops.py
- 68.深度解密网络项目六:经久不衰的互联网“软件”项目
- Poletowin Pitcrew Holdings, Inc.任命Deborah Kirkham为其董事会成员