Base test with 2000 concurrent connections: workload

1. English interpretation

TBD.


2. PGL code

time TestPhaseDuration = 600min;

int TestPhaseTxns = 100000;

time CoolPhaseDuration = 1min;

time WaitPhaseDuration = 1min;

int RESPONSE_TEST = 1;

int SPEED_TEST = 2;

int CONCURRENCY_TEST = 3;

int CACHING_TEST = 4;

int CONTENT_TEST = 5;

int LDAP_TEST = 1;

int SSO_TEST = 2;

int test_type = RESPONSE_TEST;

int auth_type = SSO_TEST;

rate robot_req_rate = 0.5/sec;

int MaxFDs = 8192;

int USERS = 130;

rate peak_rate_needed = (USERS*1)/sec;

ObjLifeCycle olcDynamic = {
	length = exp(2hour);
	variance = 60%;
	with_lmt = 33%;
	expires = [lmt+exp(1hour): 5%, now+const(15min): 15%, now+const(1min)];
};

ObjLifeCycle olcStatic = {
	length = const(2year);
	variance = 80%;
	with_lmt = 100%;
	expires = [nmt+const(0sec)];
};

ObjLifeCycle olcImage = {
	length = logn(30day, 7day);
	variance = 50%;
	with_lmt = 100%;
	expires = [nmt+const(0sec)];
};

ObjLifeCycle olcHTML = {
	length = logn(7day, 1day);
	variance = 33%;
	with_lmt = 100%;
	expires = [nmt+const(0sec)];
};

Content image_1B = {
	kind = "image_1B";
	mime = {
		type = "image/jpeg";
		extensions = ["/image.1B"];
	};
	obj_life_cycle = olcStatic;
	size = const(1Byte);
	cachable = 100%;
	checksum = 50%;
};

Content image_10B = {
	kind = "image_10B";
	mime = {
		type = "image/jpeg";
		extensions = ["/image.10B"];
	};
	obj_life_cycle = olcStatic;
	size = const(10Byte);
	cachable = 100%;
	checksum = 50%;
};

Content image_100B = {
	kind = "image_100B";
	mime = {
		type = "image/jpeg";
		extensions = ["/image.100B"];
	};
	obj_life_cycle = olcStatic;
	size = const(100Byte);
	cachable = 100%;
	checksum = 50%;
};

Content image_1KB = {
	kind = "image_1KB";
	mime = {
		type = "image/jpeg";
		extensions = ["/image.1KB"];
	};
	obj_life_cycle = olcStatic;
	size = const(1KB);
	cachable = 100%;
	checksum = 50%;
};

Content image_10KB = {
	kind = "image_10KB";
	mime = {
		type = "image/jpeg";
		extensions = ["/image.10KB"];
	};
	obj_life_cycle = olcStatic;
	size = const(10KB);
	cachable = 100%;
	checksum = 50%;
};

Content image_100KB = {
	kind = "image_100KB";
	mime = {
		type = "image/jpeg";
		extensions = ["/image.100KB"];
	};
	obj_life_cycle = olcStatic;
	size = const(100KB);
	cachable = 100%;
	checksum = 50%;
};

Content image_1MB = {
	kind = "image_1MB";
	mime = {
		type = "image/jpeg";
		extensions = ["/image.1MB"];
	};
	obj_life_cycle = olcStatic;
	size = const(1MB);
	cachable = 100%;
	checksum = 50%;
};

Content image_10MB = {
	kind = "image_10MB";
	mime = {
		type = "image/jpeg";
		extensions = ["/image.10MB"];
	};
	obj_life_cycle = olcStatic;
	size = const(10MB);
	cachable = 100%;
	checksum = 50%;
};

Content image_100MB = {
	kind = "image_100MB";
	mime = {
		type = "image/jpeg";
		extensions = ["/image.100MB"];
	};
	obj_life_cycle = olcStatic;
	size = const(100MB);
	cachable = 100%;
	checksum = 50%;
};

Content const_1B_objects = {
	kind = "const_1B_objects";
	mime = {
		type = "const/const_1B_objects";
		extensions = ["/const.1B"];
	};
	obj_life_cycle = olcStatic;
	size = const(1Byte);
	cachable = 100%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content const_10B_objects = {
	kind = "const_10B_objects";
	mime = {
		type = "const/const_10B_objects";
		extensions = ["/const.10B"];
	};
	obj_life_cycle = olcStatic;
	size = const(10Byte);
	cachable = 100%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content const_100B_objects = {
	kind = "const_100B_objects";
	mime = {
		type = "const/const_100B_objects";
		extensions = ["/const.100B"];
	};
	obj_life_cycle = olcStatic;
	size = const(100Byte);
	cachable = 100%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content const_1KB_objects = {
	kind = "const_1KB_objects";
	mime = {
		type = "const/const_1KB_objects";
		extensions = ["/const.1KB"];
	};
	obj_life_cycle = olcStatic;
	size = const(1KB);
	cachable = 100%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content const_10KB_objects = {
	kind = "const_10KB_objects";
	mime = {
		type = "const/const_10KB_objects";
		extensions = ["/const.10KB"];
	};
	obj_life_cycle = olcStatic;
	size = const(10KB);
	cachable = 100%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content const_100KB_objects = {
	kind = "const_100KB_objects";
	mime = {
		type = "const/const_100KB_objects";
		extensions = ["/const.100KB"];
	};
	obj_life_cycle = olcStatic;
	size = const(100KB);
	cachable = 100%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content const_1MB_objects = {
	kind = "const_1MB_objects";
	mime = {
		type = "const/const_1MB_objects";
		extensions = ["/const.1MB"];
	};
	obj_life_cycle = olcStatic;
	size = const(1MB);
	cachable = 100%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content const_10MB_objects = {
	kind = "const_10MB_objects";
	mime = {
		type = "const/const_10MB_objects";
		extensions = ["/const.10MB"];
	};
	obj_life_cycle = olcStatic;
	size = const(10MB);
	cachable = 100%;
	checksum = 50%;
};

Content const_100MB_objects = {
	kind = "const_100MB_objects";
	mime = {
		type = "const/const_100MB_objects";
		extensions = ["/const.100MB"];
	};
	obj_life_cycle = olcStatic;
	size = const(100MB);
	cachable = 100%;
	checksum = 50%;
};

Content dyn_1B_objects = {
	kind = "dyn_1B_objects";
	mime = {
		type = "dyn/dyn_1B_objects";
		extensions = ["/dyn.1B"];
	};
	obj_life_cycle = olcDynamic;
	size = const(1Byte);
	cachable = 0%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content dyn_10B_objects = {
	kind = "dyn_10B_objects";
	mime = {
		type = "dyn/dyn_10B_objects";
		extensions = ["/dyn.10B"];
	};
	obj_life_cycle = olcDynamic;
	size = const(10Byte);
	cachable = 0%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content dyn_100B_objects = {
	kind = "dyn_100B_objects";
	mime = {
		type = "dyn/dyn_100B_objects";
		extensions = ["/dyn.100B"];
	};
	obj_life_cycle = olcDynamic;
	size = const(100Byte);
	cachable = 0%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content dyn_1KB_objects = {
	kind = "dyn_1KB_objects";
	mime = {
		type = "dyn/dyn_1KB_objects";
		extensions = ["/dyn.1KB"];
	};
	obj_life_cycle = olcDynamic;
	size = const(1KB);
	cachable = 0%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content dyn_10KB_objects = {
	kind = "dyn_10KB_objects";
	mime = {
		type = "dyn/dyn_10KB_objects";
		extensions = ["/dyn.10KB"];
	};
	obj_life_cycle = olcDynamic;
	size = const(10KB);
	cachable = 0%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content dyn_100KB_objects = {
	kind = "dyn_100KB_objects";
	mime = {
		type = "dyn/dyn_100KB_objects";
		extensions = ["/dyn.100KB"];
	};
	obj_life_cycle = olcDynamic;
	size = const(100KB);
	cachable = 0%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content dyn_1MB_objects = {
	kind = "dyn_1MB_objects";
	mime = {
		type = "dyn/dyn_1MB_objects";
		extensions = ["/dyn.1MB"];
	};
	obj_life_cycle = olcDynamic;
	size = const(1MB);
	cachable = 0%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content dyn_10MB_objects = {
	kind = "dyn_10MB_objects";
	mime = {
		type = "dyn/dyn_10MB_objects";
		extensions = ["/dyn.10MB"];
	};
	obj_life_cycle = olcDynamic;
	size = const(10MB);
	cachable = 0%;
	checksum = 50%;
	encodings = ["identity","gzip"];
};

Content dyn_100MB_objects = {
	kind = "dyn_100MB_objects";
	mime = {
		type = "dyn/dyn_100MB_objects";
		extensions = ["/dyn.100MB"];
	};
	obj_life_cycle = olcDynamic;
	size = const(100MB);
	cachable = 0%;
	checksum = 50%;
};

Content cntPost1 = {
	size = unif(50KB, 100MB);
};

Content cntPost = {
	size = const(1KB);
};

Content static_html = {
	kind = "static_html";
	mime = {
		type = "text/html";
		extensions = ["/static.html": 60%,"/static.htm"];
	};
	obj_life_cycle = olcHTML;
	size = unif(1KB, 100KB);
	cachable = 90%;
	checksum = 1%;
	encodings = ["identity","gzip"];
};

Content dynamic_html = {
	kind = "dynamic_html";
	mime = {
		type = "text/html";
		extensions = ["/dynamic.html": 60%,"/dynamic.htm","/query?dynamic.html"];
	};
	obj_life_cycle = olcDynamic;
	size = unif(1KB, 100KB);
	cachable = 0%;
	checksum = 1%;
	encodings = ["identity","gzip"];
};

Phase phWarm = {
	name = "warm";
	goal.xactions = 1;
	load_factor_beg = 0.1;
	load_factor_end = 1;
	log_stats = true;
};

Phase phWait = {
	name = "wait";
	goal.xactions = 1;
	goal.duration = WaitPhaseDuration;
	load_factor_beg = 0;
	load_factor_end = 0.00005;
	log_stats = true;
};

Phase phCool = {
	name = "cool";
	goal.duration = 1min;
	populus_factor_beg = 0;
	populus_factor_end = 0;
	log_stats = true;
};

Phase ph1000 = {
	name = "ph1000";
	goal.xactions = TestPhaseTxns;
	load_factor_beg = 0.5;
	load_factor_end = 0.5;
	primary = true;
	log_stats = true;
};

Phase ph8000 = {
	name = "ph8000";
	goal.duration = TestPhaseDuration;
	goal.xactions = 100000;
	load_factor_beg = 0;
	load_factor_end = 0.5;
	primary = true;
	log_stats = true;
};

Phase ph16000 = {
	name = "ph16000";
	goal.xactions = TestPhaseTxns;
	load_factor_beg = 1;
	load_factor_end = 1;
	primary = true;
	log_stats = true;
};

StatsSample warmSample = {
	capacity = 10000;
};

StatsSample measSample = {
	capacity = 10000;
};

StatsSample coolSample = {
	capacity = 1;
};

ph1000.stats_samples = [warmSample];

ph8000.stats_samples = [warmSample];

ph16000.stats_samples = [warmSample];

PopModel TestPopModel = {
	pop_distr = popUnif();
	hot_set_frac = 1%;
	hot_set_prob = 10%;
	bhr_discrimination = 90%;
};

Bench benchSafeSquid = {
	peak_req_rate = peak_rate_needed;
	client_side = {
		max_agent_load = 1/sec;
		addr_space = ['10.1.0-254.101-254/16'];
		hosts = ['10.1.2.254'];
	};
	server_side = {
		max_agent_load = undef();
		addr_space = ['lo0::10.101.128-251.1-250:80/22'];
	};
};

SpreadAs asSpread = {
	agents_per_addr = 1;
};

AddrMap map0 = {
	zone = ".test";
	addresses = ['10.2.1.102:80'];
	names = ['real.polysrv.safesquid.test:80'];
};

use(map0);

AddrMap map00 = {
	zone = ".test";
	addresses = ['10.2.1.102:443'];
	names = ['real.polysrv.safesquid.test:443'];
};

use(map00);

AddrMap mapA = {
	zone = ".";
	addresses = '173.1.1-10.130-230:80';
	names = 'serverA[1-10]poly[130-230].polysrv.safesquid.test:80';
};

use(mapA);

AddrMap mapB = {
	zone = ".";
	addresses = '173.2.1-10.130-230:443';
	names = 'serverB[1-10]poly[130-230].polysrv.safesquid.test:443';
};

use(mapB);

AddrMap map1 = {
	zone = ".";
	addresses = '172.1.1-10.130-230:8888';
	names = 'server1poly[1-1010].polysrv.safesquid.test:8888';
};

AddrMap map2 = {
	zone = ".";
	addresses = '172.2.1-10.130-230:8888';
	names = 'server2poly[1-1010].polysrv.safesquid.test:8888';
};

AddrMap map3 = {
	zone = ".";
	addresses = '172.3.1-10.130-230:8888';
	names = 'server3poly[1-1010].polysrv.safesquid.test:8888';
};

AddrMap map4 = {
	zone = ".";
	addresses = '172.4.1-10.130-230:8888';
	names = 'server4poly[1-1010].polysrv.safesquid.test:8888';
};

AddrMap map5 = {
	zone = ".";
	addresses = '172.5.1-10.130-230:8888';
	names = 'server5poly[1-1010].polysrv.safesquid.test:8888';
};

AddrMap map6 = {
	zone = ".";
	addresses = '172.6.1-10.130-230:8888';
	names = 'server6poly[1-1010].polysrv.safesquid.test:8888';
};

AddrMap map7 = {
	zone = ".";
	addresses = '172.7.1-10.130-230:8888';
	names = 'server7poly[1-1010].polysrv.safesquid.test:8888';
};

addr[] RobotIPs = ['172.16.111.101'];

int RobotCnt = count(RobotIPs);

use(benchSafeSquid);

DnsResolver dr = {
	servers = ['127.0.0.1:53'];
	timeout = 15sec;
};

string[] MyPASSWORDS;

if(auth_type==SSO_TEST)then{
	MyPASSWORDS = "oe2000/testou[1-5]user[1-5]@testhost[1-5].oe2000.com:test";
}else{
	MyPASSWORDS = "ldap[1-1000]@safesquid.test:sarva@1234";
}string[] HTML_CONTENTS = [static_html, dynamic_html];

string[] IMAGE_CONTENTS = [image_1B, image_10B, image_100B, image_1KB];

string[] DYNAMIC_CONTENTS = [dyn_1B_objects, dyn_10B_objects, dyn_100B_objects, dyn_1KB_objects];

string[] STATIC_CONTENTS = [const_1B_objects, const_10B_objects, const_100B_objects, const_1KB_objects];

string[] LARGE_CONTENTS = [const_10MB_objects, const_100MB_objects, dyn_10MB_objects, dyn_100MB_objects, image_10MB, image_100MB];

string[] SMALL_CONTENTS = [const_1B_objects, const_10B_objects, dyn_10KB_objects, dyn_100KB_objects, image_1KB, image_100KB];

string[] SMALL_STATIC_CONTENTS = [const_1B_objects, const_10B_objects, dyn_10KB_objects, dyn_100KB_objects, image_1KB, image_100KB];

if(test_type==RESPONSE_TEST)then{
	string[] ALL_CONTENTS = [const_1KB_objects];
	string[] POST_DATA = [const_1KB_objects];
}else{
	if(test_type==SPEED_TEST)then{
		string[] ALL_CONTENTS = [const_1MB_objects];
		string[] POST_DATA = [const_1MB_objects];
	}else{
		string[] ALL_CONTENTS = [IMAGE_CONTENTS, DYNAMIC_CONTENTS, STATIC_CONTENTS];
		string[] POST_DATA = [const_1KB_objects, const_10MB_objects];
	}}Server S = {
	kind = "PolyMix-1-srv";
	accept_lmt = -1;
	contents = ALL_CONTENTS;
	direct_access = contents;
	xact_think = const(0sec);
	req_body_allowed = 50%;
	abort_prob = 0/10;
	pconn_use_lmt = const(2147483647);
	idle_pconn_tout = 60sec;
	http_versions = ["1.1"];
};

Server S2 = {
	kind = "PolyMix-1-srv";
	accept_lmt = -1;
	contents = ALL_CONTENTS;
	direct_access = contents;
	xact_think = const(0sec);
	req_body_allowed = 50%;
	abort_prob = 0/10;
	pconn_use_lmt = const(2147483647);
	idle_pconn_tout = 60sec;
	http_versions = ["1.1"];
};

SingleRange range1 = {
	first_byte_pos_absolute = 30Byte;
	last_byte_pos_relative = 30%;
};

SingleRange range2 = {
	suffix_length_relative = 10%;
};

SingleRange range3 = {
	suffix_length_absolute = 128Byte;
};

MultiRange rangeM = {
	first_range_start_absolute = exp(15Byte);
	range_length_relative = unif(1%, 10%);
	range_count = const(5);
};

Robot R3 = {
	kind = "PolyMix-1-rbt";
	addresses = robotAddrs(asSpread, benchSafeSquid);
	RobotCnt = count(addresses);
	open_conn_lmt = (MaxFDs/RobotCnt)+1;
	wait_xact_lmt = open_conn_lmt;
	accept_content_encodings = ["gzip","identity","x-DRM32;q=0"];
	auth_error = 0.01%;
	credentials = MyPASSWORDS;
	spnego_auth_ratio = 0;
	recurrence = 99%;
	embed_recur = 100%;
	req_methods = ["GET","POST": 10%,"HEAD": 0.1%];
	req_types = ["Basic","Ims200": 5%,"Ims304": 10%,"Reload": 5%];
	post_contents = POST_DATA;
	session.busy_period.duration = (wait_xact_lmt/(peak_rate_needed/RobotCnt));
	session.idle_period_duration = unif(0.1sec, 1sec);
	interests = ["public"];
	unique_urls = no;
	pconn_use_lmt = unif(1, 20);
	idle_pconn_tout = 45sec;
	abort_prob = 3/10000;
	minimize_new_conn = 199/200;
};

Robot R4 = {
	kind = "PolyMix-1-rbt";
	addresses = robotAddrs(asSpread, benchSafeSquid);
	RobotCnt = count(addresses);
	open_conn_lmt = (MaxFDs/RobotCnt)+1;
	wait_xact_lmt = open_conn_lmt;
	accept_content_encodings = ["gzip","identity","x-DRM32;q=0"];
	auth_error = 0.01%;
	credentials = MyPASSWORDS;
	spnego_auth_ratio = 0;
	recurrence = 99%;
	embed_recur = 100%;
	req_methods = ["GET","POST": 10%,"HEAD": 0.1%];
	req_types = ["Basic","Ims200": 5%,"Ims304": 10%,"Reload": 5%];
	post_contents = POST_DATA;
	session.busy_period.duration = (wait_xact_lmt/(peak_rate_needed/RobotCnt));
	session.idle_period_duration = unif(0.1sec, 1sec);
	interests = ["public"];
	unique_urls = no;
	pconn_use_lmt = unif(1, 20);
	idle_pconn_tout = 45sec;
	abort_prob = 3/10000;
	minimize_new_conn = 199/200;
};

string[] ssl_protocols = ["TLSv1"];

string client_root_certificate = "/usr/local/src/safesquid-test/Polygraph/ROOT_X509File.cer";

string server_root_certificate = "/usr/local/src/safesquid-test/Polygraph/CA-priv+pub.pem";

string my_ssl_config_file = "/usr/local/src/safesquid-test/Polygraph/myssl.conf";

string ssl_sharing_group = "idiot";

string[] ssl_ciphers = ["ALL:HIGH:@STRENGTH"];

SslWrap client_ssl_wrap = {
	protocols = ssl_protocols;
	sharing_group = ssl_sharing_group;
	root_certificate = client_root_certificate;
	ssl_config_file = my_ssl_config_file;
	ciphers = ssl_ciphers;
	verify_peer_certificate = true;
	rsa_key_sizes = [2048bit];
};

SslWrap server_ssl_wrap = {
	protocols = ssl_protocols;
	sharing_group = ssl_sharing_group;
	ssl_config_file = my_ssl_config_file;
	root_certificate = server_root_certificate;
	ciphers = ssl_ciphers;
	verify_peer_certificate = false;
	rsa_key_sizes = [2048bit];
};

S2.ssl_wraps = [server_ssl_wrap];

R4.ssl_wraps = [client_ssl_wrap];

R3.dns_resolver = dr;

R4.dns_resolver = dr;

R3.pop_model = TestPopModel;

R4.pop_model = TestPopModel;

S.addresses = [map0.addresses, mapA.addresses];

R3.origins = [map0.names, mapA.names];

S2.addresses = [map00.addresses, mapB.addresses];

R4.origins = [map00.names, mapB.names];

schedule(ph16000);

use(S2, R4);