暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

page fault的两种区别(major、minor)

digoal 2020-12-15
2346

作者

digoal

日期

2020-12-15

标签

PostgreSQL , linux , page fault


背景

page fault缺页异常分为两种类型,一种叫做major page fault,这种类型的缺页可以通过 Disk IO来满足,另一种叫做minor page fault,这种缺页可以直接利用内存中的缓存页满足。

区别

对于IO子系统来说,内核中的分层结构从上到下:

VFS--> EXT4/EXT3-->Page Cache--> General Block Layer --> IO Scheduler --> Disk Driver

那么如果访问一个地址时,与该地址空间vma绑定的数据还存在于Disk上,那么此时即会触发一次major fault;如果访问一个地址时,与之绑定的vma对应的地址空间已经被内核加载到了Page Cache中,那么此时只需要把该Page映射到vma中即可,这种异常即为一次minor fault。
对于内核不熟悉的人此时有一个疑问:为什么数据已经被加载内核中的Page Cache了,理论上说直接访问就行了,为什么还要触发一次minor fault呢?
这里给出答案,懂得人可以略过,主要是因为虚拟地址和物理地址的映射关系并没有建立,我们知道Linux进程访问一块内存实际上使用的是虚拟内存,必须把对应虚拟地址空间和物理页面进行了映射才能够正常访问,那么vma结构体实际仅仅表示一个虚拟地址空间,必须把内核中Page Cache中的物理地址与进程vma虚拟地址空间进行映射才能正常被进程访问到。那么这就是该问题的答案了。

如何查看

从IO的原理来看,Major需要对disk进行IO操作,必然性能会有所下降。而对于运维来说,可以利用ps查看每个进程执行的Major、Minor page fault的次数

ps -eo min_flt,maj_flt,cmd | more

https://scoutapm.com/blog/understanding-page-faults-and-memory-swap-in-outs-when-should-you-worry

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

文章转载自digoal,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论