谁能告诉我 Linux VM 可调参数中 dirty_bytes 和 dirty_background_bytes 的工作原理。
我推断 dirty_bytes 指定了应用程序执行写入操作后开始直接写入磁盘的内存量。是否正确,或者如果分配的内存量已用完,则该部分首先传输到磁盘,然后新数据再次存储在内存中。例如。假设我想将 1 GB 文件传输到磁盘,并将 dirty_bytes 设置为 100 MB,那么一旦将 100 MB 写入内存,执行写入操作的应用程序现在开始将数据直接写入磁盘,或者将 100 MB 传输到磁盘,然后再次将 100 MB 写入内存,然后传输到磁盘,依此类推?
在 dirty_background_bytes 的情况下,当脏内存部分超过此值时,pdflush 会在后台将脏数据写回磁盘。
我对这两个参数的理解正确吗?
最佳答案
不,超过dirty_bytes
(或dirty_ratio
)不会导致进程开始直接写入磁盘。
相反,当进程弄脏页面超过限制时,该进程将用于执行一些脏页面的同步写出 - 到底哪些脏页面仍然由通常的启发式方法决定。它们甚至不一定是最初被该特定进程弄脏的页面。
实际上,进程看到其写入(可能只是内存写入)暂停,直到发生某些写出。
您关于dirty_background_*
的说法是正确的。当超过后台限制时,启动异步写出,但允许用户空间进程继续。
关于memory - Linux虚拟内存参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6834929/