best effort vs. given req rate - strange response times

From: david fuchs (df@ixweb.ch)
Date: Mon Feb 14 2005 - 09:35:03 MST


I am currently implementing a secure HTTP proxy for an information
security laboratory (see http://www.infsec.ethz.ch/lab/appliedlab) and
use web polygraph for performance testing. I want to test the proxy's
performance a) with a realistic low request rate of .6 req/sec and b) in
best effort mode. I use 2 very simple pg scripts, the relevant sections
are these:

// a) request rate of .6 per sec: (file: mixedCnt.pg)

Robot R = {

        ...
        
        // realistic request rate
        req_rate = 0.6/sec;

        ...

};

// b) best effort: (file: mixedCntBestEffort.pg)

Robot R = {
        
        ...

        // use best effort request rate (default setting)
        
        ...

};

the actual test consist of a single phase during 20 minutes. I ran the
test with different configurations of the proxy (filtering modules
switched on or off) but always encountered a very strange behaviour:
mean response times are _lower_ in the best effort mode than with the .6
req/sec request rate...

example from one test:

best effort: 180 xAct/sec = 13.65 Mbits/sec, mean response time 5msec
.6 req/sec: 0.60 xAct/sec = 0.05 Mbits/sec, mean response time 9 msec

I simply do not have any reasonable explanation for that. I would be
glad if someone could point out where I made a mistake in the test
scripts or what it is I misunderstood.

regards, dave


/*
 * simulating workload for ETHZ infsec lab
 */

// simulating the servers //////////////////////////////////////////////////////////////////////////////

// content types:

Content cntImage = {
        kind = "image";
        mime = { type = undef(); extensions = [ ".gif", ".jpeg", ".png" ]; };

        // mean size: 15kB (estimation of Giles, Lawrence)
        size = exp(15KB);

        cachable = 0%; //80
        checksum = 1%;
};

Content cntHTML = {
        kind = "HTML";
        mime = { type = "text/html"; extensions = [ ".html" : 60%, ".htm" ]; };

        // mean size: 20 kB (estimation of Giles, Lawrence)
        size = exp(10KB);

        cachable = 0%; //90
        checksum = 1%;
        
        // use html content from database
        content_db = "/usr/local/bin/polygraph/workloads/demo.cdb";
};

Content cntDownload = {
        kind = "download";
        mime = { type = undef(); extensions = [ ".exe": 40%, ".zip", ".gz" ]; };

        // default size
        size = logn(300KB, 300KB);

        cachable = 0%; //95
        checksum = 0.01%;
};

Content cntOther = {
        kind = "other";
        
        // default size
        size = logn(25KB, 10KB);
        
        cachable = 0%; //72
        checksum = 0.1%;
};

Server S = {
        kind = "S101"; //just a label
        
        /*
         * define content distribution and how it is accessed
         */

        // use content distribution as estimated by UC berkely internet survey
        contents = [ cntImage: 23%, cntHTML: 30%, cntDownload: 1%, cntOther ];
        direct_access = [ cntImage, cntHTML, cntDownload, cntOther ];

        addresses = ['10.0.0.3:9090' ]; // where to create these server agents
};

// simulating the clients //////////////////////////////////////////////////////////////////////////////

// 5 % of pages are fetched very often, with a 10% prob.
PopModel pm = {
        pop_distr = popUnif();
        hot_set_frac = 5%;
        hot_set_prob = 10%;
};

Robot R = {
        kind = "R101"; // only a name
        
        pop_model = pm;
        
        origins = S.addresses; // where the origin servers are
        addresses = ['10.0.0.3' ]; // where these robot agents will be created
        
        // use best effort request rate (default setting)
        
        // assumptions based on requests after using cache
        recurrence = 0;
};

// phases //////////////////////////////////////////////////////////////////////////////////////////////

Phase aPhase = {
        name = "normal_traffic";
        goal.duration = 20min;
        load_factor_beg = 1;
        load_factor_end = 1;
};

schedule( aPhase );

use(S, R);

/*
 * simulating workload for ETHZ infsec lab
 */

// simulating the servers //////////////////////////////////////////////////////////////////////////////

// content types:

Content cntImage = {
        kind = "image";
        mime = { type = undef(); extensions = [ ".gif", ".jpeg", ".png" ]; };
        size = exp(15KB);
        cachable = 0%; //80
        checksum = 1%;
};

Content cntHTML = {
        kind = "HTML";
        mime = { type = "text/html"; extensions = [ ".html" : 60%, ".htm" ]; };
        size = exp(20KB);
        cachable = 0%; //90
        checksum = 1%;
        
        // use html content from database
        content_db = "/usr/local/bin/polygraph/workloads/demo.cdb";
};

Content cntDownload = {
        kind = "download";
        mime = { type = undef(); extensions = [ ".exe": 40%, ".zip", ".gz" ]; };
        size = logn(300KB, 300KB);
        cachable = 0%; //95
        checksum = 0.01%;
};

Content cntOther = {
        kind = "other";
        size = logn(25KB, 10KB);
        cachable = 0%; //72
        checksum = 0.1%;
};

Server S = {
        kind = "S101"; //just a label
        
        /*
         * define content distribution and how it is accessed
         */
        contents = [ cntImage: 23%, cntHTML: 30%, cntDownload: 1%, cntOther ];
        direct_access = [ cntImage, cntHTML, cntDownload, cntOther ];

        addresses = ['10.0.0.3:9090' ]; // where to create these server agents
};

// simulating the clients //////////////////////////////////////////////////////////////////////////////

// 5 % of pages are fetched very often, with a 10% prob.
PopModel pm = {
        pop_distr = popUnif();
        hot_set_frac = 5%;
        hot_set_prob = 10%;
};

Robot R = {
        kind = "R101"; // only a name
        
        pop_model = pm;
        
        origins = S.addresses; // where the origin servers are
        addresses = ['10.0.0.3' ]; // where these robot agents will be created
        
        // realistic request rate
        req_rate = 0.6/sec;
        
        // assumptions based on requests after using cache
        recurrence = 0;
};

// phases //////////////////////////////////////////////////////////////////////////////////////////////

Phase aPhase = {
        name = "normal_traffic";
        goal.duration = 20min;
        load_factor_beg = 1;
        load_factor_end = 1;
};

schedule( aPhase );

use(S, R);



This archive was generated by hypermail 2b29 : Mon Feb 06 2006 - 12:00:28 MST