当前位置:2019年全年资料内部公开 > 缺页 >

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

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  如果是这个话,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是不是对程序影响很大就行了。

  看你老来提问,写了好多。。。。。。。追问其实我是想看一下linux下页面大小和命中率的关系。又因为命中率=1-缺页率,所以才想找出求缺页率的方法,继而求出命中率。如果知道的话,还请赐教!追答如果是你自己写测试程序,记录内存访问的次数,那应该是可以的,不然很难统计一个程序内存访问的次数。

  比如,可以每次随机生成一个地址,然后访问这个地址的内存,自己记录下这个总的访问次数。然后外面可以用前面的办法统计page fault的次数。这样就可以得到个比例。

  不过按照我的理解,page fault 跟程序实际使用的内存大小有关,为了看到page fault,你要你的程序的内存访问范围比实际的物理内存要大才行。 比如有512的物理内存,你可以申请2G的内存块,然后随机生成这个 0 ~2G这个范围的地址进行内存测试。

  但这个测试程序其实模拟的是随机访问对page fault的影响,但实际应用应该很少有这种随机的访问的吧。

  想了一下,如果总的内存固定, 不管page 大小是多少。 实际的可用内存和需要保存到磁盘中的内存比例应该是固定的。如果是真正的随机的话,总的命中率应该是一样的, 不过大的page 明显每次需要传输的内容比较多,代价比较大。

  什么是页故障:页面故障是要访问的页面不在主存中,操作系统需要被转移到主存储器,然后访问。内存访问期间,在主内存中访问的页面,访问取得成功,如果所访问的页面是不是在主内存中,然后失败的访问,并生成一个页面 页故障率:错。如果程序P的页面的总数为S的运行过程中被访问,并且其中产生页面错误中断访问次数为F,则页错误率:F / S。

http://boardflip.com/queye/377.html
点击次数:??更新时间2019-07-09??【打印此页】??【关闭
  • Copyright © 2002-2017 DEDECMS. 织梦科技 版权所有  
  • 点击这里给我发消息
在线交流 
客服咨询
【我们的专业】
【效果的保证】
【百度百科】
【因为有我】
【所以精彩】