linux下程序在运行过程中访问主存的总次数和缺页次数怎么求?

linux下程序在运行过程中访问主存的总次数和缺页次数怎么求?,第1张

不知道你从哪里看到的一个 缺页率的概念。

微软的文档 只说page fault per second

http://technet.microsoft.com/en-us/library/cc768048.aspx。

SAP的文档 http://help.sap.com/saphelp_nw04/helpdata/en/84/7ed390d81f11d188be0000e83539c3/content.htm

这里有个缺页率的说法? 指的其实就是 Pages Input/sec 。

如果是这个话,linux你可以用ps 命令,top 命令, perf命令之类查看这几个值,然后算一下每秒个数吧。我在另外一个帖子已经回复你了。

-----------------------------------------------

至于你这里说的 主存的总次数,这个东西几本不可能统计的出来。你知道内存都是分为一个page 一page,比如说4k的大小。 但程序内存访问肯定不是每次都是4k大小的。

cpu是有写内存访问相关的硬件计数信息,这个可以通过一些性能测试工具,可以算出cpu上的内存带宽。但这个其实和你那恶主存总访问次数关系不大,因为我看你这个是想用来计算所谓的“缺页率”的。内存访问其实很多时候都不是在一个page上面连续的。有可能地址是离散的,没法统计什么的主存访问计数。

另外cpu的cache有很多级,L1 cache , L2 L3 cache扽。真正的到达 主存的其实已经很少了,最求程序性能其实很多 时候关注的是 L1 L2 这些级别缓存的命中率。这些都可以通过性能测试工具读取得到。

------------------------------------

至于为什么有page fault可以有很准确的计数,是因为发生page fault的时候,硬件会通过中断通知系统内核。 然后其实微软的文档说的 page input , page output等都是说的swap交换内存到磁盘的磁盘 *** 作。这个信息前面的帖子我前面也给你列出来了。还有vmstat这些命令应该也是可以看到 swap分区的使用情况的。

这东西其实没必要那么死扣字眼,理解原理就可以了。想page fault这个,就知道为什么会影响性能,怎么判断page fault是不是对程序影响很大就行了。

看你老来提问,写了好多。。。。。。。

(1) FIFO

1  2 3  4  1 2  5  1 2  3  4  5

----------------------------------------

1  2 3  4  1 2  5  5 5  3  4  4              

    1 2  3  4 1  2  2 2  5  3  3                该行是怎么算出来的?  

        1 2  3  4 1  1  1 2  5  5                该行是怎么算出来的?

----------------------------------------

缺页中断次数=9                               

FIFO是这样的:3个内存块构成一个队列,前3个页面依次入队(3个缺页),内存中为3-2-1;

接着要访问4号页面,内存中没有(1个缺页),按FIFO,1号页面淘汰,内存中为4-3-2;

接着要访问1号页面,内存中没有(1个缺页),按FIFO,2号页面淘汰,内存中为1-4-3;

接着要访问2号页面,内存中没有(1个缺页),按FIFO,3号页面淘汰,内存中为2-1-4;

接着要访问5号页面,内存中没有(1个缺页),按FIFO,4号页面淘汰,内存中为5-2-1;

接着要访问1号页面,内存中有(命中),内存中为5-2-1;

接着要访问2号页面,内存中有(命中),内存中为5-2-1;

接着要访问3号页面,内存中没有(1个缺页),按FIFO,1号页面淘汰,内存中为3-5-2;

接着要访问4号页面,内存中没有(1个缺页),按FIFO,2号页面淘汰,内存中为4-3-5;

接着要访问5号页面,内存中有(命中),内存中为4-3-5;

缺页中断次数=9 (12次访问,只有三次命中)

LRU不同于FIFO的地方是,FIFO是先进先出,LRU是最近最少用,如果1个页面使用了,要调整内存中页面的顺序,如上面的FIFO中:     

接着要访问1号页面,内存中有(命中),内存中为5-2-1;

在LRU中,则为

接着要访问1号页面,内存中有(命中),内存中为1-5-2;

最简单的一个命令是

cat a.log |grep "str123" |wc -l

如果是某个文件夹内的,

就可以到这个文件夹后

cat *.* |grep "str123" |wc -l


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8537985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存