2011-07-26 59 views
3

任何人都可以告诉我在Linux VM可调参数中的dirty_bytes和dirty_background_bytes的工作情况。linux虚拟内存参数

我推断dirty_bytes指定应用程序正在执行写操作的内存量,它开始直接写入磁盘。它是正确的还是分配的内存量已用完,该部分首先传输到磁盘,然后再次将新数据存储在内存中。例如。假设我想将1 GB的文件传输到磁盘,并将dirty_bytes设置为100 MB,然后一旦将100 MB写入内存,正在写入的应用程序现在开始将数据直接写入磁盘,或者将100 MB传输到磁盘磁盘,然后再将100 MB写入内存,然后传输到磁盘等?

而且在dirty_background_bytes的情况下,当脏内存部分超过这个数时,pdflush会在后台将脏数据写回磁盘。

我理解这两个参数是否正确?

回答

6

否,超过dirty_bytes(或dirty_ratio)不会导致进程开始直接写入磁盘。

相反,当一个进程弄脏超出限制的页面时,该进程将用于执行一些脏页的同步写入 - 确切地哪些仍然由通常的启发式决定。它们可能不一定是那些原本被这个特定过程弄脏的页面。

实际上,进程看到它的写入(可能只是内存写入),直到发生一些写入操作为止。

您对dirty_background_*正确。当超过后台限制时,异步写入开始,但用户空间进程允许继续。

+0

感谢caf ...这使得它更加清晰。 – randy7

+0

并且由于dirty_background_bytes和dirty_bytes控制写入缓存,是否有任何参数或任何方式来控制读取缓存的大小? – randy7

+0

@ randy7:'swappiness'参数通过替换不活动的匿名页面和从页面缓存中回收来调整回收内存之间的平衡。这里较小的数字会使内核更喜欢页面缓存回收。 – caf