memory - Linux虚拟内存参数

标签 memory linux-kernel

谁能告诉我 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/

相关文章:

optimization - CUDA 中带宽的含义及其重要性

c - 代码行澄清

c++ - 从 C++ 设置变量时 QML 内存泄漏

swift - 加载 Collection View 时节省内存

timer - 实时 Linux : disable local timer interrupts

linux - 无法处理虚拟地址处的内核分页请求...自定义板

python - 如何获得最大可能的精度? (Python - 十进制)

linux-kernel - POSIX:如何在线程之间执行上下文切换?

c - 在 Linux 内核中设置或清除位的平台独立方式

c - 如何在一个内核模块中包含三个 IRQ 处理程序?