요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
TODO
====
There is a potential for deadlock when allocating a struct sk_buff for
data that needs to be written out to aoe storage. If the data is
being written from a dirty page in order to free that page, and if
there are no other pages available, then deadlock may occur when a
free page is needed for the sk_buff allocation. This situation has
not been observed, but it would be nice to eliminate any potential for
deadlock under memory pressure.
Because ATA over Ethernet is not fragmented by the kernel's IP code,
the destructor member of the struct sk_buff is available to the aoe
driver. By using a mempool for allocating all but the first few
sk_buffs, and by registering a destructor, we should be able to
efficiently allocate sk_buffs without introducing any potential for
deadlock.
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
Memory pressure의 sk_buff deadlock 가능성
1-17AoE storage에 써야 하는 data를 위해 `struct sk_buff`를 할당할 때 잠재적 deadlock이 있습니다. Dirty page를 해제하려고 그 page의 data를 쓰는 중이고 다른 page가 하나도 없다면 `sk_buff` 할당에 free page가 필요해지는 순간 deadlock이 생길 수 있습니다. 실제로 관찰된 적은 없지만 memory pressure에서의 가능성을 없애는 것이 바람직합니다.
ATA over Ethernet packet은 kernel IP code가 fragment하지 않으므로 `struct sk_buff`의 `destructor` member를 AoE driver가 사용할 수 있습니다. 처음 몇 개를 제외한 모든 `sk_buff`를 mempool에서 할당하고 destructor를 등록하면 deadlock 가능성을 만들지 않으면서 효율적으로 할당할 수 있을 것으로 예상합니다.
Dirty-page writeback과 sk_buff page allocation이 서로를 기다릴 수 있는 경로입니다.
sk_buff allocation risk
todo.rst:1-17관찰되지는 않았지만 가능한 allocation deadlock을 reserved mempool로 제거하려 합니다.