2011-01-21 6 views
3

__alloc_pages_slowpath()를 호출하면 __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

답변

1

은 "fooprog : 페이지 할당 장애 순서 :. 0, 모드 : 0x4020"는은 e1000e 드라이버 문제 때문이다. vm.min_free_kbytes를 현재 값을 두 배로 설정하면이를 방지 할 수 있습니다. __alloc_pages_slowpath()는 아마 재 입력에 안전합니다.

업데이트 : (1) 네트워크 장치 드라이버가 페이지를 할당하려고 시도 할 때 Linux 커널 시스템 로그에 거대한 스택 추적을 인쇄하는 것이 "정상적인 동작"입니다. (2) 누군가가 패치를 제출했고 6 개월 동안 패치를 가져 오는 것에 대해 후속 조치를 취할 때까지 무시되었다. 그 후 KVM/qemu virtio 네트워킹은 VM이 부족한 시점에서 잠금을 멈췄다. (3) Linux에 대한 대안은 실제 작업을 수행하는 데 사용하는 것이 슬프게도 나쁘다.

+1

대답을 '대답'으로 받아들이는 것이 좋으므로이 질문은 답이없는 질문 목록에서 제거됩니다. :) – sarnold