Bench SMP mode

William Law william.law at tesserent.com
Tue Aug 7 05:55:17 UTC 2018


Hi All,
Some info, bug and progress update for you.

> >
> > Here is a better (but untested) version of your Bench, using 4 cores per
> > drone, numbered 2 through 5.
> >
> >   Bench sslBench = {
> >     client_side = {
> >       max_host_load = 100/sec;
> >       max_agent_load = 1/sec;
> >       addr_space = [ 'lo::198.18.24-27.10-249/32' ];
> >       hosts =  [ '198.18.24.2' ** 4 ];
> >       cpu_cores = [ [2], [3], [4], [5] ];
> >     };
> >     server_side = {
> >       max_host_load = client_side.max_host_load;
> >       max_agent_load = client_side.max_agent_load;
> >       addr_space = [ 'lo::198.18.28-29.10-249:443/32' ];
> >       hosts = [ '198.18.28.2' ** 4 ];
> >       cpu_cores = client_side.cpu_cores;
> >     };
> >   };
> >
> > Avoid sharing physical cores among virtual cores: Two busy virtual cores
> > can do _less_ than one real core they share.
>

Here's the Bench config I've managed to get working.  The strange core
progression is to utilise the primary logical core ID of each physical
core - didn't want to go altering behaviours of other previous tests too
much by disabling hyperthreading as yet.

Bench sslBench = {
  client_side = {
    max_host_load = 10000/sec;
    max_agent_load = 50/sec;
    addr_space = [ 'em1::198.18.24-27.10-249/22' ];
    hosts =  [ '198.18.24.2' ** 16 ] ;
    cpu_cores = [
[0,1],[2,3],[8,9],[10,11],[16,17],[18,19],[24,25],[26,27],[32,33],[34,35],[40,41],[42,43],[48,49],[50,51],[56,57],[58,59]
 ];
    // cpu_cores = [
[0,1],[2,3],[8,9],[10,11],[16,17],[18,19],[24,25],[26,27],[32,33],[34,35],[40,41],[42,43],[48,49],[50,51],[56,57],[58,59],[64,65],[66,67],[72,73],[74,75]
 ];
   };
  server_side = {
    max_host_load = client_side.max_host_load;
    max_agent_load = client_side.max_agent_load;
    addr_space = [ 'em1::198.18.28-29.10-249:443/23' ];
    hosts = [ '198.18.28.2' ** 16 ] ;
    cpu_cores = client_side.cpu_cores;
  };
};

I'm not getting the same latency spikes that I was before, but I have run
into a new problem - I can only configure a maximum of 16 core sets before
polygraph-server segfaults or bails with the following:

*** glibc detected *** /usr/local/bin/polygraph-server: double free or
corruption (fasttop): 0x000000000285ac00 ***
======= Backtrace: =========
/lib64/libc.so.6[0x31d6a75e5e]
/lib64/libc.so.6[0x31d6a78cad]
/usr/local/bin/polygraph-server[0x40cbe1]
/usr/local/bin/polygraph-server[0x41ad92]
/usr/local/bin/polygraph-server[0x41baec]
/usr/local/bin/polygraph-server[0x4077ba]
/lib64/libc.so.6(__libc_start_main+0x100)[0x31d6a1ed20]
/usr/local/bin/polygraph-server[0x407409]

To get this result, I enter in more than 16 cores, and the associated number
of entries in cpu_cores.

If you can let me know what other debug information you want from me and I
can DM the details to you.

This is a shame as the test starts to max out all 16 server processes at
about 50% client test load & 5.4Gbit/s of traffic.  Although I did leave it
running and saw it hit 8Gbit/s with 30+ second latencies as the phase
started to back down the load amount.  Now the interesting this is that if
the processes are running with 2 cores allocated then they should have been
showing 200% cpu usage per process (2 cores consumed), not just 100% (1
core).  Are the processes not multithreaded in that way?

> script. We should add PGL function(s) to generate typical CPU affinity
> map(s) for a given number of cores. Quality patches or sponsorships
> welcome.

Not much of a C coder myself, I could probably cobble something together but
it may not necessarily be quality :D  Might see if we can help another way.

>
> >
> > HTH,
> >
> > Alex.

Kind Regards,

William Law


More information about the Users mailing list