为什么Linux内核ZONE_NORMAL限制在896 MB?

一个新手的问​​题.我正在做一些内核研究,并对此感到困惑
896MB的大小限制为ZONE_norMAL.我不明白为什么内核不能
将4G物理内存直接映射到内核空间.一些文件
提到其页面映射的大小约束.但考虑4G内存
有2 ^ 20页,每个“结构页”是4个字节,mem_map会
只有4MB.这不应该是问题.希望你能给我一些
光.

谢谢

解决方法

出于性能原因,内核将其自身限制在896兆字节的原因.

内核可用空间越多,意味着用户空间可用的地址空间就越少.这个3/1分裂意味着用户进程可以分配的大量地址空间是3 GB,当然由于内存碎片,实际上它似乎开始出现大约2.5 GB的故障.

可以使用不同的分割:2/2和1/3分裂,为内核分配两GB的地址空间,为用户空间分配2 GB的空间,内核为3 GB,用户空间为1 GB的地址空间. (这个firefox现在消耗1249兆字节,所以它不能适应这1/3分裂的内核之一).

有一些内核(可能是供应商的)支持所谓的4:4分裂 – 内核的四千兆字节地址空间和用户间的四千兆字节地址空间.这些对于具有32或64千兆位内存的32位系统非常有用 – 因为大型系统可能具有许多磁盘,大量的IO在飞行中,并且对于块设备和网络流量都需要显着的缓冲.但是,这些4:4内核需要在进入和退出每个系统调用时刷新TLB缓存.这些TLB刷新对“小型”系统造成了显着的减速,只有在“大型”系统中才有价值,其中额外的内存可以缓存足够的磁盘/网络资源来提高系统的性能.

其他分割不会导致此TLB刷新,因为TLB维护一个权限位,指示当cpu处于用户状态或管理器状态时页面是否可用:内核页面始终映射,但只有当cpu的主管标志被设置.因此,当退出进入内核的进程时,进入和退出内核是很快的.当上下文切换时,当然需要刷新TLB.

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...