배포 방법 설명

배포 방법 설명

내 시스템에서 "페이지 할당 실패"를 보고했습니다.

[some_app]: page allocation failure: order:4, mode:0x2040d0

이 패턴이 정확히 무엇을 나타내는지 설명할 수 있는 사람이 있나요? 내 말이 맞나요? 이것은 다음 GFP 플래그에 대한 것입니다: GFP_NOTRACK | GFP_COMP | GFP_WAIT | GFP_IO | GFP_FS?

커널 버전은 3.10.0-693.21.1.el7.AV1.x86_64.

답변1

플래그는 파일에 정의된 것으로 보이며 <kernel source directory>/include/linux/gfp.h적어도 커널 4.9.105에서는 모드 0x2040d0이 다음과 매핑되는 것으로 보입니다.

GFP_NOTRACK | GFP_COMP | GFP_FS | GFP_IO | GFP_RECLAIMABLE

그러나 Google에서 플래그 정의를 검색하면 일부 소스에서 0x10 값이 GFP_RECLAIMABLE 대신 GFP_WAIT로 정의되어 소스와 일치하는 것으로 보입니다.

이 LWN 토론읽어보면 도움이 될 수 있지만 제가 볼 수 있는 가장 좋은 설명은 파일의 주석에 있습니다 include/linux/gfp.h.

일반적으로 이러한 모드 플래그는 페이지 할당자의 작업을 수정합니다.

  • GFP_NOTRACK: 사용을 피하세요 kmemcheck.
  • GFP_COMP: 주소복합 페이지메타데이터
  • GFP_FS: 할당자가 필요한 경우 페이지를 회수하기 위해 하위 수준 파일 시스템을 호출할 수 있음을 나타냅니다. 이 옵션이 지워지면 할당이 잠금을 보유할 수 있는 일부 파일 시스템 코드에 대한 것임을 나타냅니다. 예를 들면 다음과 같습니다. 이는 스왑 파일을 사용할 때 중요할 수 있습니다.
  • GFP_IO: 할당자가 이 요청을 충족하기 위해 페이지를 회수하기 위해 물리적 I/O를 시작할 수 있음을 나타냅니다.
  • GFP_RECLAIMABLE: "[This]는 SLAB_RECLAIM_ACCOUNT를 지정하고 해당 페이지가 축소기에 의해 해제될 수 있는 슬랩 할당에 사용됩니다." 이 플래그는 파일 시스템에서 메모리 할당을 위해 사용되는 것으로 보입니다. 기본적으로 이는 이 할당을 해제하거나 최소화하기 위해 필요할 때 호출할 수 있는 커널 함수(shrinker)가 있다는 의미인 것 같습니다.

관련 정보