操作系统ubuntu22.04.4
内核5.15-94
问题重现:k8s重启所有pod后,操作系统会自动重启。
/var/crash下的日志dmesg:

在64位Ubuntu 22.04.4系统中,地址0x1cc8 位于内核直接映射区 ,对应的物理地址也是0x1cc8。
地址空间布局说明
64位Linux系统的内核空间从虚拟地址0xFFFF800000000000开始,采用线性映射方式:虚拟地址 = 物理地址 + PAGE_OFFSET 。其中PAGE_OFFSET在x86-64架构中通常为0xFFFF800000000000。
因此,虚拟地址0x1cc8对应的物理地址为:
物理地址 = 虚拟地址 - PAGE_OFFSET = 0x1cc8 - 0xFFFF800000000000 = 0x1cc8
地址位置特征
-
地址范围:0x1cc8(十进制7368)是一个非常小的地址,位于物理内存的低端区域
-
区域属性:属于内核直接映射区,虚拟地址与物理地址存在1:1的线性映射关系
-
访问方式:内核可以直接通过虚拟地址访问该物理地址,无需复杂的页表查询
错误原因分析
您之前提到的dmesg日志显示"unable to handle page fault for address: 0000000000001cc8",说明内核尝试访问该地址时发生了页错误。这个地址位于内核直接映射区的起始部分,通常用于存储系统启动时的关键数据结构。内核访问该地址时发生页错误,表明该地址对应的页表项不存在(not-present page),可能是由于内核或驱动bug错误地访问了未映射的地址
主机使用的两颗CPU为:Intel Xeon Max 9468

Intel Xeon Max内置了 64 GB 的 HBM2e 高带宽内存,分为 4 个 16 GB 的集群,总内存带宽为 1 TB / s。
系统配置了16根64G内存,在主机启动的过程中显示了1152GB内存,但操作系统看到的内存为1024GB
free -h显示1TB


分析:
由于CPU自带内存,但在操作系统层面却看不到多出来的128G内存,而k8s启动过程中系统却分配了属于CPU的内存,而系统上又找不到映射的内存页,所以触发系统重启。
处理办法:禁用掉CPU自带的内存。(升级操作系统版本?未尝试)
BIOS上修改:

重启系统后,开机界面正常显示1024GB内存,操作系统也是1024GB内存,再次重启K8S不再引起重启系统。
重要参考:
https://www.ctyun.cn/developer/article/550168960565317

相关参考,但无关:
https://access.redhat.com/solutions/7107907
https://blog.csdn.net/weixin_43312117/article/details/141883789
