cvs commit: src/usr.sbin/syslogd syslogd.c

Robert Watson rwatson at FreeBSD.org
Fri Mar 31 10:30:29 UTC 2006


On Fri, 31 Mar 2006, Joao Barros wrote:

>>> My sole concern with this is that this means that syslogd will keep trying 
>>> to write to the full filesystem - and the kernel will log the attempts to 
>>> write to a full filesystem.  Whilst there's rate limiting in the kernel, 
>>> this sort of feedback loop is undesirable.
>>
>> What I'd like to see is an argument to syslogd to specify a maximum full 
>> level for the target file system.  Log data is valuable, but being able to 
>> write to /var/tmp/vi.recover is also important.  syslogd -l 90% could 
>> specify that sylogd should not write log records, perhaps other than an 
>> "out of space record" to a log file on a file system with >=90% capacity. 
>> This prevents the kernel from spewing about being out of space also.  The 
>> accounting code does exactly this, for identical reasons.
>
> I was in bed last night and thought about this but also remembered 
> something: imagine a very busy syslog machine, won't this "free space check" 
> be a burden? I have a syslog machine at work that can fill up 30GB of disk 
> in less than 2 hours and it's busy as it is :-) The solution as you 
> correctly point out is it being optional. Take in consideration that 
> checking by percentage can be tricky. On a very large disk that's 
> inefficient, on a small one dangerous. Maybe a choice between percentage and 
> real space is best.
>
> Does the kernel automatically starts complaining about out of space at 90%? 
> If so that undermines my previous suggestions, but the questions remain ;-)

The cost to check for free space is the cost of a fstatfs() system call on the 
file descriptor of the log file.  This should be handled without touching the 
disk, so while it's not a cheap system call compared to, say, getpid(), as it 
acquires locks and enters VFS, it's a lot cheaper than any disk I/O operation. 
Optional is good, if only because sometimes people do actually want logging to 
fill the disk, and that's been the behavior historically :-).

While "how much free space is there" is a somewhat semantically problematic 
concept, in practice you can divide available blocks by total blocks and get a 
decent (and workable) approximation.  At least, if you get the signed and 
unsigned types right, which in the past the accounting system has not :-).

Robert N M Watson


More information about the cvs-src mailing list