2KB项目,专业的源码交易网站 帮助 收藏 每日签到

Linux 下拜访 I/O 的各类办法,我们为 Scylla 选择了哪一个?为何?

  • 时间:2019-05-17 12:05 编辑:2KB 来源:2KB.COM 阅读:459
  • 扫一扫,手机访问
  • 分享
摘要: 英文原文:Dif
英文原文:Different I/O Access Methods for Linux, What We Chose for Scylla, and Why

当大大多数Server使用顺序开发职员想到 I/O 时,起首他们会思索收集 I/O,由于大大多数资本可以经过收集实行拜访:数据库,工具存储和其他微服务。 但是,数据库的开发职员也必需思索文件 I/O。 本文引见了可用的选择及其衡量,和为何 Scylla 选择异步间接 I/O(AIO/DIO)作为其拜访办法。

选择拜访文件

大部分情况,拜访 Linux Server上的文件有四种选择:读/写,mmap,间接 I/O(DIO)读/写和异步间接 I/O (AIO/DIO)。

传统读/写

从一Start就运用的传统办法,就是运用 read(2)和 write(2)系统挪用。而在最新的完成中,读系统挪用(或其很多变体之一 -  pread,readv,preadv 等)请求内核读取文件的一部分并将数据复制到挪用过程地址空间中。假如一切恳求的数据都在页面缓存中,则内核会将其复制并立刻前往;不然,它将布置磁盘将恳求的数据读入页面缓存,禁止挪用线程,而且当数据可用时,它将恢单线程并复制数据。另外一方面,写入凡是 (注解1)会将数据复制到页面缓存中;内核会将页面缓存写回磁盘一段工夫。

Mmap

一种替换和更当代的办法是运用 mmap(2),系统挪用将文件记载到使用顺序地址空间中。 这会招致一部分地址空间间接援用到包括文件数据的页面缓存页面。 在此预备步调以后,使用顺序可使用途理器的存储器读和写指令拜访文件数据。 假如恳求的数据恰恰在缓存中,则内核将被完整疏忽,而且之内存速度履行读取(或写入)。 假如发作高速缓存未射中,则会发作页错误,而且内核将活动线程置于休眠形态,以便读取该页面的数据。 当数据终极可用时,存储器管理单位被编程,使得新读取的数据可被线程拜访,然后被叫醒。

Direct I/O (DIO)

传统的读/写和 mmap 都触及内核页缓存,并将内核的 I/O 延迟调剂。 当使用顺序盼望本人调剂 I/O(至于缘由我们稍后将说明),它可使用 Direct I/O。 这触及运用 O_DIRECT 标记翻开文件; 进一步的活动将运用系统挪用的正常读写序列,可是它们的行动曾经改动:不是去拜访缓存,而是间接拜访磁盘,这意味着挪用线程将无前提地进入休眠形态。 另外,磁盘把持器将间接将数据复制到用户空间,绕过内核。

异步 direct I/O (AIO/DIO)

Direct I/O 的一种重构,异步 Direct I/O 的行动与之十分相似,但不会使挪用线程梗阻。相反,使用顺序线程可以使用 io_submit(2) 系统挪用来调剂 Direct I/O 操作,而且该线程不会梗阻;I/O 操作与正常线程并交运行。独自的系统挪用 io_getevents(2) 用于等候并搜集已完成的 I/O 操作的后果。和 DIO 一样,内核中的页面缓存会被绕过,磁盘把持器担任将数据间接复制到用户空间。

了解衡量

分歧的拜访办法都有各自的特色,在其他方面有所分歧。 表1总结了这些特色,具体论述以下。

CharacteristicR/WmmapDIO
AIO/DIO
Cache control kernel kernel user
user
Copying yes no no
no
MMU activity low high none
none
I/O scheduling kernel kernel mixed
user
Thread scheduling kernel kernel kernel
user
I/O alignment automatic automatic manual
manual
Application complexity low low moderate
high
其它翻译版本 (1) 加载中

缓存把持

读/写和 mmap 的缓存都是由内核担任。系统的大部分外存都被供给给页面缓存。内核决议哪些页面在内存缺乏时被删除,和页面什么时候需求写回磁盘,而且把持预读。使用顺序可使用 madvise(2) 和 fadvise(2) 系统挪用为内核供给一些指点。

让内核把持缓存的宏大长处是内核开发职员在数十年来投入宏大的精神来调剂缓存运用的算法。这些算法由数千种分歧的使用顺序运用,凡是是有效的。但是,缺陷是这些算法是通用的,并没有调剂到对应的使用顺序级别。内核必需判别使用顺序将怎么运转,即便晓得使用顺序分歧,但也没法协助内核实行判别。这会招致页面被误删, I/O 陈列犯错,或预先读取的数据没法耗费。

复制和 MMU 活动

mmap 办法的长处之一是假如数据在缓存中,则内核将被完整绕过。内核不需求将数据从内核复制到用户空间并前往,因而在该活动上破费的处置器周期较少。这有益于首要存在于缓存中的负载(例如,假如存储巨细与 RAM 巨细的比率靠近 1:1)。

但是,当数据不在缓存中时,mmap 的缺陷就会浮现。当存储巨细与 RAM 巨细的比例分明高于 1:1 时,凡是会发作这类状况。引入缓存的每一个页面都会招致另外一个页面被逐出。这些页面必需先拔出页面表,以后又从表格中删除;内核必需扫描页面表以隔离中止活动的页面,然后将其删除。别的,mmap 需求页面表的内存。在 x8 6处置器上,这需求映照文件巨细的 0.2%。这仿佛很低,可是假如使用顺序的存储比率为 100:1,则 20% 的内存(0.2%* 100)会被用于页面表。

I/O 调剂

让内核把持缓存(运用 mmap 和 读/写拜访办法)的一个问题是使用顺序丧失了 I/O 调剂的把持。内核选择其以为适宜的数据块,调剂它实行写入或读取。这可能会招致以下问题:

  • 写入风暴:当内核调剂大量写入时,磁盘将被占用很长工夫,并影响读取延迟。

  • 内核没法辨别“主要” 和 “不主要” 的 I/O。属于后台Task的 I/O 可以压服前台Task,这将影响其延迟(注释2

经过绕过内核页面缓存,使用顺序承当本人调剂 I/O 的负荷。这其实不意味着问题失掉处理,而是意味着假如赐与充沛的存眷和尽力,问题可以失掉处理。

当运用 Direct I/O 时,每一个线程把持收回 I/O 的工夫。而内核把持线程的运转工夫,所以收回 I/O 的义务在内核和使用顺序之间同享。运用 AIO/DIO,使用顺序可以完整把持什么时候收回 I/O。

线程调剂

运用 mmap 或读/写的 I/O 麋集型使用顺序没法猜想其缓存射中率是几多。因而,它必需运转大量的线程(分明大于它运转的机械的中心数)。运用太少的线程,它们可能都在等候磁盘而使处置器未被充沛应用。因为每一个线程凡是最多有一个磁盘 I/O,所以运转的线程数必需约莫是存储子系统的并发数乘以某个小的因子,以坚持磁盘完整占用。但是,假如缓存射中率足够高,那末这些大量的线程将相互抢夺有限数目的中心。

当运用间接 I/O 时,这个问题一切减缓,由于使用顺序晓得线程在 I/O 上什么时候被梗阻,什么时候可以运转,因而使用顺序可以依据运转时前提调剂运转的线程数。

运用 AIO/DIO,则使用顺序可以完整把持正在运转的线程和等候 I/O(二者完整别离),所以它可以随便地调剂到内存或磁盘绑定的前提或介于二者之间的恣意前提。

本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协议,假如我们的任务有进犯到您的权益,请实时联络我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部