2014-11-30 6:44 GMT+01:00 David Lang <[email protected]>: > try opening and writing /dev/log directly rather than through the syslog() > call > > You can do that via liblogging-stdlog, if you prefer. Full doc in the repo:
https://github.com/rsyslog/liblogging Rainer > for historical reasons, the syslog() call is supposed to block until the > syslog daemon reports that the message is safe on disk (or whatever it > considers 'accepted'), so I would not be surprised to find that the glibc > code is a lot more complicated than it needs to be to just write to a unix > socket. > > rsyslog can read from files, but all the other IPC mechanisms are > substantially higher overhead than a unix socket. > > David Lang > > On Sat, 29 Nov 2014, Mehrdad Pazooki wrote: > > Date: Sat, 29 Nov 2014 11:34:09 -0500 >> >> From: Mehrdad Pazooki <[email protected]> >> Reply-To: rsyslog-users <[email protected]> >> To: rsyslog-users <[email protected]> >> Subject: Re: [rsyslog] Calling syslog() is slow - it takes +100usec >> >> Is there a way to bypass /dev/log and do something writing to IPC and then >> let rsyslog read from it? so I will avoid calling syslog() and rsyslog >> becomes the consumer of ipc queue with multiple workers reading from it. >> You are right that it's not a rsyslog issue but if the only interface to >> get messages to rsyslog is by calling syslog() then it's a limitation for >> rsyslog. >> Are there other clients that I can use instead of syslog to handle that >> volume of messages? >> >> >> >> On Sat, Nov 29, 2014 at 4:25 AM, Rainer Gerhards < >> [email protected]> >> wrote: >> >> 2014-11-29 10:06 GMT+01:00 David Lang <[email protected]>: >>> >>> but why should this cause the latency to increase based on the number of >>>> simultanious writers? >>>> >>> >>> >>> I'd assume that's locking contention. After all, there seem to be 500 >>> writes plus 1 reader (rsyslog) contenting on that socket. >>> >>> >>> that's what makes me think that rsyslog may not be acking the messages >>>> >>> one >>> >>>> at a time, but instead is acking all of them that it's processing in one >>>> batch. >>>> >>>> >>>> No, it just waits for the socket to become ready and than does single >>> reads >>> until no more messages are available. Have a look here: >>> >>> >>> https://github.com/rsyslog/rsyslog/blob/master/plugins/ >>> imuxsock/imuxsock.c#L1379 >>> >>> The read loop is inside readSocket(). >>> >>> That's why I conclude this whole problem is totally outside of rsyslog. >>> >>> Rainer >>> >>> David Lang >>>> >>>> >>>> On Sat, 29 Nov 2014, Rainer Gerhards wrote: >>>> >>>> I think that's an issue with the syslog () api. It is synchronous, so >>>> >>>>> blocking is expected. I guess the rest of the problem is that linux >>>>> puts >>>>> mutexes around the /dev/log writes (after all, writes are atomic). >>>>> >>>>> Sent from phone, thus brief. >>>>> Am 28.11.2014 23:57 schrieb "David Lang" <[email protected]>: >>>>> >>>>> Hmm, I wonder if the batch size is what you are seeing (where rsyslog >>>>> >>>>>> processes multiple messages at once). >>>>>> >>>>>> We'll need to wait until Rainer can comment for sure, but you may want >>>>>> >>>>> to >>> >>>> try setting the batch size very low (say 5) and see if that puts a cap >>>>>> >>>>> on >>> >>>> the latency that you see. >>>>>> >>>>>> We've done a lot of testing for throughput, both from a single process >>>>>> and >>>>>> from multiple processes, but I don't remember every looking at >>>>>> per-process >>>>>> latency before. >>>>>> >>>>>> David Lang >>>>>> >>>>>> On Fri, 28 Nov 2014, Mehrdad Pazooki wrote: >>>>>> >>>>>> I am using: >>>>>> >>>>>> >>>>>>> rsyslogd 8.4.2.ad1, compiled with: >>>>>>> FEATURE_REGEXP: Yes >>>>>>> GSSAPI Kerberos 5 support: No >>>>>>> FEATURE_DEBUG (debug build, slow code): No >>>>>>> 32bit Atomic operations supported: Yes >>>>>>> 64bit Atomic operations supported: Yes >>>>>>> memory allocator: system default >>>>>>> Runtime Instrumentation (slow code): No >>>>>>> uuid support: Yes >>>>>>> Number of Bits in RainerScript integers: 32 (due to too-old json-c >>>>>>> lib) >>>>>>> >>>>>>> It is handling a very high volume but syslog() blocks and the >>>>>>> blocking >>>>>>> time >>>>>>> is not constant, so as I add more processes that are making a >>>>>>> syslog() >>>>>>> call >>>>>>> the blocking time increases by 10usec per process on my machine. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Fri, Nov 28, 2014 at 4:50 PM, David Lang <[email protected]> wrote: >>>>>>> >>>>>>> what version of rsyslog are you running? >>>>>>> >>>>>>> >>>>>>>> rsyslog should be able to keep up with a very high volume of logs >>>>>>>> >>>>>>> being >>> >>>> delivered to /dev/log, but there are significant improvements between >>>>>>>> the >>>>>>>> version of rsyslog that was shipped in 12.05 (which I think was 5.x) >>>>>>>> and >>>>>>>> the current 8.x versions >>>>>>>> >>>>>>>> David Lang >>>>>>>> >>>>>>>> >>>>>>>> On Fri, 28 Nov 2014, Mehrdad Pazooki wrote: >>>>>>>> >>>>>>>> Date: Fri, 28 Nov 2014 10:14:30 -0500 >>>>>>>> >>>>>>>> From: Mehrdad Pazooki <[email protected]> >>>>>>>> >>>>>>>>> Reply-To: rsyslog-users <[email protected]> >>>>>>>>> To: rsyslog-users <[email protected]> >>>>>>>>> Subject: Re: [rsyslog] Calling syslog() is slow - it takes +100usec >>>>>>>>> >>>>>>>>> >>>>>>>>> There is no systemd on this platform. >>>>>>>>> >>>>>>>>> More details about the platform: >>>>>>>>> >>>>>>>>> Description: Ubuntu 12.04.1 LTS >>>>>>>>> Release: 12.04 >>>>>>>>> Codename: precise >>>>>>>>> >>>>>>>>> Linux 3.13.0-39-generic #66-Ubuntu SMP >>>>>>>>> >>>>>>>>> >>>>>>>>> On Fri, Nov 28, 2014 at 7:14 AM, Mehrdad Pazooki < >>>>>>>>> >>>>>>>> [email protected] >>> >>>> >>>>>>>>>> wrote: >>>>>>>>> >>>>>>>>> It's running in Ubuntu (precise). I'll check it for systemd. I >>>>>>>>> >>>>>>>> think >>> >>>> >>>>>>>>> syslog call is blocking because of /dev/log . if I use UDP >>>>>>>>> locally, >>>>>>>>> >>>>>>>>>> will >>>>>>>>>> that bypass /Dev/log? >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Fri, Nov 28, 2014, 04:08 Rainer Gerhards < >>>>>>>>>> [email protected]> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> which platform is this running on? Is systemd journal active? >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Rainer >>>>>>>>>>> >>>>>>>>>>> 2014-11-27 22:37 GMT+01:00 Mehrdad Pazooki <[email protected] >>>>>>>>>>> >: >>>>>>>>>>> >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> I am calling syslog in c++ using syslog.h . the time it takes on >>>>>>>>>>>> each >>>>>>>>>>>> >>>>>>>>>>>> call >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> is too long. I am comparing it with IPC Queue and there is >>>>>>>>>>> almost >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> 100usec >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> overhead when I call syslog() vs ipc. >>>>>>>>>>> >>>>>>>>>>> I did some benchmarking, when I use a single process for hitting >>>>>>>>>>>> syslog >>>>>>>>>>>> >>>>>>>>>>>> the >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> performance is great it stays at avg 11usec/record for 1m >>>>>>>>>>> records >>>>>>>>>>> on >>>>>>>>>>> >>>>>>>>>>> my >>>>>>>>>>>> system. but if I run 10 of these processes the time will >>>>>>>>>>>> increase >>>>>>>>>>>> to >>>>>>>>>>>> >>>>>>>>>>>> about >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> 100usec/record. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> Another problem is that memory usage remains really low ~0% so >>>>>>>>>>>> >>>>>>>>>>> that >>> >>>> >>>>>>>>>>>> tells >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> me syslog() is somehow blocking and using cpu rather than do a >>>>>>>>>>> >>>>>>>>>> set >>> >>>> an >>>>>>>>>>> >>>>>>>>>>> forget to the queue and process it later on. another issue is >>>>>>>>>>>> >>>>>>>>>>> that >>> >>>> all >>>>>>>>>>>> workers are not engage. I see 5 workers but only 3 are working. >>>>>>>>>>>> The way I'm using it in prod is about 500 threads hit syslog(). >>>>>>>>>>>> I >>>>>>>>>>>> need >>>>>>>>>>>> >>>>>>>>>>>> to >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> keep the time it takes for a syslog() call to a constant of >>>>>>>>>>> >>>>>>>>>> 10usec >>> >>>> >>>>>>>>>>> >>>>>>>>>>>> ideal to >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> max 40usec. >>>>>>>>>>> >>>>>>>>>>> Also, I am not doing openlog() before calling syslog() >>>>>>>>>>>> >>>>>>>>>>>> This is my configuration: >>>>>>>>>>>> >>>>>>>>>>>> # /etc/rsyslog.conf Configuration file for rsyslog. >>>>>>>>>>>> # >>>>>>>>>>>> # For more information see >>>>>>>>>>>> # /usr/share/doc/rsyslog-doc/ >>>>>>>>>>>> html/rsyslog_conf.html >>>>>>>>>>>> # >>>>>>>>>>>> # Default logging rules can be found in >>>>>>>>>>>> /etc/rsyslog.d/50-default.conf >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> ################# >>>>>>>>>>>> #### MODULES #### >>>>>>>>>>>> ################# >>>>>>>>>>>> $ModLoad imuxsock # provides support for local system logging >>>>>>>>>>>> $ModLoad imklog # provides kernel logging support (previously >>>>>>>>>>>> done >>>>>>>>>>>> by >>>>>>>>>>>> rklogd) >>>>>>>>>>>> #$ModLoad immark # provides --MARK-- message capability >>>>>>>>>>>> >>>>>>>>>>>> # provides UDP syslog reception >>>>>>>>>>>> #$ModLoad imudp >>>>>>>>>>>> #$UDPServerRun 514 >>>>>>>>>>>> >>>>>>>>>>>> # provides TCP syslog reception >>>>>>>>>>>> #$ModLoad imtcp >>>>>>>>>>>> #$InputTCPServerRun 514 >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> # For debug only >>>>>>>>>>>> # module(load="impstats" interval="1" severity="8") >>>>>>>>>>>> >>>>>>>>>>>> ########################### >>>>>>>>>>>> #### GLOBAL DIRECTIVES #### >>>>>>>>>>>> ########################### >>>>>>>>>>>> >>>>>>>>>>>> # >>>>>>>>>>>> # Use traditional timestamp format. >>>>>>>>>>>> # To enable high precision timestamps, comment out the following >>>>>>>>>>>> line. >>>>>>>>>>>> # >>>>>>>>>>>> $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat >>>>>>>>>>>> >>>>>>>>>>>> # Filter duplicated messages >>>>>>>>>>>> $RepeatedMsgReduction off >>>>>>>>>>>> >>>>>>>>>>>> # >>>>>>>>>>>> # Set the default permissions for all log files. >>>>>>>>>>>> # >>>>>>>>>>>> $FileOwner root >>>>>>>>>>>> $FileGroup adm >>>>>>>>>>>> $FileCreateMode 0640 >>>>>>>>>>>> $DirCreateMode 0755 >>>>>>>>>>>> $Umask 0022 >>>>>>>>>>>> $PrivDropToUser root >>>>>>>>>>>> $PrivDropToGroup root >>>>>>>>>>>> >>>>>>>>>>>> # >>>>>>>>>>>> # Where to place spool files >>>>>>>>>>>> # >>>>>>>>>>>> $WorkDirectory /var/spool/rsyslog >>>>>>>>>>>> >>>>>>>>>>>> $ActionResumeRetryCount -1 # infinite >>>>>>>>>>>> >>>>>>>>>>>> retries if >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> host is down >>>>>>>>>>> >>>>>>>>>>> $SystemLogRateLimitInterval 0 >>>>>>>>>>>> $SystemLogRateLimitBurst 0 >>>>>>>>>>>> $MaxMessageSize 4k >>>>>>>>>>>> >>>>>>>>>>>> main_queue( >>>>>>>>>>>> queue.Type="LinkedList" >>>>>>>>>>>> queue.Size="1000000" >>>>>>>>>>>> queue.workerThreads="8" >>>>>>>>>>>> queue.workerThreadMinimumMessages="10000" >>>>>>>>>>>> queue.SaveOnShutdown="on" >>>>>>>>>>>> ) >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> template(name="localone" type="string" string="%msg:2:$%\n") # >>>>>>>>>>>> ":2:$" >>>>>>>>>>>> >>>>>>>>>>>> --> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> tells rsyslog to ignore the leading char, b/c rsyslog adds a >>>>>>>>>>> leading >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> space >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> to every message >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> if $syslogfacility-text == 'local1' then { >>>>>>>>>>>> action( >>>>>>>>>>>> type="omfile" >>>>>>>>>>>> template="localone" >>>>>>>>>>>> file="/var/log/local1.log" >>>>>>>>>>>> flushOnTXEnd="off" >>>>>>>>>>>> asyncWriting="on" >>>>>>>>>>>> ioBufferSize="64k" >>>>>>>>>>>> queue.type="LinkedList" >>>>>>>>>>>> queue.size="1000000" >>>>>>>>>>>> queue.dequeueBatchSize="4096" >>>>>>>>>>>> queue.workerThreads="8" >>>>>>>>>>>> queue.workerThreadMinimumMessages="10000" >>>>>>>>>>>> queue.SaveOnShutdown="on" >>>>>>>>>>>> action.ResumeRetryCount="-1" >>>>>>>>>>>> ) >>>>>>>>>>>> stop >>>>>>>>>>>> } >>>>>>>>>>>> >>>>>>>>>>>> #if $syslogtag contains 'rsyslogd-pstats' then { >>>>>>>>>>>> # action( >>>>>>>>>>>> # type="omfile" >>>>>>>>>>>> # queue.type="LinkedList" >>>>>>>>>>>> # queue.discardmark="1000" >>>>>>>>>>>> # name="pstats" >>>>>>>>>>>> # file="/var/log/pstats.log" >>>>>>>>>>>> # ) >>>>>>>>>>>> # stop >>>>>>>>>>>> #} >>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>> 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. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> _______________________________________________ >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> 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. >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> >>>>>>>> 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. >>>>>> >>>>>> _______________________________________________ >>>>>> >>>>> 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. >>>> >>>> _______________________________________________ >>> 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. >> >> _______________________________________________ > 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.

