linux 内核内存管理有哪些潜在危害
- 缺页中断
进程的虚拟页表和物理页表的关系存放在MMU内存管理单元中,但虚拟页表未映射物理页表时,会发生缺页中断,建立MMU,并且需要刷新TLB表。整个过程需要(1-10us) - TLB未命中
TLB是MMU管理单元的高速缓存,可以减少查询慢速的MMU,当页表在TLB不存在时,需要通过查询MMU来获取物理地址。MMU是由多级页表组成,这导致漫长的查询过程 - 内存分配与回收
内存的申请与释放会设计锁操作,内存的离散分配,会导致越来越严重的内存碎片 - 跨NUMA节点内存访问
不同的NUMA节点访问不同的内存节点性能是不一样的。 - 内存交换
当内存不足时,操作系统会把进程的内存换出到磁盘,来获得更多的内存空间
措施:
- 使用大页
可以减少页表项的数量,TLB miss就会大大的降低。 - page cache优化
在顺序读写文件时,使用page cache可以大大的提升磁盘IO的性能 - 内存分配优化器
使用全局内存池和局部内存池来提升内存的使用效率 - NUMA感知
绑定CPU与绑定申请NUMA本地内存,可以避免跨NUMA的节点访问 - 避免交换
增大内存,压缩内存,禁用交换