On 25 March 2014 15:11, Bert Huijben <b...@qqmail.nl> wrote:
>
>
>> -----Original Message-----
>> From: Ivan Zhakov [mailto:i...@visualsvn.com]
>> Sent: dinsdag 25 maart 2014 12:03
>> To: Subversion Development; Bert Huijben
>> Subject: Re: svn commit: r1344347 -
>> /subversion/trunk/subversion/libsvn_subr/config_file.c
>>
>> On 30 May 2012 20:52,  <rhuij...@apache.org> wrote:
>> > Author: rhuijben
>> > Date: Wed May 30 16:52:36 2012
>> > New Revision: 1344347
>> >
>> > URL: http://svn.apache.org/viewvc?rev=1344347&view=rev
>> > Log:
>> > Remove about 15% of the cpu overhead of svnserve and httpd while
>> running the
>> > test suite by introducing a very simple parser buffer in the config file 
>> > parser
>> > code.
>> >
>> > The nice clean stream translation code had an 7 times overhead on this
>> very
>> > performance critical code path, while clients of svnserve and httpd were
>> > waiting. (Before this patch the this code path used 22% of the cpu time,
>> > now just 3%)
>> >
>> > * subversion/libsvn_subr/config_file.c
>> >   (parse_context_t): Add buffer and position variables. Use EOF as no
>> ungetc var.
>> >   (parser_getc): Skip '\r' characters as we only need the '\n' character 
>> > for
>> our
>> >     config files. Use EOF as no ungetc var.
>> >   (parse_option,
>> >    parse_section_name): Rename pool argument to scratch_pool.
>> >   (svn_config__parse_file): Create scratch pool and store the file and 
>> > parse
>> >     ctx in it. Update initialization and destroy scratch_pool after 
>> > successfull
>> >     parsing.
>> >
>> > Modified:
>> >     subversion/trunk/subversion/libsvn_subr/config_file.c
>> >
>> > Modified: subversion/trunk/subversion/libsvn_subr/config_file.c
>> > URL:
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/co
>> nfig_file.c?rev=1344347&r1=1344346&r2=1344347&view=diff
>> >
>> ==========================================================
>> ====================
>> > --- subversion/trunk/subversion/libsvn_subr/config_file.c (original)
>> > +++ subversion/trunk/subversion/libsvn_subr/config_file.c Wed May 30
>> 16:52:36 2012
>> > @@ -60,15 +60,19 @@ typedef struct parse_context_t
>> >    /* The current line in the file */
>> >    int line;
>> >
>> > -  /* Cached ungotten character  - streams don't support ungetc()
>> > -     [emulate it] */
>> > +  /* Emulate an ungetc */
>> >    int ungotten_char;
>> > -  svn_boolean_t have_ungotten_char;
>> >
>> > -  /* Temporary strings, allocated from the temp pool */
>> > +  /* Temporary strings */
>> >    svn_stringbuf_t *section;
>> >    svn_stringbuf_t *option;
>> >    svn_stringbuf_t *value;
>> > +
>> > +  /* Parser buffer for getc() to avoid call overhead into several 
>> > libraries
>> > +     for every character */
>> > +  char parser_buffer[SVN_STREAM_CHUNK_SIZE]; /* Larger than most
>> config files */
>> Hi Bert,
>>
>> Did you have specific reasons for using deprecated
>> SVN_STREAM_CHUNK_SIZE (100 kb) instead of SVN__STREAM_CHUNK_SIZE
>> (16kb) constant for read buffer? I'm asking because it seems this
>> significantly increase memory footprint for high loaded servers due
>> APR allocator behavior and fragmentation.
>>
>> I would like change this buffer to 16kb instead of 100kb, if you don't
>> have strong objections.
>
> Answered on IRC: +1
>
> Using something like <= 8 KByte would not handle our default generated client 
> side config files...
> But 16 KB will easily hold them.
>
> The fsfs and repository config files are much smaller, so if it really helps 
> we could make this configurable per use case.
>
Bert,

Thanks for quick reply.

Committed in r1581296 and nominated for backport to 1.8.x.
-- 
Ivan Zhakov
CTO | VisualSVN | http://www.visualsvn.com

Reply via email to