On Wed, 30 Aug 2017, Andrew Cagney wrote:

The thing I hate about simplistic profiling is its lack of context, and how 
this leads to micro-optimizing; context would let us see why the
calls are occurring and likely eliminate them.

I tried using gprof but I couldn't get it to run properly. I didn't seem
to get any symbols on the ubuntu system this ran on, despite the symbols
being there.

vfprintf() and friends:

- presumably the vfprintf() calls are coming from libreswan_vloglog() and 
friends.  These call fprintf() and/or a syslog(3) (both likely call
vfprintf(); don't get confused by syslog(2)).   While I've no direct evidence 
of this, sanitize_string() also showing up tends to support
this theory.

While some fprintf() could be replaced with fwrite(), I'm not sure of the 
benefit.

Right.

As an aside, does it include:
  e77fd263fb7e13b8897441e8bd66af054ced8378 logging: change 
libreswan_log()/libreswan_loglog() into calls to new libreswan_vloglog()
which would have helped reduce sprintf() calls.  Prior to that, everything was 
doing sprintf() calls all the way down.

I don't think so. You pushed that commit post-v3.21 right? We could
apply it and test though.

- sanitize_string():

I still can't get my head around if/when it is needed, and I suspect I'm not 
alone - is there a diagram explaining what is going on?  It
feels like we've solved the wrong problem.

One of those calls is in cisco_stringify() which really only happens
a few times during IKEv1 XAUTH. It cannot be the cause of so much CPU
usage. The only other call is in fmt_log() which is used all over the
logging functions. That is probably the one causing the issues, and
I do wonder if it is needed. None of the libreswan_log() or loglog()
or DBG_log() should treat network input streams inputs as string texts.
However its use goes back at least to the initial git import of openswan
2.0.0.

- other print calls

Since we're doing lots of logging they would naturally bubble up.

Right although this was running a busy server without plutodebug. But
still that leaves a lot of libreswan_log() calls. We should probably
weed out a bunch of redundant ones.

NSS:

- what is making such seemingly heavy use of SQLITE?  Is it NSS?

That is the only user of sqlite in our code AFAIK.

- do we know our NSS workload?  For instance, the number of DH and/or other 
"heavy" operations we're doing.  If we know that we can work out
the expected throughput; not being close would suggest we're instead making NSS 
jump through hoops.

We had some statistics on that. But it was mostly in in 0-1000 usec (not msec)

Paul
_______________________________________________
Swan-dev mailing list
Swan-dev@lists.libreswan.org
https://lists.libreswan.org/mailman/listinfo/swan-dev

Reply via email to