对__alloc_pages_slowpath()的调用是否能够在设备中断中生存,该设备中断也会调用__alloc_pages_slowpath()或第二次调用是否会损坏第一个?
我在XFS文件系统上看到一个常规文件的程序调用read(2)。内核堆栈跟踪显示最终调用__alloc_pages_slowpath()然后发生e1000e IRQ,最终调用__alloc_pages_slowpath(),然后日志消息“fooprog:页面分配失败。顺序:0,模式:0x4020”几乎立即发生。
可以在此处看到整个堆栈跟踪:https://gist.github.com/790577
答案 0 :(得分:1)
“fooprog:页面分配失败。顺序:0,模式:0x4020”是由于e1000e驱动程序问题。将vm.min_free_kbytes设置为将其当前值加倍可防止它们。 __alloc_pages_slowpath()可能是可重入安全的。
更新:(1)当网络设备驱动程序尝试分配页面并发现它不能时,将大量堆栈跟踪打印到Linux内核系统日志中是“正常行为”。 (2)有人提交了一个补丁并且六个月之后它被忽略了,直到我很好地要求他们跟进补丁。之后KVM / qemu virtio网络在虚拟机内存不足时停止锁定。 (3)Linux的替代品让我更糟糕的是用来做实际的工作。