15----Linux原理及应用--存储管理要点分析.pptVIP

15----Linux原理及应用--存储管理要点分析.ppt

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 3.4.4分配与回收——页交换进程和页面换出 内核态交换进程将通过三个途径来减少系统中使用的物理页面的个数: 减少buffer与page cache的大小, 将系统V类型的内存页面交换出去, 换出或者丢弃进程占用的页面。 参见 mm/vmscan.c 中的 kswapd() 如果系统中空闲页面数低于free_pages_low,核心交换后台进程将在下次运行之前释放6个页面。否则它只释放3个。以上三种方法将依次使用直到系统释放出足够的空闲页面。当内核态交换进程试图释放物理页面时它将记录使用的最后一种方法。下一次它会首先运行上次最后成功的算法。 3.4.4分配与回收——页交换进程和页面换出 当释放出足够页面后,核心交换后台进程将再次睡眠到下次定时器到时。如果导致核心交换后台进程释放页面的原因是系统中的空闲页面数小于free_pages_low,则它只睡眠平时的一半时间。一旦空闲页面数大于 free_pages_low则核心交换进程的睡眠时间又会延长。 3.4.4分配与回收——减少Page Cache和Buffer Cache的大小 Page Cache和Buffer cache中的页面将被优先考虑释放到free_area数组中。Page Cache中包含的是内存映射文件的页面,其中有些可能是不必要的,它们浪费了系统的内存。而Buffer Cache中包含的是从物理设备中读写的缓冲数据,有些可能也是不必要的。当系统中物理页面开始耗尽时,从这些cache中丢弃页面比较简单(它不需要象从内存中交换一样,无须对物理设备进行写操作)。除了会使对物理设备及内存映射文件的访问速度降低外,页面丢弃策略没有太多的副作用。如果策略得当,则所有进程的损失相同。 3.4.4分配与回收——减少Page Cache和Buffer Cache的大小 每次核心交换后台进程都会尝试去压缩这些cache。 它首先检查mem_map页面数组中的页面块看是否有可以从物理内存中丢弃出去的。当系统中的空闲页面数降低到一个危险水平时,核心后台交换进程频繁进行交换,则检查的页面块一般比较大。检查的方式为轮转,每次试图压缩内存映象时,核心后台交换进程总是检查不同的页面块。这是众所周知的clock算法,每次在整个mem_map页面数组中对页面进行检查。 3.4.4分配与回收——减少Page Cache和Buffer Cache的大小 核心后台交换进程将检查每个页面看是否已经被page cache或者buffer cache缓冲。共享页面不在被考虑丢弃的页面之列,这种页面不会同时出现在这两种cache中。如果页面不在这两者中任何一种之中时,它将检查mem_map页面数组中的下一个页面。 参见 mm/filemap.c shrink_map() 缓存在buffer cache(或者页面中的缓冲被缓存)中的页面可以使缓冲分配和回收更加有效。内存压缩代码将力图释放在受检页面中包含的缓冲区。 3.4.4分配与回收——减少Page Cache和Buffer Cache的大小 如果页面中包含的所有缓冲区都被释放,这个页面也将被释放。如果受检页面在Linux的page cache中,则它会从page cache中删除并释放。 参见 fs/buffer.c free_buffer() 如果释放出来了足够的页面,核心交换后台进程将等待到下一次被唤醒。这些被释放的页面都不是任何进程虚拟内存的一部分,这样无须更新页表。如果没有足够的缓冲页面丢弃则交换进程将试图将一些共享页面交换出去。 补充:buffer cache 和page cache的比较 buffer cache:当一个磁盘块被调入内存时,它首先存放在一个缓冲区中,每个缓冲区与一个磁盘块对应,它相当于磁盘块在内存中的表示,每个缓冲区都有一个对应的描述符,叫做buffer_head。缓冲区头的目的在于描述磁盘块和物理内存缓冲区之间的映射关系。buffer cache的内容对应磁盘上一个连续的区域,一个buffer cache大小可能从512B(扇区大小)到一个页。 page cache是由内存中的物理页组成的,缓存中的每一页对应着磁盘中的多个块。这些块不一定在磁盘上连续。其核心数据结构为address_space。在执行I/O操作,比如 read()操作,内核首先会检查数据是否已经在页高速缓存中,如果在,那么内核就可以马上从页高速缓存中得到所需要的页,而不需要从磁盘中读取数据了。 补充:buffer cache 和page cache的比较 系统在读磁盘文件时,是以块为单位读取,并放在内存中(buffer cache),由buffer_head或bio记录其映射信息。由几个块构成一页(page cache),由addre

文档评论(0)

南非的朋友 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档