gpt4 book ai didi

linux - mmap'ed内存何时以及如何换入和换出?

转载 作者:IT王子 更新时间:2023-10-29 00:24:08 31 4
gpt4 key购买 nike

以我的理解,mmap 一个适合 RAM 的文件就像将文件放在内存中一样。

假设我们有 16G 的 RAM,我们首先 mmap 一个我们使用了一段时间的 10G 文件。这在访问方面应该是相当有效的。如果我们然后映射第二个 10G 文件,是否会导致第一个文件被换出?还是其中的一部分?如果是这样,这将在什么时候发生?在 mmap 调用时,还是在访问新加载文件的内存区域时?

如果我们想再次访问第一个文件指针的内存,是否会再次加载交换文件?那么,假设我们在对应于第一个文件和第二个文件的内存之间交替读取,这会导致灾难性的性能吗?

最后,如果以上任何一条为真,mmap 几个较小的文件会更好吗?

最佳答案

如前所述,您的文件将按页面访问;在 x86_64(和 IA32)架构上,一个页面通常为 4096 字节。因此,在 mmap 时间加载的文件很少(如果有的话)。第一次访问任一文件中的某个页面时,内核将生成一个 page fault。并加载你的一些文件。内核可能会预取页面,因此可能会加载多个页面。它是否这样做取决于您的访问模式。

一般来说,如果你的 working set 表现不错适合内存。也就是说,如果您只是定期访问两个文件中的 3G 文件,那么只要您的进程有 3G 的 RAM 可用,通常情况应该没问题。

在 64 位系统上,没有理由拆分文件,如果您需要的部分适合 RAM 就没问题。

请注意,如果您映射现有文件,则不需要交换空间来读取该文件。当一个对象由文件系统上的文件支持时,内核可以从该文件而不是交换空间读取。但是,如果您在对 mmap 的调用中指定 MMAP_PRIVATE,则可能需要交换空间来保存更改的页面,直到您调用 msync。

关于linux - mmap'ed内存何时以及如何换入和换出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43541420/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com