Configuration option would be perfect for my purposes. I'd just need a patch unless you intend to release a new version in the next few days.
Thanks. Rainer Gerhards wrote: > OK, I have just checked the source code. Probably the most simple and quick > solution would be to add a config directive that tells ompipe to run in > blocking mode. That will work well, except that the pathetic xconsole default > config case will then run into troubles again. But on the other hand, if you > enable blocking mode, you can also remove that pipe from the config. > > Should I add this option? > > Rainer > > > -----Original Message----- > > From: [email protected] [mailto:rsyslog- > > [email protected]] On Behalf Of Dražen Kacar > > Sent: Monday, November 15, 2010 2:00 PM > > To: [email protected] > > Subject: [rsyslog] Huge pauses when writing to FIFO > > > > Hello. > > > > I have rsyslogd 5.6.0 on CentOS 5.5. > > > > I've tried to send some of its output to FIFO and it doesn't work quite > > the way I'd like it to. It seems I can reproduce the problem only when > > the > > FIFO reader is started after rsyslogd, so the reader's end of FIFO is > > not > > opened yet. It should be possible to reproduce the problem regardless, > > but > > it didn't exibit itself when I tried in that sequence (which was just > > once). > > > > What happens is that rsyslogd tries to open the FIFO in non-blocking > > mode, > > doesn't succeed and waits for notification that the reader has opened > > its > > end. So far, so good. Then the reader starts, opens the reading end, > > so rsyslogd opens the writing end and starts sending data. That's fine > > as > > well. > > > > Then rsyslogd starts getting EGAIN. I suppose that's because the rate > > of > > incoming data is high enough to fill the kernel FIFO buffer before the > > reader program gets the CPU time. The reader has no problem with > > keeping > > up with the data rate in other configurations I've tried, but the FIFO > > buffer in kernel is relatively small, writing to it won't block the > > writing process untill the FIFO bufer is full, so it can use it's whole > > CPU timeslot to fill the buffer and the reader's processing speed > > doesn't > > matter. > > > > I'm seeing a large number of write() attempts by rsyslogd (all failing > > with EAGAIN) and eventually it stops trying to write and goes to sleep. > > strace shows: > > > > 11109 gettimeofday({1289467839, 591385}, NULL) = 0 > > 11109 select(0, NULL, NULL, NULL, {30, 0} <unfinished ...> > > > > That is a pure 30 second pause which doesn't try to detect the state on > > file descriptors. > > > > The reader manages to emty the pipe and then, after 30 seconds, > > rsyslogd > > starts writing again. It writes several lines of data and then the > > whole > > process repeats. The net result is that the data transfer rate is > > extremly > > slow and the system can't nearly keep up with the incoming data because > > rsyslogd spends most of its time in that 30 second sleep in select(). > > > > I can see two ways out of that: > > > > 1. Instead of going to sleep with hard-coded time-out value, go to > > sleep > > on select/poll/epoll/whatever that wakes up immediately after the > > FIFO > > becomes writable. > > > > 2. Turn the FIFO file descriptor to blocking mode right after > > successful > > open. This should be a lot easier to implement than the first option > > and it's in-line with the way some other output modules behave > > (omprog > > has blocking writes, for example). I do not know if some part of the > > code expects FIFO file descriptor to be in the non-blocking mode, > > though. > > > > Blocking writes should enable me to use two queues and buffer the > > incoming > > data on disk for (transient) cases when the consumer can't empty the > > pipe > > fast enough. The configuration with the two queues doesn't work for me > > at the moment because of a crash I reported in another mail, but I > > don't > > think that's related to this problem. Once that is fixed, FIFOs should > > become usable. > > > > As it is, I can't use FIFO output at all, even with only one queue. > > > > -- > > .-. .-. Yes, I am an agent of Satan, but my duties are largely > > (_ \ / _) ceremonial. > > | > > | [email protected] > > _______________________________________________ > > rsyslog mailing list > > http://lists.adiscon.net/mailman/listinfo/rsyslog > > http://www.rsyslog.com > _______________________________________________ > rsyslog mailing list > http://lists.adiscon.net/mailman/listinfo/rsyslog > http://www.rsyslog.com -- .-. .-. Yes, I am an agent of Satan, but my duties are largely (_ \ / _) ceremonial. | | [email protected] _______________________________________________ rsyslog mailing list http://lists.adiscon.net/mailman/listinfo/rsyslog http://www.rsyslog.com

