Should I enable CONFIG_HIGHMEM for my 1 GB RAM system?
It is advised to not enable CONFIG_HIGHMEM in the kernel to utilize the extra 128 MB you get for your 1 GB RAM system. I/O Devices cannot directly address high memory from PCI space, so bounce buffers have to be used. Plus the virtual memory management and paging costs come with extra mappings. For details on bounce buffers, refer to Mel Gorman's documentation (link below).
This is totally misleading. When you have 1GB RAM, (i.e. CONFIG_HIGHMEM_4G should be used), there is no need of bounce buffers. At least I don't know about a PCI device which cannot access the full 4GB (or 32bits) of address space. Yes, some devices do not support dual-address cycle (i.e. 64-bit addressing on 32-bit bus), but this is not a problem when you have 1G of RAM.
The actual solution differs depending on your load: if you have lots of small tasks - such as HTTP server, you can safely modify the 1GB/3GB split to something like 1.2GB/2.8GB. If you have just few big tasks which may need full 3GB of virtual memory (maybe the Oracle database, or one big number-crunching process), you can use CONFIG_HIGHMEM_4G, which gives you extra 128MB of physical memory which is still usable for some parts of kernel or user-space processes.
I would definitely not suggest to omit those 128MB using the standard
kernel without CONFIG_HIGHMEM on a system with 1GB RAM.
The article is misleading
Should I enable CONFIG_HIGHMEM for my 1 GB RAM system?
It is advised to not enable CONFIG_HIGHMEM in the kernel to utilize the extra 128 MB you get for your 1 GB RAM system. I/O Devices cannot directly address high memory from PCI space, so bounce buffers have to be used. Plus the virtual memory management and paging costs come with extra mappings. For details on bounce buffers, refer to Mel Gorman's documentation (link below).
This is totally misleading. When you have 1GB RAM, (i.e. CONFIG_HIGHMEM_4G should be used), there is no need of bounce buffers. At least I don't know about a PCI device which cannot access the full 4GB (or 32bits) of address space. Yes, some devices do not support dual-address cycle (i.e. 64-bit addressing on 32-bit bus), but this is not a problem when you have 1G of RAM.
The actual solution differs depending on your load: if you have lots of small tasks - such as HTTP server, you can safely modify the 1GB/3GB split to something like 1.2GB/2.8GB. If you have just few big tasks which may need full 3GB of virtual memory (maybe the Oracle database, or one big number-crunching process), you can use CONFIG_HIGHMEM_4G, which gives you extra 128MB of physical memory which is still usable for some parts of kernel or user-space processes.
I would definitely not suggest to omit those 128MB using the standard
kernel without CONFIG_HIGHMEM on a system with 1GB RAM.
-Yenya