커널의 메모리 할당은 대략 언뜻 떠오르는 slab, slob, slub?  뭘 이런 단어들...

그리고 메모리를 얻기 위해서 사용하는 kmalloc, get_pages, vmalloc 등이 있습니다.

효율적이고 관리를 위해선 필수죠.


하지만 특별한 경우에 사용하는 할당자들이 있습니다.

그중에 하나가 zsmalloc allocator 입니다.


대략 읽어보니 작은 메모리 할당에서는 slab 의 경우에는 잘라서 잘 사용하고 있지요.

그런데 조금 큰... 즉 PAGE_SIZE/2 이상의 할당에서는 실제 사용보다 잔여분량의 미사용량이 

생각보다 커지게 됩니다.


이러한 낭비를 막고자 새로운 형태의 PAGE 를 만들어서 메모리를 할당하게끔 하는 방식이더군요

대신에 특정한 용도를 위한 것이니 만큼 사용의 제약이 있습니다.

1. 물리적으로 연속적인 것을 필요할 할 경우는 안된다.

2, 사용되기 전에 명시적으로 매핑이 되어야 한다. 

 (???  이유가 뭘가요... 새로운 형태의 page 라서 그런가 봅니다. 매핑 관련 함수를 사용할수 없으니...)

3. atomic context 에서만 사용되어야 한다. (프로세스간 공유가 안되는듯..)


자세한걸 원하시면... (실제로는 글이 짧습니다 ㅜㅜ)

https://lwn.net/Articles/477067/