加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

psync/libaio理解

(2015-01-07 10:28:17)
标签:

股票

分类: linux
fio测试过程中,IO的引擎ioengine=psync/libaio理解,原来不是很明白
通常#mysql5.5后可以使用native aio(libaio),但很多操作还是通过fake aio(类似psync),同步io的方式进行


 libaio Linux native asynchronous I/O. This ioengine defines engine specific options.#linux下原生态的异常i/o,异步I/O的能够提高应用程序的性能,参考:http://www.ibm.com/developerworks/cn/linux/l-async/index.html


 psync  Basic pread(2) or pwrite(2) I/O.通过man pread得知
 pread, pwrite - read from or write to a file descriptor at a given offset #pread, pwrite - 在文件描述符给定的位置偏移上读取或写入数据
   描述
    pread() 从文件 fd 指定的偏移 offset (相对文件开头) 上读取 count 个字节到 buf 开始位置。文件当前位置偏移保持不变。
    pwrite() 把缓存区 buf 开头的 count 个字节写入文件描述符 fd offset 偏移位置上。文件偏移没有改变。
    fd 引用的文件必须是可定位的。

    1)pread与read的区别是,pread每次读取都要指定offset,这样防止了当有多个线程读取文件时,read之间的相互干扰,因为read时,对于在同一fd上的读写是共用的,那么会共用一个记录offset的结构,应该是File吧。
    2)由于lseek和read 调用之间,内核可能会临时挂起进程,所以对同步问题造成了问题,调用pread相当于顺序调用了lseek 和 read,这两个操作相当于一个捆绑的原子操作

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有