Page Faults/sec & Pages/sec

Pages Input/sec 是为了解决硬错误页,从硬盘上读取的页数,而Page Reads/sec 是为了解决硬错误,从硬盘读取的次数。如果 Page Reads/Sec 比率持续保持为 5,表示可能内存不足。

  Page Faults/sec 是指处理器中“页面错误”的数量。当一个进程引用不在主存储器“工作集” 中的虚拟内存页时,就会发生页面错误。如果该页面在 Standby 列表上,因而已在主存储器中,或者如果另一个与其共享该页面的进程正在使用该页,那么发生“页面错误”时,不会从磁盘读取该页面。

  Pages Input/sec 是指内存引用时页面不在内存,为解决这种情况而从磁盘读取的页面数量。此计数器包含页面流量,它代表为应用程序访问文件数据分配的系统缓存。如果您担心过 量的内存压力(即,系统颠簸)以及可能造成的过量调页,那么这是个需要查看的重要计数器。

  Pages Output/sec 是指因主存储器中的页面已修改而写入磁盘的页面数量。

  Pages/sec 是指引用不在内存中的页面时,为解决这一问题,从磁盘读取或写入到磁盘的页面数量。它是 Pages Input/sec 与 Pages Output/sec 之和。此计数器包含页面流量,它代表为应用程序访问文件数据分配的系统缓存。该值还包括取自或保存到非高速缓存的映射内存文件的那些页面。如果您担心过量 的内存压力(即,系统颠簸),以及可能造成的过量调页,那么,这是个需要查看的主要计数器。在 WTS 测试中 观察到的结果表明,内存瓶颈对系统性能的影响比 CPU 瓶颈的影响严重得多。出现 CPU 瓶颈时,仍会处理所有的客户请求,但处理速度变慢。受 CPU 限制的机器上的所有客户均可以继续操作,只是在处理过程中,会有持续几秒的定期暂停。   在受内存限制的 WTS 中,测试已表明,只要可用的物理系统 RAM 已达到某个水平,系统就会开始从转换文件读取页面和写入页面。在物理系统 RAM 的数量达到临界水平后,WTS 就会充斥大量转换文件的调页信息。由于影响很大,所以应密切观察内存的使用情况。

  最重要的两个性能计数器是 Available Bytes 和 Page Inputs/sec。如果观察到 Page Outputs/Sec 和 Page Inputs/Sec 有上升的趋势,则系统中可能存在内存瓶颈。当处理器向内存指定的位置请求一页(可能是数据或代码)出现错误时,这就构成一个Page Fault。如果该页在内存的其他位 置,该错误被称为软错误(用Transition Fault/sec 计数器衡量);如果该页必须从硬盘上重新读取时,被称为硬错误。许多处理器可以在有大量软错误的情况下继续操作。但是,硬错误可以导致明显的拖延。 Page Faults/sec 是处理器每秒钟处理的错误页(包括软错误和硬错误)。

 

notes:  貌似看来,Page Faults/sec - Pages Input/sec = Soft Page Faults/sec ? 再看段时间来做结论

这段代码是一个使用FIFO算法实现页面置换的程序,以下是详细解释并带有注释的代码: ```c #include <stdio.h> #include <stdlib.h> #define MAX_FRAMES 10 // 定义内存物理块最大数量为10 int main() { printf("\n"); printf("* \n"); printf(" FIFO算法 \n"); // 输出算法名称 printf(" *\n"); printf("\n"); int frames[MAX_FRAMES], pages[MAX_FRAMES]; // 定义两个数组,frames用于存放内存物理块,pages用于存放页面 int num_frames, num_pages, page_faults = 0, hit_count = 0; // 定义一些变量,num_frames为内存物理块数量,num_pages为页面数量,page_faults为缺页数,hit_count为命中数 int frame_index = 0, page_index = 0; // 定义两个变量,frame_index用于表示当前要替换的内存物理块下标,page_index用于表示当前要访问的页面下标 int i=0,j=0; printf("输入内存物理块数: "); scanf("%d", &num_frames); // 输入内存物理块数量 printf("输入页面数: "); scanf("%d", &num_pages); // 输入页面数量 printf("输入页面序列:\n"); for ( i = 0; i < num_pages; i++) { scanf("%d", &pages[i]); // 输入页面序列 } for ( i = 0; i < num_frames; i++) { frames[i] = -1; // 初始化内存物理块数组,全部赋值为-1 } for ( i = 0; i < num_pages; i++) { int page_found = 0; // 定义一个变量,用于表示当前访问的页面是否已经在内存物理块中 // Check if page is already in frame for ( j = 0; j < num_frames; j++) { if (frames[j] == pages[i]) { // 如果当前访问的页面已经在内存物理块中,将page_found置为1 page_found = 1; hit_count++; // 命中数加1 break; } } // If page not found, replace the oldest page in frame with new page if (!page_found) { // 如果当前访问的页面不在内存物理块中 frames[frame_index] = pages[i]; // 将当前要替换的内存物理块替换成当前要访问的页面 frame_index = (frame_index + 1) % num_frames; // 更新要替换的内存物理块下标 page_faults++; // 缺页数加1 // Print the current state of frames for ( j = 0; j < num_frames; j++) { // 输出当前内存物理块的状态 printf("%d ", frames[j]); } printf("\n"); } } float hit_rate = (float) hit_count / num_pages * 100; // 计算命中率 float miss_rate = (float) page_faults / num_pages * 100; // 计算缺页率 printf("缺页数: %d\n", page_faults); printf("缺页率: %.2f%%\n", miss_rate); printf("命中数: %d\n", hit_count); printf("命中率: %.2f%%\n", hit_rate); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值