【冬瓜哥手绘】并发IO—系统性能的根本!

来源:互联网 发布:转录组提取线粒体数据 编辑:程序博客网 时间:2024/04/28 00:27

俗话说,冬瓜一出手,便知有没有。冬瓜哥最近忙的一塌糊涂,可谓是琐事缠身,关键还每件都不好解决,处于死锁态中。人生苦短,不能浪费,一刻也不能停歇,与其陷入琐事当中,不如挥挥衣袖,去做更有价值的事情。

冬瓜哥时刻心系粉丝们,瓜哥深知粉丝们的心情。所以,忙里偷闲决定怎么也得写点出来先。本次瓜哥聊聊并发IO和条带深度的关系。

并发,是计算机体系设计者们的终极目标。这个世界上,什么都可以买,唯独时间买不来;什么都可以重来,唯独时间无法重来,错过就不再有。时间如此重要,所以人们都想在同一个时刻同时执行多件事情,做到并行,就可以毫不费力的提升系统的吞吐量,但是不能降低时延,这个道理冬瓜哥在之前的文章《IO时延你被骗了多久》中向大家解释过。

那么,如何让IO并发,什么场景必须并发,什么场景不必须?这里就很有讲究了。并发的例子很简单,去银行办业务,总会遇到某些窗口关闭不办业务,此时你肯定会想,如果所有窗口都打开该多好,就是这个道理。IO请求排队中,如果底层就那么几块硬盘,性能就上不来。

但是,更容易被忽略的一个问题,就是如果某个人要办理的业务把多个窗口都给占了,此时窗口再多也无济于事。如果某个IO请求需要所有磁盘一起为其读写数据,那么其他IO只能等待。

什么场景下需要并发执行?比如电商平台,100万人同时购买商品,如果系统不能并发,假设每笔购买请求需要1ms执行完毕,那么第100万个人点击购买按钮之后,要等待一百万毫秒也就是一千秒,大概10分钟,才能被执行,这显然不可接受,所以电商平台的系统都是大量机器并发执行。对于这种要求高并发、低时延的场景,磁盘IO也必须并发才能提升性能。

保证并发最好的做法就是让一个IO只占用一个盘而不是多个盘。对于机械磁盘,每块盘同一时刻只能执行一个IO,这一点与SSD显著不同,后者同一个时刻可以执行多个IO。同样的事情,CPU执行指令也是如此,能够同一个时刻执行多个指令的成为超标量执行。

所以,在并发场景下的条带深度调节方式,自然你也就明白了。如下图所示。IO size要小于条带深度,或者说,条带深度要设置成大于等于IO size。


值得一提的是,条带深度不能设置的过大,最好的情况是让其等于IO size。如下图所示,过大的话,由于IO访问的局部性,反而导致多个IO冲突在一个盘上,并发几率显著降低。



条带深度,条带宽度,chunck/block/slice/extent,这些概念到底都啥玩意。IO size又怎么获取?一般来讲条带深度就是一个条带在一块盘上所占的空间,条带深度乘以磁盘数量=条带宽度。至于chunck,slide之流,都是厂商故弄玄虚出来的让人略感高大上的词,蒙人的,至于厂商怎么定义的,看手册。IO Size要么根据经验,比如Oracle访问数据文件为8K IO居多;要么看存储系统给出的监控报告,比如4K的IO一段时间内占了80%,则可以将条带深度调节为4K。


LVM条带化就并发了么?幼稚!如果条带化到位于同一个Raid组的多个PV上,条带化是没用的,反而还会降低并发度。所以,只有条带化到位于不同raid组的PV之间时,相当于做了个raid50/60,此时才会提升性能。如下图所示。


最后,这个世界的底层,真的可以并行么?也就是同一个时刻,多件事情真的会同时发生么?冬瓜哥在直觉上,感觉底层也并非真的并发,而是像CPU执行线程一样,是时分复用的。据此,冬瓜哥在本公众号之前文章《时空参悟》中有个推测,因为运动也不能同时进行,所以,想一个方向运动到光速之后,系统内其他方向的运动分量全部被耗尽,体现为时间静止。如果你写了一个程序,进行软计时,而另一个程序写成一个死循环,你就会发现软计时程序计时变慢。有兴趣可以阅读该文,在这种浮躁的背景之下,也应该静下来思考思考了。


本文转载须全文转载,包括二维码和所有图片文字,并注明出自 大话存储 公众号。长按识别二维码关注 大话存储 获取业界最高逼格的存储知识。 看了好的请点赞/转发/红包,平时群里发红包装逼,不如把红包猛烈的砸向冬瓜哥吧!冬瓜哥后续会有更多高逼格的东西出炉。大话存储,只出精品。

长按图片发红包:

支付宝扫码发红包:

长按扫码关注“大话存储”


强赠冬瓜哥真容:

(请注意,冬瓜哥不是西瓜哥,这是两个人,很多人给混淆了,冬瓜哥很早就叫冬瓜了,某菊花司的某人2年前参考鄙人昵称在业界混淆视听,现在以至于很多人认为大话存储为那人所著,其目的一开始就是在冬瓜哥离开某菊之后消除冬瓜哥在某菊和业界的影响力,菊花黑寡妇作风是改不了了,冬瓜哥有图为证当年某人是怎么搅混水的)


阅读全文
0 0
原创粉丝点击