5分钟搞懂Linux中直接I/O原理
该函数将要读可能要写的数据举办拆分,并搜查缓冲区对齐的环境。本文在前边先容 open() 函数的时辰指出,行使直接 I/O 读写数据的时辰必必要留意缓冲区对齐的题目,从上边的代码可以看出,缓冲区对齐的搜查是在 __blockdev_direct_IO() 函数里边举办的。用户地点空间的缓冲区可以通过 iov 数组中的 iovec 描写符确定。直接 I/O 的读操纵可能写操纵都是同步举办的,也就是说,函数 __blockdev_direct_IO() 会一向比及全部的 I/O 操纵都竣事才会返回,因此,一旦应用措施 read() 体系挪用返回,应用措施就可以会见用户地点空间中含有响应数据的缓冲区。可是,这种要领在应用措施读操纵完成之前不能封锁应用措施,这将会导致封锁应用措施迟钝。 直接I/O 利益最大的利益就是镌汰操纵体系缓冲区和用户地点空间的拷贝次数。低落了CPU的开销,和内存带宽。对付某些应用措施来说的确是福音,将会大大进步机能。 直接I/O 弱点直接IO并不总能让人快意。直接IO的开销也很大,应用措施没有节制好读写,将会导致磁盘读写的服从低下。磁盘的读写是通过磁头的切换到差异的磁道上读取和写入数据,假如必要写入数据在磁盘位置相隔较量远,就会导致寻道的时刻大大增进,写入读取的服从大大低落。 总结直接IO方法确实可以或许镌汰CPU的行使率以及内存带宽的占用,可是偶然辰也会造成机能的影响。以是在行使直接IO之前必然要清晰它的道理,只有在各项都清楚的环境下,才思量行使。本人只是先容了道理,如想深入,提议参考内核相干文档。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |