3 replaced http://unix.stackexchange.com/ with https://unix.stackexchange.com/
source | link

I want to add a little to Warren Young's excellent answerWarren Young's excellent answer, because things are actually worse than he writes.

The 1GB kernel address space is further divided into two parts. 128MB are for vmalloc and 896MB for lowmem. Never mind what it actually means. When allocating memory, kernel code must choose which of these it wants. You can't just get memory from whichever pool has free space.

If you choose vmalloc, you're limited to 128MB. Now 1GB doesn't look so bad...

If you choose lowmem, you're limited to 896MB. Not so far from 1GB, but in this case, all allocations are rounded up to the next power of 2. So a 2.3MB allocation actually consumes 4MB. Also, you can't allocate more than 4MB in one call when using lowmem.

64-bit really is the right answer.

I want to add a little to Warren Young's excellent answer, because things are actually worse than he writes.

The 1GB kernel address space is further divided into two parts. 128MB are for vmalloc and 896MB for lowmem. Never mind what it actually means. When allocating memory, kernel code must choose which of these it wants. You can't just get memory from whichever pool has free space.

If you choose vmalloc, you're limited to 128MB. Now 1GB doesn't look so bad...

If you choose lowmem, you're limited to 896MB. Not so far from 1GB, but in this case, all allocations are rounded up to the next power of 2. So a 2.3MB allocation actually consumes 4MB. Also, you can't allocate more than 4MB in one call when using lowmem.

64-bit really is the right answer.

I want to add a little to Warren Young's excellent answer, because things are actually worse than he writes.

The 1GB kernel address space is further divided into two parts. 128MB are for vmalloc and 896MB for lowmem. Never mind what it actually means. When allocating memory, kernel code must choose which of these it wants. You can't just get memory from whichever pool has free space.

If you choose vmalloc, you're limited to 128MB. Now 1GB doesn't look so bad...

If you choose lowmem, you're limited to 896MB. Not so far from 1GB, but in this case, all allocations are rounded up to the next power of 2. So a 2.3MB allocation actually consumes 4MB. Also, you can't allocate more than 4MB in one call when using lowmem.

64-bit really is the right answer.

2 minor fixes and improvements
source | link

I want to add a little to Warren Young's excellent answer, because things are actually worse than he writes.

The 1GB kerenlkernel address space is further divided into two parts. 128MB are for "vmalloc"vmalloc and 896MB for "lowmem"lowmem. Never mind what it actually means.
When When allocating memory, kernel code must choose which of these it wants. You can't just get whatever ismemory from whichever pool has free space.

If you choose vmallocvmalloc, you're limited to 128MB. Now 1GB doesn't look so bad...  

If you choose lowmemlowmem, you're limited to 896MB. Not so far from 1GB.
But -, but in this case, all allocations are rounded up to the next power of 2. So a 2.3MB allocation actually consumes 4MB. Also, you can't allocate more than 4MB in one call when using lowmemlowmem.

64-bit really is the right answer.

I want to add a little to Warren Young's excellent answer, because things are actually worse than he writes.

The 1GB kerenl address space is further divided into two parts. 128MB are for "vmalloc" and 896MB for "lowmem". Never mind what it actually means.
When allocating memory, kernel code must choose which of these it wants. You can't just get whatever is free.

If you choose vmalloc, you're limited to 128MB. Now 1GB doesn't look so bad...  

If you choose lowmem, you're limited to 896MB. Not so far from 1GB.
But - in this case, all allocations are rounded up to the next power of 2. So a 2.3MB allocation actually consumes 4MB. Also, you can't allocate more than 4MB in one call when using lowmem.

64-bit really is the right answer.

I want to add a little to Warren Young's excellent answer, because things are actually worse than he writes.

The 1GB kernel address space is further divided into two parts. 128MB are for vmalloc and 896MB for lowmem. Never mind what it actually means. When allocating memory, kernel code must choose which of these it wants. You can't just get memory from whichever pool has free space.

If you choose vmalloc, you're limited to 128MB. Now 1GB doesn't look so bad...

If you choose lowmem, you're limited to 896MB. Not so far from 1GB, but in this case, all allocations are rounded up to the next power of 2. So a 2.3MB allocation actually consumes 4MB. Also, you can't allocate more than 4MB in one call when using lowmem.

64-bit really is the right answer.

1
source | link

I want to add a little to Warren Young's excellent answer, because things are actually worse than he writes.

The 1GB kerenl address space is further divided into two parts. 128MB are for "vmalloc" and 896MB for "lowmem". Never mind what it actually means.
When allocating memory, kernel code must choose which of these it wants. You can't just get whatever is free.

If you choose vmalloc, you're limited to 128MB. Now 1GB doesn't look so bad...

If you choose lowmem, you're limited to 896MB. Not so far from 1GB.
But - in this case, all allocations are rounded up to the next power of 2. So a 2.3MB allocation actually consumes 4MB. Also, you can't allocate more than 4MB in one call when using lowmem.

64-bit really is the right answer.