[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: How overlays effect performance
On Tue, 30 Nov 2004 13:05:50 -0800, Howard Chu <hyc@symas.com> wrote:
> Herb Hrowal wrote:
>
>
>
> >I'm currently writing an overlay for our installation. All I have done
> >currently is a basic shell that just intercepts searches and responses
> >and passes them on (e.g., no processing of any kind is done). When the
> >overlay is enabled I see a 25% - 30% hit on performance. As I add code
> >to the overlay I'm sure the performance will degrade further.
> >Performance is a big deal for us since each slapd process handles
> >upwards of 15 million requests per day.
> >
> >I read on this list a few months back that OpenLDAP 2.3 has
> >improvements in the overlay support code. Do these improvements
> >address performance issues at all?
> >
> >
> This is rather surprising. I wrote up a noop overlay after reading your
> email and found it has no measurable impact on server performance:
>
> #include "portable.h"
>
> #ifdef SLAPD_OVER_DUMMY
>
> #include <stdio.h>
>
> #include <ac/string.h>
> #include <ac/socket.h>
>
> #include "slap.h"
>
> /* This overlay does nothing useful, it just intercepts operations and
> * passes them through unchanged.
> */
>
> static void *foo;
>
> static int
> dummy_func( Operation *op, SlapReply *rs )
> {
> slap_overinst *on = (slap_overinst *) op->o_bd->bd_info;
> void *oi = on->on_bi.bi_private;
>
> foo = oi;
>
> return SLAP_CB_CONTINUE;
> }
>
> static int
> dummy_resp( Operation *op, SlapReply *rs )
> {
> return SLAP_CB_CONTINUE;
> }
>
> /* This overlay is set up for dynamic loading via moduleload. For static
> * configuration, you'll need to arrange for the slap_overinst to be
> * initialized and registered by some other function inside slapd.
> */
>
> static slap_overinst dummy;
>
> int
> dummy_init( void )
> {
> memset( &dummy, 0, sizeof( slap_overinst ) );
> dummy.on_bi.bi_type = "dummy";
>
> dummy.on_bi.bi_op_bind = dummy_func;
> dummy.on_bi.bi_op_search = dummy_func;
> dummy.on_bi.bi_op_compare = dummy_func;
> dummy.on_bi.bi_op_modify = dummy_func;
> dummy.on_bi.bi_op_modrdn = dummy_func;
> dummy.on_bi.bi_op_add = dummy_func;
> dummy.on_bi.bi_op_delete = dummy_func;
> dummy.on_bi.bi_extended = dummy_func;
> dummy.on_bi.bi_op_unbind = dummy_func;
>
> dummy.on_response = dummy_resp;
>
> return overlay_register( &dummy );
> }
>
> #if SLAPD_OVER_DUMMY == SLAPD_MOD_DYNAMIC
> int
> init_module( int argc, char *argv[] )
> {
> return dummy_init();
> }
> #endif /* SLAPD_OVER_DUMMY == SLAPD_MOD_DYNAMIC */
>
> #endif /* defined(SLAPD_OVER_DUMMY) */
>
> --
> -- Howard Chu
> Chief Architect, Symas Corp. Director, Highland Sun
> http://www.symas.com http://highlandsun.com/hyc
> Symas: Premier OpenSource Development and Support
>
>
Oops, my mistake. The only difference between your code and mine was
that I forgot to remove Debug statements. Calling the debug macro
twice for each request tends to slow things down a bit.
Thanks for your help,
Herb