问题标签 [page-fault]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2007 浏览

linux - Linux 内核可以为自己的缓冲区使用可分页(可交换)内存吗?

如果问题的答案是否定的,为什么这样做不是一个好主意?内核不能处理和修复内核模式下发生的页面错误吗?如果使用可分页内存的代码仅作为中断下半部分的一部分执行,答案是否会改变?

谢谢!

0 投票
1 回答
935 浏览

mongodb - MongoDB、NUMA 硬件、页面错误但有足够的 RAM 用于工作集、触摸命令或 vmtouch/dd 未加载到内存中

MongoDB 2.46 和 2.4.8

用例:

  1. 在具有 2 个索引的集合上加载 100.000 个文档。常驻内存增加(mongostat),并且不会发生页面错误。
  2. 重启 mongod。常驻内存低(这是预期的)
  3. 尝试使用触摸命令 db.runCommand({ touch: collection, data: true, index: true })或其他方式“预热”mongo(在操作系统上,vmtouch / dd上)
    a)在这一步,在我的开发机器上( MacOS),我在 mongostat 中看到很多页面错误试图加热它(预期的)并且驻留内存被提升。从那时起,任何更新都不会引发页面错误
    b)在 numa 服务器(256 GB RAM)上,即使我使用本指南启动 mongo:http: //docs.mongodb.org/manual/administration/production-笔记/#mongodb-on-numa-hardware(注意:我没有超级用户访问权限。但是,第二步,在 /proc/sys/vm/zone_reclaim_mode 中回显 0,已经是 0,所以我就这样离开了),我似乎无法预热使用“触摸”命令记忆。没有任何反应,即使它成功返回。在 mongostat 中,只有 'mapped' 和 'vsize' 越来越高,并且驻留内存相同 (35m)。我什至尝试使用 vmtouch 和 dd 命令加载操作系统内存中的数据文件。仅重新索引集合会更改常驻内存。

在我开始将数据加载到服务器后一段时间,问题就开始了。我做了很多 upserts,一开始的性能很棒(3000 - 4000 upserts/sec)。这是意料之中的,因为工作集将能够放入内存中。在 30.000.000 个文档之后,该过程似乎产生了很多页面错误,我不知道为什么。数据文件约为。33GB,性能约为 500 upserts/sec,有很多页面错误。这应该意味着工作集不在内存中。但是,256GB RAM 应该绰绰有余. 我尝试了 'touch' 命令,但常驻内存很低(我什至重新启动了 mongod 进程,运行了 touch 命令,即使 'mapped' 和 'vsize' 飙升到很多 GB,常驻内存仍然很低,35m) . 我试图重新索引集合,瞧,常驻内存从 35m -> 20GB。但是,我再次看到页面错误。然后我尝试 vmtouch 数据文件(或使用 dd)。同样,很多页面错误。

问题是我不能'只有' 500 upserts/sec。我应该改变我的应用程序逻辑吗?我认为使用 256GB 内存,我的“活动”工作集(预计为 60GB)应该适合内存。我在中间(30GB),似乎我无法解决这个问题。是numa硬件吗?我应该进行任何其他更改吗?

提前致谢

0 投票
1 回答
245 浏览

android - Android非法内存访问 - 谁以及如何处理?

我正在尝试调试由于无效的内存访问而导致应用程序触发连续数据中止的问题。

我有以下疑问。

  1. 一般来说,当Android(CPU ARM)中的应用程序正在访问无效的内存访问时,会发生什么?

    我猜会发生页面错误,然后会触发数据中止。是这样吗?有人可以简要解释一下 Android 如何处理无效的内存访问吗?

  2. 进行非法内存访问的进程会发生什么?它是一次又一次地重新启动还是被杀死?谁来处理这个?

我想要一些对代码的引用(仅在可能的情况下)。谢谢你。

0 投票
1 回答
537 浏览

assembly - 处理器如何知道一个页面没有映射到主存中,而是在后备存储中?

在 X86 体系结构中,处理器如何知道页面没有映射到主存中,而是在后备存储中,它们是页表条目中的标志,还是仅在处理器实现的物理地址转换之后框架的位置?据我了解,当页面结构条目中的“P”标志被设置时,它表示逻辑地址的有效映射不存在并且出现页面错误,以防映射存在但页面在后备存储中也发生页面错误并且页面被交换到内存并且页表条目被修改。

0 投票
1 回答
594 浏览

delphi - Delphi + Indy 导致高页面错误和 RAM 使用率

我遇到了一个奇怪的问题。

我使用 Delphi 和 Indy 上传和备份一些文件。它在许多计算机(Win7 64bit,WinXP)上运行得很好。CPU 使用率低于 1% 和最大值。20MB 内存。

但是有一台计算机(Win 2008 R2)有问题,我不知道为什么。CPU 使用率为 5-20%,它占用 100MB 以上的 RAM,而且增加了很多。此外,“页面错误”上升了很多,例如。每秒 100 000 次(在我的计算机上没有增加)

代码很简单

有人知道为什么“页面错误”会增加很多吗?是否可能存在一些硬件问题?如何找到它?

0 投票
1 回答
138 浏览

mongodb - MongoDB 是否在索引页面错误时产生锁定?

在更新过程中,如果需要更新的索引部分不在内存中,MongoDB会在索引缺页期间产生写锁吗?

该文档提到了页面错误时的产量。它是否也适用于索引中的页面错误或仅适用于文档?

0 投票
1 回答
2476 浏览

linux - 如何使用 vm_operations 结构来拦截特定页面集的页面错误?

我想创建一个内核模块,当给定进程的 id 时,它可以查找其任务结构,然后查找其内存映射。当它发现它应该附加一个函数来为一组特定的页面(即堆页面)提供页面错误。

0 投票
3 回答
5873 浏览

c - 从 ac 程序测量页面错误

我正在比较一些我从/向内存读取/写入的系统调用。是否定义了任何 API 来测量页面错误(页面输入/输出)C

我找到了这个库 libperfstat.a但它是AIX用于 linux 的,我找不到任何东西。

编辑: 我知道 linux 中的time&perf-stat命令,只是探索是否有任何东西可供我在C程序中使用。

0 投票
1 回答
1630 浏览

c - read() system call page fault doesn't depend on file size

I am reading different sized files (1KB - 1GB) using read() in C. But everytime I check the page-faults using perf-stat, it always gives me the same (almost) values.

My machine: (fedora 18 on a Virtual Machine, RAM - 1GB, Disk space - 20 GB)

My code:

Perf-stat output: (shows file size, time to read the file and the # of page faults)

Questions:
1. How can the page-faults for a file read() of size of 1KB & 1GB be same ? Since I am reading the data too (code line #84), I am making sure the data is being actually read.
2. The only reason that I can think of that it doesn't encounter that many page-faults is because the data is already present in the main memory. If this is the case, how can I flush it so that when I run my code it actually shows me the true page-faults ? Otherwise I can never measure the true performance of read().

Edit1:
echo 3 > /proc/sys/vm/drop_caches doesn't help, the output still remains the same.

Edit2: For mmap, the output of perf-stat is:

0 投票
0 回答
75 浏览

assembly - 将非双字参数传递到堆栈会导致页面错误?

我目前正在阅读欧文第 6 版。教自己组装,我在第 277 页遇到了这句话(第 8.2.2 节,“访问堆栈参数”,子标题“在堆栈上传递 8 位和 16 位参数”),它指出:

“虽然您可以将 16 位操作数压入堆栈,但这样做会阻止 ESP 在双字边界上对齐。可能会发生页面错误并且运行时性能可能会降低。”

我知道由于内存访问的粒度,未对齐的内存访问可能会导致性能问题,但我不明白为什么会发生页面错误。据我了解,当进程对当前未加载到物理内存中的虚拟内存中的位置进行内存访问时,会发生(硬)页面错误。

1.因此,引用是否说堆栈可能同时存在于多个页面中,并且未对齐可能会使后续的内存访问超出页面边界?

2.如果我已经回答了我自己的问题,将堆栈大小分配为正好是一页的大小(即,使用.STACK 4096MASM 中的指令)会强制堆栈恰好在一页上连续存在,从而消除这个问题吗?或者堆栈可能仍然驻留在两个不同的页面上?

3.如果后者为真,那么填充数据(这是建议的)是否仍然会导致页面错误?例如:如果 16 字节变量是 'val1',并且我们想要访问它后面的一个名为 'val2' 的 dword,并且堆栈驻留在两个页面中,页面对齐到 0x1000:

Before padding After padding           ---------------- ----------------          0x1002 | [val1] | 0x1002 | [ PADDING ] |          0x1000 | [val2 high] | 0x1000 | [val1] |          --PG BOUNDARY--- ---PG BOUNDARY--          0x0FFE | [val2 low ] | PG FAULT! 0x0FFE | [val2 high] |PG FAULT! 0x0FFC | [irrelevant] | 0x0FFC | [val2 low ] |          ---------------- ----------------        

谢谢!(对不起所有的条件问题,如果我想太多了)