Skip to contentSkip to conversation

kmalloc() and page sizes

Linux-ia64 Christian Hildner 2 participants 4 messages Jan 10, 2002 – Jan 11, 2002

lore
Share & tools
lore
#0 lore raw

Hi all!

In the current kernels the size limit for kmalloc() is 128KB. The ia64 architecture provides pagesizes ranging from 4K, ... , 64K, 256K, ... , 4G. If we would increase the maximum kmalloc() size limit to 256K (or 1M) this would match perfectly to the pagesizes.

Since I need a large (256K) segment from kmalloc(), I would appreciate the increase of the size limit. Maybe also other 64Bit architectures could benefit from that.

Please tell your opinion to the list.

Christian

#1 lore raw
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Christian Hildner

Christian> Hi all! In the current kernels the size limit for Christian> kmalloc() is 128KB. The ia64 architecture provides Christian> pagesizes ranging from 4K, ... , 64K, 256K, ... , 4G. If Christian> we would increase the maximum kmalloc() size limit to Christian> 256K (or 1M) this would match perfectly to the pagesizes.

Christian> Since I need a large (256K) segment from kmalloc(), I Christian> would appreciate the increase of the size limit. Maybe Christian> also other 64Bit architectures could benefit from that.

Christian> Please tell your opinion to the list.

Is there a reason you can't use alloc_pages() directly? It can handle allocation orders of up to 10 (not that you'll find many chunks of that size!). The slab allocator is limited to an allocation order of 5, as you observed.

	--david
#2 lore raw
In reply to Christian Hildner

David,

the storage I need for my driver has to be mapped by the 64MB kernel page. The alloc_pages() gives me pages with virtual addresses outside the kernel mapped page. Since kmalloc() gives storage at natural alignment this call is perfect to overlay the storage with an additional mapping with 256KB page size.

Christian

Quoted 20 lines · David Mosberger
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Christian Hildner

Christian> Hi all! In the current kernels the size limit for Christian> kmalloc() is 128KB. The ia64 architecture provides Christian> pagesizes ranging from 4K, ... , 64K, 256K, ... , 4G. If Christian> we would increase the maximum kmalloc() size limit to Christian> 256K (or 1M) this would match perfectly to the pagesizes.

Christian> Since I need a large (256K) segment from kmalloc(), I Christian> would appreciate the increase of the size limit. Maybe Christian> also other 64Bit architectures could benefit from that.

Christian> Please tell your opinion to the list.

Is there a reason you can't use alloc_pages() directly? It can handle allocation orders of up to 10 (not that you'll find many chunks of that size!). The slab allocator is limited to an allocation order of 5, as you observed.

        --david
#3 lore raw
In reply to Christian Hildner
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Christian Hildner

Christian> David, the storage I need for my driver has to be mapped Christian> by the 64MB kernel page. The alloc_pages() gives me pages Christian> with virtual addresses outside the kernel mapped Christian> page. Since kmalloc() gives storage at natural alignment Christian> this call is perfect to overlay the storage with an Christian> additional mapping with 256KB page size.

The page allocator returns memory in the identity mapped kernel segment, just like kmalloc(). In fact, kmalloc() is implemented on top of the page allocator. Also, the page allocator uses the buddy system, so the memory is aligned according to the allocation order.

	--david