3

对 __alloc_pages_slowpath() 的调用能否在同时调用 __alloc_pages_slowpath() 的设备中断中幸存下来,或者第二次调用是否破坏了第一次调用?

我在 XFS 文件系统上看到一个常规文件的程序调用 read(2)。内核堆栈跟踪显示,最终调用了 __alloc_pages_slowpath(),然后发生了 e1000e IRQ,最终也调用了 __alloc_pages_slowpath(),然后几乎立即发生了日志消息“fooprog: page allocation failure.order:0, mode:0x4020”。

整个堆栈跟踪可以在这里看到:https ://gist.github.com/790577

4

1 回答 1

1

“fooprog: page allocation failure.order:0, mode:0x4020”是由于 e1000e 驱动程序问题。将 vm.min_free_kbytes 设置为当前值的两倍可以防止它们。__alloc_pages_slowpath() 可能是可重入安全的。

更新:(1)当网络设备驱动程序尝试分配页面并发现它不能分配页面时,将大量堆栈跟踪打印到 Linux 内核系统日志中是“正常行为”。(2) 有人提交了一个补丁,六个月后它被忽略了,直到我很好地要求他们跟进获取补丁。之后,当 VM 内存不足时,KVM/qemu virtio 网络停止锁定。(3) 可悲的是,Linux 的替代品对我来说用于做实际工作更糟糕。

于 2011-01-24T13:09:13.233 回答