How does disk caching work?

Uwe Doering gemini at
Sun Apr 18 23:37:56 PDT 2004

Jim C. Nasby wrote:
> On Sat, Apr 17, 2004 at 09:41:19AM +0200, Uwe Doering wrote:
> [...]
> A few questions if I may...
> What's a good way to tune amount of space dedicated to IO buffers?

You can tune the number of i/o buffers, and therefore indirectly the 
amount of memory they may allocate, by using the variable 'kern.nbuf' in 
'/boot/loader.conf'.  Note that this number gets multiplied by 16384 
(the default filesystem block size) to arrive at the amount of memory it 
results in.

My experience is that with large amounts of RAM this area becomes 
unduely big, though.  It's not that you have to skimp on RAM in this 
enviroment, but the disk i/o buffers eat away at the KVM region (kernel 
virtual memory), which happens to be just 1 GB by default and doesn't 
grow with the RAM size.  So it can be a good idea to actually reduce the 
number of disk i/o buffers (compared to its auto-scaled default) on 
systems with plenty of RAM (since you don't need that many buffers, 
anyway, due to the VM interaction I just described) and save the 
available KVM rather for other purposes (kernel resources).  Systems 
that run out of KVM are prone to kernel panics, given the right 
combination of circumstances.

> What impact will vm_min|max_cache have on system performance? Is there
> any advantage to setting it fairly high?

I'm not quite sure which variables you are referring to.  In FreeBSD 
there are 'vm.v_cache_min' and 'vm.v_cache_max'.  I don't recommend 
tuning them, though, without having a very deep and thorough look at the 
kernel sources.  Many of these variables don't really do what their name 
suggests, and there are interdependencies between some of them.  You can 
lock up your server by tuning them improperly.

> The machine I'm tuning is a dual Opteron box with 4G of ram, a mirror
> and a 6 disk RAID10. It's running PostgreSQL.

I'm not a PostgreSQL expert, but there have been discussions on this 
mailing list and elsewhere about tuning PostgreSQL.  I suggest to take a 
look at the archives.

Uwe Doering         |  EscapeBox - Managed On-Demand UNIX Servers
gemini at  |

More information about the freebsd-performance mailing list