当前位置: 技术问答>linux和unix
磁盘控制器是通过DMA来传输数据的?
来源: 互联网 发布时间:2017-01-20
本文导语: 如果开启了O_DIRECT 磁盘控制器是通过DMA来传输数据的? 如果不是 就不是通过DMA方式了 而是采用缓存的方式 不知道 这样理解对不对? | 不要被过时的书欺骗了 什么叫linux的DMA是低端内存 啊,在I...
如果开启了O_DIRECT 磁盘控制器是通过DMA来传输数据的?
如果不是 就不是通过DMA方式了 而是采用缓存的方式
不知道 这样理解对不对?
如果不是 就不是通过DMA方式了 而是采用缓存的方式
不知道 这样理解对不对?
|
不要被过时的书欺骗了
什么叫linux的DMA是低端内存 啊,在ISA总线的时代就算windows也只能用低端内存做DMA
无论是否使用O_SYNC,内核跟磁盘的读写都不会变
如果硬件设置支持dma,自然会用dma,如果磁盘太古老,只能用PIO
|
O_DIRECT (Since Linux 2.4.10)
Try to minimize cache effects of the I/O to and from this file. In general this will degrade performance, but it is useful in special sit‐
uations, such as when applications do their own caching. File I/O is done directly to/from user space buffers. The O_DIRECT flag on its
own makes at an effort to transfer data synchronously, but does not give the guarantees of the O_SYNC that data and necessary metadata are
transferred. To guarantee synchronous I/O the O_SYNC must be used in addition to O_DIRECT. See NOTES below for further discussion.
A semantically similar (but deprecated) interface for block devices is described in raw(8).
也就是连内核级别的缓冲都不用了,性能会下降,如果用户喜欢自己做足够的缓冲的话用一下也是可以的,不过这种同步写和O_SYNC是不同的,O_SYNC保证元数据会正确的缓冲在内核,尽量减少数据损失,并且实际写磁盘后才返回。但DIRECT并不能提供基本保障,因为它完全没缓冲。 所以,这两个参数通常一起使用,缓冲元数据,并且绕过内核缓冲。
|
楼上说的没错啦。
你说的磁盘缓存机制和DMA没有关系的。
现在一般的DMA应该都是支持32位地址了。
你说那个缓存是文件系统或者block驱动层的,
就算你block驱动层不使用缓存,到了下面的磁盘驱动里面哪里还是会使用DMA来进行的。
你说的磁盘缓存机制和DMA没有关系的。
现在一般的DMA应该都是支持32位地址了。
你说那个缓存是文件系统或者block驱动层的,
就算你block驱动层不使用缓存,到了下面的磁盘驱动里面哪里还是会使用DMA来进行的。