Did you read my reply?

Sent from phone, thus brief.
Am 13.07.2014 09:53 schrieb "Justin Lee" <[email protected]>:

> 2014-07-13 3:31 GMT+08:00 David Lang <[email protected]>:
> > On Sat, 12 Jul 2014, Justin Lee wrote:
> >
> >> Hello List,
> >>
> >> I noticed that local messages are passed by socket rather than
> >> directly written to log files. The evidence is as follows:
> >
> >
> > Yes, this is how syslog works.
> >
> >
> >> Since log mechanism is an important infrastructure of many programs,
> >> it is supposed to be as fast as possible. So do we have some
> >> configurations or settings in rsyslog which make local messages
> >> written directly into log files without passing through socket?
> >
> >
> > actually, writing to disk can be slower than writing to a socket, so it's
> > not clear that it's a performance win to write to disk directly.
>
> I think that writing to disk is supposed to be the final step of
> rsyslogd in processing local messages. After all, we couldn't see the
> messages in log files if rsyslogd didn't write to disk at all, right?
> But in addition to disk writing, use of socket by syslog to transfer
> local log messages introduces extra CPU time or memory to do the
> following things:
>
> 1. To handle socket related stuff, such as copying log messages in and
> out of socket buffer. Buffer copying introduces overhead.
>
> 2. We need a thread or daemon process (rsyslogd) to listen to and
> receive log messages from the socket. It increases the memory
> footprint of our log infrastructure because of the daemon process
> itself.
>
> 3. At least one context switch is required to transfer a log message
> from user program to rsyslog daemon, because user program and the
> syslog are in two different processes. Most context switches flush the
> CPU pipeline and hence affecting efficiency.
>
> 4. Including a daemon process in mediating log affairs makes message
> logging dominated by kernel's scheduling policy and number of running
> processes in the system. Because CPU resources and CPU time are shared
> by all the processes running in the system, the more running processes
> in the system the less CPU time a single process (rsyslogd in our
> case) can get to accomplish its job.
>
> 5. Because all running processes in the system share the same CPU, the
> kernel must execute each process in turn (let each process get a
> chance to be executed) such that CPU time are divided and distributed
> among all running processes. The order of process execution is
> determined by kernel's scheduling policy. The execution order could be
> like the steps below:
>
>     (1) a user program writes a log message to the syslog socket.
>
>     (2) the kernel decides to execute two other processes in the
> system first before executing the rsyslog daemon since they have
> higher priority or due to the scheduling policy.
>
>     (3) the kernel than finally execute rsyslog daemon so that the log
> message sent by user program at step (1) is received by the daemon
> from syslog socket.
>
> as more and more processes run in the system, the number of processes
> get executed at step (2) could be increased. So the time of a log
> message getting propagated from user program to rsyslog daemon becomes
> longer and longer. And the latency to transfer a log message becomes
> higher and higher. I think this kills the performance the most.
>
> 6. Log messages may need to stay in socket buffer for longer time due
> the high latency which implies a bigger socket buffer is required
> which implies a greater memory footprint. The case gets worse when
> system loading is high and increase the risk of socket buffer overflow
> and message loss.
>
> >
> > then you have the problem of what happens to the log. If you just write
> to
> > disk, you throw away a tremendous amount of flexibility in determining
> what
> > happens to the log.
> >
> > If you send the log through the syslog infrastructure, there are a lot of
> > things that you can end up doing with it.
> >
> > You can:
> >
> > combine the logs from differnet programs into one file
> >
> > split the logs from one program into multiple files
> >
> > filter the logs
> >
> > send the logs to a remote machine
> >
> > put the logs into a database
> >
> > etc.
> >
> >
> >
> > so having your program write directly to disk is less work overall for
> the
> > system to do, but it can be slower for your application, and it's far
> less
> > flexible.
> >
> > David Lang
> >
> > _______________________________________________
> > rsyslog mailing list
> > http://lists.adiscon.net/mailman/listinfo/rsyslog
> > http://www.rsyslog.com/professional-services/
> > What's up with rsyslog? Follow https://twitter.com/rgerhards
> > NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad
> of
> > sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T
> > LIKE THAT.
>
> Justin Lee
> _______________________________________________
> rsyslog mailing list
> http://lists.adiscon.net/mailman/listinfo/rsyslog
> http://www.rsyslog.com/professional-services/
> What's up with rsyslog? Follow https://twitter.com/rgerhards
> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad
> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you
> DON'T LIKE THAT.
>
_______________________________________________
rsyslog mailing list
http://lists.adiscon.net/mailman/listinfo/rsyslog
http://www.rsyslog.com/professional-services/
What's up with rsyslog? Follow https://twitter.com/rgerhards
NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of 
sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T LIKE 
THAT.

Reply via email to