page fault带来的性能问题

Linux进程如何访问内存

Linux下,进程并不是直接访问物理内存,而是通过内存管理单元(MMU)来访问内存资源。
原因后面会讲到。

为什么需要虚拟内存地址空间

假设某个进程需要4MB的空间,内存假设是1MB的,如果进程直接使用物理地址,这个进程会因为内存不足跑不起来。
既然进程不是直接访问物理内存,那么进程中涉及的内存地址当然也不是物理内存地址。
而是虚拟的内存地址,虚拟的内存地址和物理的内存地址之间保持一种映射关系,这种关系由MMU进行管理。
每个进程都有自己独立的虚拟地址空间。

什么是MMU


MMU全称是内存管理单元,它将物理内存分割成多个pages,MMU管理进程的虚拟地址空间中的PAGE和物理内存中的PAGE之间的映射关系。
因为是映射,所以随时都可能发生变化,例如某个进程虚拟内存空间中的PAGE1,在不同的时间点,可能出现在物理内存中的不同位置(当发生了页交换时)。

什么是page fault

当进程访问它的虚拟地址空间中的PAGE时,如果这个PAGE目前还不在物理内存中,此时CPU是不能干活的,
Linux会产生一个hard page fault中断。
系统需要从慢速设备(如磁盘)将对应的数据PAGE读入物理内存,并建立物理内存地址与虚拟地址空间PAGE的映射关系。
然后进程才能访问这部分虚拟地址空间的内存。

page fault 又分为几种,major page fault、 minor page fault、 invalid(segment fault)。

major page fault也称为hard page fault, 指需要访问的内存不在虚拟地址空间,也不在物理内存中,需要从慢速设备载入。从swap回到物理内存也是hard page fault。

minor page fault也称为soft page fault, 指需要访问的内存不在虚拟地址空间,但是在物理内存中,只需要MMU建立物理内存和虚拟地址空间的映射关系即可。
(通常是多个进程访问同一个共享内存中的数据,可能某些进程还没有建立起映射关系,所以访问时会出现soft page fault)

invalid fault也称为segment fault, 指进程需要访问的内存地址不在它的虚拟地址空间范围内,属于越界访问,内核会报segment fault错误。

什么是进程的working set

进程的working set是指当前在物理内存中,属于该进程的pages组成的集合。
这个集合中的page数随着系统的运行,可能扩大也可能缩小。
扩大working set是指进程正在访问更多的内存时。
缩小working set是指其他进程正在访问更多的内存,并且整个物理内存的空间不足,需要将某些干净的内存页free掉或者一些脏的内存页swap到交换分区去,如果这个操作设计到当前进程,对当前进程来说就是shrink working set。
缩小working set需要遵循lru (内核的内存老化)算法,并不是随便挑选PAGE进行shrink的。

什么是swap

swap和前面提到的shrink working set有关,如果是干净页(即从读入虚拟地址空间后,没有修改过的页),则直接标记为free,不需要写盘,也不会发生swap。
如果是脏页,那么它需要写盘,或者需要swap 到交换分区。

如何优化swap

建议使用IOPS和读写带宽很高的盘作为SWAP分区,例如PCI-E SSD。

什么时候需要加内存

如果你发现经常发生swap in , out。
说明进程的脏页被换出到swap后,紧接着这些页可能又需要被进程访问,从而这些页需要从swap写入物理内存,发生了hard page fault。
这种情况下,你就需要加内存了,确实是内存不够用了。
hard page fault非常损耗性能,因为发生page fault时,是需要等待的,而且IO通常来说都是比较慢的,容易成为性能瓶颈。

什么是oom, 为什么会发生OOM

前面讲到了shrink working set,是指系统在内存调度时,使用的一种手段,尽可能的让系统能使用有限的内存资源,支撑更多的并发任务。
oom是指系统已经没有足够的内存给进程使用,即能free的都已经free了,能swap out的也已经swap out了,再也不能挤出物理内存的情况。
如果遇到这种情况就会发生OOM,表示系统内存以及不足,Linux会挑选并KILL一些进程,来释放内存。

Linux page相关统计信息

sar

       -B     Report paging statistics.  The following values are displayed:

              pgpgin/s
                     Total number of kilobytes the system paged in from disk per second.

              pgpgout/s
                     Total number of kilobytes the system paged out to disk per second.

              fault/s
                     Number of page faults (major + minor) made by the system per second.  This is not a count of page faults that generate I/O, because some page faults can be resolved without I/O.

              majflt/s
                     Number of major faults the system has made per second, those which have required loading a memory page from disk.

              pgfree/s
                     Number of pages placed on the free list by the system per second.

              pgscank/s
                     Number of pages scanned by the kswapd daemon per second.

              pgscand/s
                     Number of pages scanned directly per second.

              pgsteal/s
                     Number of pages the system has reclaimed from cache (pagecache and swapcache) per second to satisfy its memory demands.

              %vmeff
                     Calculated as pgsteal / pgscan, this is a metric of the efficiency of page reclaim. If it is near 100% then almost every page coming off the tail of the inactive list is being reaped. If it gets too  low  (e.g.
                     less than 30%) then the virtual memory is having some difficulty.  This field is displayed as zero if no pages have been scanned during the interval of time.

一些CASE

.1. 如果PostgreSQL 设置了非常大的shared buffer, 为什么会有一段性能低潮(指全力压测时,平时估计感觉不到)
在PostgreSQL shared buffer设得非常大的情况下,Shared buffer作为进程的虚拟地址空间中的一部分,刚启动时这些虚拟地址空间还没有在物理内存中,所以填充过程中会发生page fault,性能较低。
当shared buffer被快速填满后,page fault减少,性能会上来。
例如在压测持续高并发的COPY数据入库时,看这个case
在前面几百GB,page fault较多,产生较多的中断(这个case是软的,因为是在shared buffer中进行extend block,么有落盘),性能比shared buffer填满后有一定的差异。
240GB shared buffer,
shared buffer 填满前,2.8GB/s 导入速度

12:13:46 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
12:13:47 AM      8.08 1699410.10  40058.59      0.00 142064.65 137696.97      0.00 137632.32     99.95
12:13:48 AM     15.84 1634396.04  38605.94      0.00 412391.09 411564.36      0.00 411627.72    100.02

 22  44  33   0   0   0|  32k 2763M| 239B  364B|   0     0 | 184k  335k
 22  44  34   0   0   0|  12k 2791M| 120B  544B|   0     0 | 184k  336k
 22  45  33   0   0   0|  12k 2768M| 471B 1198B|   0     0 | 185k  341k
 22  44  33   0   0   0|  16k 2764M| 210B  454B|   0     0 | 183k  336k
 22  44  34   0   0   0|  16k 2777M| 239B  364B|   0     0 | 185k  341k

shared buffer 填满后, 4.7GB/s导入速度

12:14:40 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
12:14:41 AM     16.33 2831730.61    823.47      0.00 735045.92 725126.53      0.00 724985.71     99.98
12:14:42 AM     12.00 2760160.00    743.00      0.00 738037.00 728352.00      0.00 728370.00    100.00
12:14:43 AM     11.88 2751279.21    326.73      0.00 720171.29 715310.89      0.00 715374.26    100.01
12:14:44 AM     20.00 2788468.00    338.00      0.00 727221.00 720480.00      0.00 720480.00    100.00
12:14:45 AM     12.50 2858970.83    425.00      0.00 753507.29 740266.67      0.00 740166.67     99.99

 24  18  56   0   0   1|  28k 4703M| 120B  364B|   0     0 | 366k  655k
 24  18  57   0   0   1|  16k 5031M| 892B  994B|   0     0 | 382k  690k
 24  19  56   0   0   0|  12k 4833M| 120B  364B|   0     0 | 374k  672k
 24  19  56   0   0   1|8192B 4737M| 239B  544B|   0     0 | 371k  668k
 24  19  56   0   0   1|  20k 4826M| 120B  454B|   0     0 | 375k  674k

参考

时间: 2024-11-09 14:03:26

page fault带来的性能问题的相关文章

Facebook专家:Huge Page是否为拯救性能的万能良药?

准备知识   在阅读本文之前,需要读者至少了解以下基础知识:   CPU Cache的基本概念. NUMA的基本概念. 目前Linux基于多核CPU繁忙程度的线程调度机制,参看Chip Multi Processing aware Linux Kernel Scheduler论文.   一.关于Huge Page   在正式开始本文分析前,我们先大概介绍下Huge Page的历史背景和使用场景.   为什么需要Huge Page    了解CPU Cache大致架构的话,一定听过TLB Cach

如何解决网站大规模并发访问带来的性能下降问题

摘要: 再过半个月就2013年的春运就要来临,每年外地打工的人们都会因为订票而烦恼.特别是网上订票,对12306提供给的网上订票系统会有各种看法,从去年的年春节,铁道部推出12306网站, 再过半个月就2013年的春运就要来临,每年外地打工的人们都会因为订票而烦恼.特别是网上订票,对12306提供给的网上订票系统会有各种看法,从去年的年春节,铁道部推出12306网站,实行网络实名购票,每一个返乡人原以为能买着一张回家的火车票,但结果还是大失所望.在去年,7天内,12306网站访问用户已占全球互联

图像至关重要!但如何化解由在线图像带来的性能与复杂性挑战呢?

"一图抵千言"这句话由来已久.人类是一种非常视觉化的生物,从婴儿时期开始,图像就一直帮助我们学习.提高注意力以及解释难以理解的事物.在当前这样一个电子商务与社交媒体盛行的环境下,图像变得更为重要,因为几乎没人愿意访问纯文本网站或应用程序.大量研究已经证明:更多.更优质的图像能够提高用户参与度以及转化率.例如,Forrester[1]发现用户对网站与应用中内容及图像丰富度的预期增长了75%.此外,配上更优质照片的eBay商品,其售出的概率将会增加5%[2]:而搭配照片的Facebook帖

【案例】说说time_zone 带来的性能问题

一 背景      相信大家对time_zone参数的意义和使用方式并不陌生,MySQL 通过设置 time_zone来控制时区,不过本文从另外一个角度来了解该参数对系统性能的影响.认识到这个问题的起因是因为数据库出现usr cpu 增大,load 上升 ,thread running陡高等现象.还有另外一个同事发现的问题一个应用接口调用分布到不同的机器,但是性能存在差异. 二 分析过程2.1 timezone的参数设置 我们常用的time_zone 有两种设置方式  SYSTEM  和UTC具

asp.net中WCF 客户端关闭带来的性能分析

这里的WCF异步调用是指单向非可靠异步调用,也就是你不知道调用是否成功,适用于性能高于可靠性的场合. 之前发布过一篇随笔WCF异步调用实战:OneWay+Asynchronous Operation,通过WCF服务端"单向(One-way)消息交换"+WCF客户端"异步信道调用(Asynchronous Operation)"实现快速的WCF异步调用. 但是,使用了一段时间,发现还是有些慢.今天实测了一下,调用代码如下:  代码如下 复制代码 var client

win8蓝屏显示错误代码“page fault in nonpaged area”的解决方法

  解决方法一 1.开机按F8不动到高级选项出现在松手,选"最近一次的正确配置"回车修复(这个方法可以恢复原来的驱动). 2.如果是因更新驱动引起的故障,右击我的电脑选属性,选设备管理器找到这个驱动右键选属性/上面的驱动程序选项/选下面返回驱动程序选项按确定. 3.如果故障依旧,还原系统或重装. 解决方法二 Win8还原系统,右击计算机选属性,在右侧选系统保护,系统还原,按步骤做就是了,事前也可以选择这个页面最下面创建,自己创建还原点. 驱动有随电脑自带的,有官方网站下载的,软件有驱动

win8蓝屏显示“page fault in nonpaged area”错误代码

  解决方法一 1.开机按F8不动到高级选项出现在松手,选"最近一次的正确配置"回车修复(这个方法可以恢复原来的驱动). 2.如果是因更新驱动引起的故障,右击我的电脑选属性,选设备管理器找到这个驱动右键选属性/上面的驱动程序选项/选下面返回驱动程序选项按确定. 3.如果故障依旧,还原系统或重装. 解决方法二 Win8还原系统,右击计算机选属性,在右侧选系统保护,系统还原,按步骤做就是了,事前也可以选择这个页面最下面创建,自己创建还原点. 驱动有随电脑自带的,有官方网站下载的,软件有驱动

SQL Server 2005可伸缩性和性能的计划(1)

本白皮书提供了关于不同报表服务实现架构中可伸缩性的相关内容.也提供了一些基于使用Microsoft SQL Server Reporting Services完成您自己的性能测试的指导方针.建议和提示. 简介 Microsoft SQL Server Reporting Services是一个报表平台,包括可扩展和可管理的中央管理报表服务器和可扩展的基于Web.桌面的报表交付.报表服务是微软综合商业智能平台的重要组成部分.对于许多组织,通过报表来交付信息是一个非常重要的日常商务环节.因此,报表性

POWER5+和AIX 5L多页面支持下的IBM DB2 Enterprise 9性能

了解IBM DB2 9 for Linux.UNIX和Windows (DB2)如何利用多页面大小(multiple page size).随着POWER5+处理器架构的引入,IBM AIX 5L 操作系统增加了对新的64 KB 页面的支持,这种页面与当前默认的 4 KB 页面具有类似的性质.此外,AIX 5L Version 5.3 TL04 还为这种硬件架构引入了一种新的16 GB 巨型页面特性.DB2 9 自动利用64 KB 页面为该平台上的数据库应用程序提供高性能.此外,DB2 还支持对