一个新手的问题.我正在做一些内核研究,并对此感到困惑
896MB的大小限制为ZONE_norMAL.我不明白为什么内核不能
将4G物理内存直接映射到内核空间.一些文件
提到其页面映射的大小约束.但考虑4G内存
有2 ^ 20页,每个“结构页”是4个字节,mem_map会
只有4MB.这不应该是问题.希望你能给我一些
光.
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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。