Linux kernel 尝试在内核虚拟地址空间中分配页时指针错误

Linux kernel 尝试在内核虚拟地址空间中分配页时指针错误,linux-kernel,virtual-memory,page-caching,Linux Kernel,Virtual Memory,Page Caching,我正在x86-64 CentOS 7上开发Linux驱动程序。 我们有一个内核模块,可以读取和写入文件。 此模块尝试获取保证连续的页面。 当我尝试5 GB或10 GB的较小的读/写作业时,它工作正常。我得到了正确的内核虚拟地址空间指针,如0xffff 8xxx xxxx xxxx 但是,如果我尝试一个更大的作业/数据(比如20到50GB),那么我会得到这些地址指针,它们看起来像0x0000 00xx xxxx xxxxx。这些不是内核虚拟地址空间指针 因此,我看到一个操作系统崩溃。 但是,如果我

我正在x86-64 CentOS 7上开发Linux驱动程序。 我们有一个内核模块,可以读取和写入文件。 此模块尝试获取保证连续的页面。 当我尝试5 GB或10 GB的较小的
读/写
作业时,它工作正常。我得到了正确的内核虚拟地址空间指针,如
0xffff 8xxx xxxx xxxx

但是,如果我尝试一个更大的作业/数据(比如20到50GB),那么我会得到这些地址指针,它们看起来像
0x0000 00xx xxxx xxxxx
。这些不是内核虚拟地址空间指针

因此,我看到一个操作系统崩溃。 但是,如果我在作业期间通过使用
echo3>/proc/sys/vm/drop_caches
清除缓存频率,那么它工作正常,并且我得到了正确的内核虚拟地址空间指针

我为这种含糊不清的问题道歉。 欢迎任何提示和建议


谢谢

看起来您的分配失败了。是否需要检查退货状态?是否需要检查退货状态,并且分配不会失败。一旦缓存满了,它就会分配到错误的位置。这听起来像个bug。毫不奇怪,内核人员并不期望在系统空间中分配如此大的空间。它在CentOS 6.x上运行良好。但当我将其迁移到CentOS 7.x时,它就不起作用了。在7.x以后的版本中,页面缓存和重新声明逻辑似乎发生了变化。