问题标签 [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.
mongodb - Mongodb:慢范围查询和太多页面错误
我已经在具有 96Gb RAM 的单个服务器上启动了 mongodb 实例。最大集合的 CollStats:
我决定用我自己的 long 类型的 _id 替换 ObjectId。我对索引大小感到很困惑。是太长了还是可以?
最严重的问题是极慢的范围查询。
解释:
日志中的慢查询:
锁太多了?
工作集:
这意味着缓存的数据每 3 秒被驱逐一次,不是吗?
mongostat 的输出中有太多页面错误:
查询有什么问题?我是否以某种方式重新组织索引以获得更好的范围查询性能?
lru - LRU 算法中的页面错误
我无法从我的编程讲座中理解某些内容。我知道页面替换算法有页面错误。
LRU算法中,什么时候会出现缺页?是在没有更多空闲帧的时候吗?是框架已经存在但也已经使用了吗?
我的演讲中有这张照片(我只剪掉了重要的部分,因为原件是另一种语言的):
这张图中的问题是“只有4帧,如果使用LRU算法,什么时候会出现页面错误?” 正如我所看到的,前 3 行有一个 x。这就是为什么我要问当还有空闲帧时是否发生页面错误?或者当我们需要“踢出”一帧时,页面错误是否只发生在红色 X 中?
linux - /usr/bin/time、htop等的mmap和输出基准测试
我有一个程序,它大量使用内存映射文件到虚拟内存,特别是比物理内存大得多的文件。
该程序的性能并不十分出色。鉴于设置,主要的页面错误可能是罪魁祸首。
所以我想知道这有多糟糕,并编写了一个程序来估计一个主要页面错误的影响。基本上,我映射一个几 GB 大小的文件并读取一些随机字节,同时测量读取字节所需的时间。
我可以很好地看到总体运行时间以及累积或直方图分析访问时间的巨大差异,具体取决于文件是否可能不在缓存中(echo 3 > /proc/sys/vm/drop_caches),以及何时在测试程序的第二次运行中已经在缓存中。
此外,我查看了以下数字的输出,/usr/bin/time -v
但这些数字令人困惑(为简洁起见,剪掉了一些行):
任何人都可以回答以下问题:
- 一个页面有 4k,我有 7672 个主要页面错误。这些是微不足道的 30MB。即使在(否则非常快的)smb 文件系统上,将它们分页也不应该超过 2 分钟。
- “文件系统输入”是什么意思?该程序不执行任何文件系统输入。它已经映射了这个 2.8 GB 的文件,但它没有 read()。这是读取次数还是以 kB 为单位?它是否与主要的页面错误有任何关系?
- 接近 100k 的次要页面错误与程序进行的 100k 探测(单字节读取)很好地对齐。在这台机器上我实际上不能drop_caches,我必须在不同的文件上运行程序来尝试推出数据。我可能没有工作。这可以解释我的页面错误大多是轻微的。但是为什么这需要这么长时间。100k 探测器对 2:17 分钟的粗略估计产生 1.37 毫秒。这是轻微页面错误的“正常”数量级吗?
编辑:我又尝试了一件事。我再次运行测试程序并用 strace 记录所有系统调用。我在探测期间看到的只是clock_gettime、gettimeofday、futex。根本没有 read(2),所以我更想知道 /usr/bin/time 提供的“文件系统输入”、主要和次要故障编号是如何相互关联的。
c - 读取大文件时出现页面错误
我正在使用 4GB ram 的系统。我创建了一个 4GB 的大文件并用零初始化它。
我开始按整数读取大文件整数。
我发现页面错误(主要)的数量为零,无论文件有多大。
我使用 FILE 指针和文件描述符读取文件。在这两种情况下,我都没有发现任何页面错误(主要)。
为什么会这样?程序中的页面错误是否仅在发生内部交换时发生?
如果是,您能否推荐一个会导致页面错误的 C 程序。
我正在使用 Ubuntu 12.04,我的计算机规格:4GB 内存,500 GB 硬盘
提前致谢
operating-system - 处理缺页陷阱后的指令指针值
老实说,我真的对这个特定的虚拟内存相关概念感到困惑。
Q1) 发生缺页时,处理器是否先完成当前指令的执行,然后再将IP寄存器的内容(下一条指令的地址)移入堆栈?或者,它中止当前正在执行的指令并将指令指针寄存器的内容移动到堆栈?
Q2)如果第二种情况为真,那么它如何恢复被中止的指令,因为当它恢复时,堆栈包含的指令指针值只是下一条指令的地址。所以它永远不会恢复发生页面错误的指令。
我认为
我认为第二种情况听起来是错误的。我在阅读 Silbershatz 和 Galvin 的操作系统原理时发生了困惑。他们已经写了
当发生页面错误时,我们将不得不引入所需的页面,更正页表并重新启动指令。
但是指令指针总是指向下一条指令的地址,所以这意味着,根据这本书试图传达的内容,我们正在减少 IP 的值只是为了重新开始执行发生页面错误的指令?
list - FIFO 页面替换算法 - 计数页面错误
我目前正在阅读有关页面替换算法的内容,并且一直在查看有关 FIFO(先进先出)方法的几个示例。
我的问题如下;您如何计算页面错误的数量,因为我看到了不同的做法。
例如: 示例 1(第 9 页)和示例 2采用完全相同的顺序。第一个计算页面错误的数量为 12,而第二个声明该数量为 15。它们使用相同数量的帧,3。
顺序是:
因此,我的问题是;哪种方法是正确的方法?您是否将前三个实例视为页面错误?
如果是这样,给定顺序:
任何帮助将不胜感激。感谢你们!
linux - 当用户应用程序发生页面错误时,内核处理此错误时的当前 pid 是多少
我像这样运行一个用户应用程序:
我认为它肯定会触发页面错误,因为 malloc 在我们接触这些数据之前不会分配真正的物理空间。
我修改了 linux kernel(3.17.6) mm/memory.c : handle_pte_fault() 像这样
这里“tartgetPid”是我传入内核的用户应用程序 pid,“current”是内核的宏
但是这条线从未触发,因为当内核处理页面错误时,当前的 pid 不会是触发页面错误的用户应用程序的 pid。
我想问当用户应用程序中发生页面错误时,内核处理此错误时的当前pid是什么
c - 计算二维数组中的页面错误数
//1)
// 2)
考虑二维数组 A: int A[1024][1024]
; 每页有4kb(而大小int
为 4byte)。一个操作矩阵的小进程驻留在页面 0(位置 0 到 1023)中。因此,每条指令都将从第 0 页开始。
对于两个页框,使用 FIFO、LRU 和最优替换并假设第一个页框包含进程而另一个页框最初为空,以下数组初始化循环会生成多少页错误?
operating-system - 当页面错误发生时,操作系统从哪里获得所需的磁盘地址?
当页表条目(PTE)没有被标记为有效时,这意味着所需的数据不在内存中,而是在磁盘上。所以现在页面错误发生了,操作系统负责将这一页数据从磁盘加载到内存中。
我的问题是,操作系统如何知道确切的磁盘地址?
c# - 如何故意造成页面错误?
我有一个使用多线程抓取网页的 Windows 服务,有时由于 TCP 窗口已满,我会重置连接。我怀疑这与连接重置时发生的页面错误有关。我认为线程中的页面错误导致的延迟关闭了网络连接。是否有可能在抓取网页时以某种方式导致页面错误,以便我可以证明我的理论?