为什么linux kernel默认的页面大小是4K,而不是4M或8M

为什么linux kernel默认的页面大小是4K,而不是4M或8M,第1张

太多了,我就做一次搬运工了。

相信很多人在看内核内存管理部分的时候,都有这样一个疑问,为什么物理页面大小选择4K,而不是大一些或者小一些呢?

这个问题没有固定的答案,仁者见仁智者见智,每个人的关注点不一样。所以这篇文章不是说给出一个固定的答案,更多的只是一篇讨论性的文章。

内核的页面大小首先跟CPU有关,不同的架构支持的页面大小也不相同,但有一个共同点,那就是肯定支持4K的页面大小。为什么处理器在设计

的时候会选择4K,而不是其他,这个只有熟悉CPU历史的人才能给出答案,本人才疏学浅,回答不上来,有兴趣的自己找一找。当然处理器的设计者在考虑页面

大小的时候,也不是凭空就选择了这个大小,除了历史因素,肯定综合了考虑了大页面、小页面的优缺点,所以这里主要列出这些优缺点,通过这些比较来发现内核

为什么将默认的页面大小选择为4K。

现在更多争论的是大页面还是维持现在的页面4K大小,所以小页面的情况我们就不考虑了,通过比较前两者也可以得出小页面的情况。支持大页面的人通常认为大页面有以下好处:

1、减小page table占用的内存。

假设内存一定的话,页面大小越大,管理页面占用的内存也越小。现在内核中每个页面假设是4K的话,这4K不是全都可用,还有一部分用作

struct

page(大约是64bytes),如果是2.6.32的话,每个页还有一个page_cgroup(32bytes),也就是说内存大小的2.3%

(96/4096)会被内核固定使用。如果页面大小是4M的话,这个比率大约是0.0006%。假设内存时64G的话,页面大小是4K,管理页占用的内存

为1.472G,而页面大小是4M,管理页面占用的内存为0.393M。所以页面比较大时,节省的内存比较多。

2、提高TLB的命中率

每次访问内存的时候,都要将虚拟地址转换为物理地址,如果每次都访问页表的话,消耗比较大。因此,通常使用TLB来加速这个过程。但是

TLB的可以直接转换的地址范围是有限的(具体就是项数乘以页面大小),一旦出现TLB

miss,这时就必须去页表中查找。所以,如果是大页面的话,同样TLB项数的情况下,可以跟踪更大的内存。

3、提高磁盘I/O

我们知道在访问磁盘时,最耗时的 *** 作就是查找写入盘区的起始位置,也就是在磁盘盘片上将读写头置于正确的位置上。所以如果是大页面的话,可以减少写入磁盘的次数。比如要写入4M的缓存,页面大小是4M的话,只需写入1次,而页面大小是4K的话,则需要写入4次。

4、提供缓存利用率

如果是大页面的话,可以减少访问伙伴系统的次数。调用伙伴系统的 *** 作队系统的数据和指令高速缓存有相当的影响。内核越浪费这些资源,这些资源对用户空间进程就越不可用。

除了上面提高的好处,肯定还有的好处,就不一一列举了。那既然有这么好处,而且现在内存越来越大,为什么不更多地采用大页面呢?比如4M?

软件开发中,从来不会有非常完美的方案,都是在优缺点之间找到平衡点。同样,大页面有这样那样的好处,缺点也很明显。

1、最大的问题就是内存浪费,而且这个问题非常严重。比如这时要分配的内存是4M+1byte,这时需要两个页面才能满足分配的需要,这个

时候浪费的内存为4M-1byte。如果页面是4K的话,浪费的内存数量为4k-1byte。页面太大,可能导致每个页面都只使用了部分空间,剩余的空间

就被浪费了。当然对于数据库这样的系统来说,页面越大会越好,但是内核要考虑到通用的情况,而不是专注于特殊的应用场景。再比如,现在系统都是只分配虚拟

地址空间,虚拟地址空间只有在真正被访问的时候,才映射物理页面,而且为了减少物理页面的浪费,对不访问的部分,则不作映射。如果页面太大,在映射很小的

部分时,分配的内存会越大,浪费也就越大。系统在运行时,会频繁地请求内存页的 *** 作,这样导致潜在的浪费会非常严重。这样的浪费会完全抵消减小page

table的优势。

2、页面太大,会导致大量的内存碎片。因为底层的内存管理是以页面为单位。如果系统运行了很长时间,空闲的内存很多,但是连续的内存块都小

于要分配的页面数。这时可以通过移动内存块或者利用swap来获取可用内存,但是会导致分配内存的 *** 作很慢,这种慢会形成恶性循环,严重影响系统的性能。

如果是小页面的话,内存的利用会比较紧凑,分配页面时需要的连续内存块的大小不像大页面那样需要的那么大。

3、如果CPU崩溃,TLB可以访问的内存越大,对系统的影响也越大。这时一把双刃剑,大页面可以提供TLB访问的内存数量,但是CPU崩溃时,会导致很多内存访问要去页表中请求物理地址。

4、兼容性问题。X86处理器支持的页面大小只有4K,所以如果页面过大的话,会导致兼容性问题。

5、如果页面太大,在将内存页换出到swap分区时,需要换出的内存也就越大,会影响性能。

总之,这个页面大小4K是在计算机发展过程中选择的,也是在实践中经过检验的,现在看来这个页面是合适的。

homehttpd。Apache是开源代码的Web服务器软件,是最常用的Web服务器之一。安装和配置Apache的过程中最关键的两点:

1、建立的Web站点根目录和默认首页文件名,必须要把网站文件放在所指定的网站根目录下,而且默认首页文件名必须要设置正确,否则将看不到网页内容。

2、注意每次配置文件更改后,要重新启动Apache才会生效。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存