Bla*_*ret 5 linux virtual-memory ram
我试图了解大页面大小与数据实际写入 RAM 的方式之间的关系。
当进程使用 1GB 大页面时会发生什么 - 写入是否发生在 1GB 块中?我猜我对这个假设完全错误?
大页面用于分配内存块,而不是写入它们。
通常,当应用程序需要大量内存时,它们必须分配许多“页面”。页面只是一块物理内存。通常这个块只有几 KB。因此,当应用程序执行大量跨页的大量内存密集型操作时,内核必须将所有这些虚拟内存页转换为物理内存的成本很高。
为了优化这一点,内核提供了大页面,这些页面基本上是大于默认页面大小的分配。因此,不必分配数千个页面,只需分配几个页面即可。读取和写入仍然是正在读取或写入的任何大小。如果应用程序将一个 10 字节的字符串写入一个大页面,它仍然是一个 10 字节的写入。
内存写入的块大小定义不止一种。你可以认为它是:
这些都与页面大小无关。
页面大小是MMU 中页面的一个属性。MMU 将虚拟地址(由程序使用)转换为物理地址(指定内存中的物理位置)。将虚拟地址转换为物理地址的过程如下:
常见的 32 位架构经过两个表级别;常见的 64 位架构经过 3. Linux 最多支持 4 个级别。
某些 CPU 体系结构支持使某些页面更大,通过更少的间接级别。这使得访问速度更快,并保持页表的大小较小,但代价是内存分配的灵活性较低。对于大多数应用程序来说,时间增加是最小的,但是对于一些对性能敏感的应用程序,这些应用程序无法从小页面的灵活性中受益,例如数据库。大页面是指通过比正常数量更少的级别,并且相应地更大的页面。
使用大页面的软件通常会专门请求它们(通过标志到mmap
,请参阅如何在虚拟地址空间中确定页面大小?了解更多详细信息)。在这个初始请求之后,它不需要知道或关心页面大小。特别是,内存访问由 MMU 处理:访问时不涉及软件。
归档时间: |
|
查看次数: |
1157 次 |
最近记录: |