8G-Writer: workload

1. English interpretation

TBD.


2. PGL code

Bench benchPolyMix3 = {
	peak_req_rate = undef();
	client_side = {
		max_host_load = 400/sec;
		max_agent_load = 0.4/sec;
		addr_mask = '10.1.0.0';
	};
	server_side = {
		max_host_load = client_side.max_host_load;
		max_agent_load = client_side.max_agent_load;
		addr_mask = '10.1.0.0:80';
	};
};

Bench benchWebAxe4 = {
	client_side = {
		max_host_load = 500/sec;
		max_agent_load = 0.4/sec;
		addr_space = ['lo::10.174.1-123.1-250/22'];
	};
	server_side = {
		max_host_load = client_side.max_host_load;
		max_agent_load = max_host_load;
	};
};

Bench benchPolyMix4 = {
	client_side = {
		max_host_load = 500/sec;
		max_agent_load = 0.4/sec;
		addr_space = ['lo::10.174.0-123.1-250/22'];
	};
	server_side = {
		max_host_load = client_side.max_host_load;
		max_agent_load = undef();
		addr_space = ['lo::10.174.128-251.1-250:80/22'];
	};
};

PolyMix3As asPolyMix3;

PolyMix4As asPolyMix4 = {
	agents_per_addr = 2;
};

WebAxe4As asWebAxe4 = {
	agents_per_addr = 2;
};

SrvLb4As asNoLb_L4_4 = {
	agents_per_addr = 1;
};

SrvLb4As asSrvLb_L4_4 = {
	agents_per_addr = 1;
};

SrvLb4As asSrvLb_L7_4 = {
	agents_per_addr = 1;
};

Bench TheBench = benchPolyMix4;

TheBench = {
	client_side = {
		addr_space = ['lo::10.174.0-123.1-250/22'];
		hosts = ['138.23.174.142'];
	};
	server_side = {
		addr_space = ['lo::10.174.128-251.1-250:9090/22'];
		hosts = ['138.23.174.139:9090'];
	};
};

TheBench.peak_req_rate = 30/sec;

rate FillRate = 80%*TheBench.peak_req_rate;

size ProxyCacheSize = 1024MB;

DnsResolver Resolver;

Resolver.servers = ['138.23.174.140:53'];

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

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

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

ObjLifeCycle olcDownload = {
	length = logn(0.5year, 30day);
	variance = 33%;
	with_lmt = 100%;
	expires = [nmt+const(0sec)];
};

ObjLifeCycle olcApplet = {
	length = logn(0.5year, 30day);
	variance = 33%;
	with_lmt = 100%;
	expires = [nmt+const(0sec)];
};

ObjLifeCycle olcOther = {
	length = unif(1day, 1year);
	variance = 50%;
	with_lmt = 100%;
	expires = [nmt+const(0sec)];
};

Content cntPolyMix_1 = {
	kind = "polymix-1";
	mime = {
		type = undef();
		extensions = [];
	};
	size = exp(13KB);
	obj_life_cycle = olcStatic;
	cachable = 80%;
};

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

Content cntHTML = {
	kind = "HTML";
	mime = {
		type = undef();
		extensions = [".html": 60%,".htm"];
	};
	obj_life_cycle = olcHTML;
	size = exp(8.5KB);
	cachable = 90%;
	checksum = 1%;
	may_contain = [cntImage];
	embedded_obj_cnt = zipf(13);
};

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

Content cntApplet = {
	kind = "applet";
	mime = {
		type = undef();
		extensions = [".class"];
	};
	obj_life_cycle = olcDownload;
	cachable = 95%;
	checksum = 0.01%;
	content_db = "class.cdb";
};

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

Server S = {
	kind = "PolyMix-4-srv";
	contents = [cntImage: 65%, cntHTML: 15%, cntDownload: 0.5%, cntApplet: 0.3%, cntOther];
	direct_access = [cntHTML, cntDownload, cntApplet, cntOther];
	xact_think = norm(2.5sec, 1sec);
	pconn_use_lmt = zipf(16);
	idle_pconn_tout = 15sec;
	abort_prob = 0.1%;
	addresses = serverAddrs(asPolyMix4, TheBench);
	http_versions = ["1.0"];
};

AddrMap Map = {
	zone = "bench.tst";
	addresses = S.addresses;
	names = ipsToNames(addresses, zone);
};

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

Resolver.timeout = 5sec;

float HitIfRepeat = 80%;

Robot R = {
	kind = "PolyMix-4-rbt";
	recurrence = 55%/HitIfRepeat;
	embed_recur = 100%;
	interests = ["public": 75%,"private"];
	pop_model = popModel;
	req_types = ["Basic","Ims200": 5%,"Ims304": 10%,"Reload": 5%];
	req_methods = ["GET","POST": 1.5%,"HEAD": 0.1%];
	abort_prob = 0.1%;
	req_rate = TheBench.client_side.max_agent_load;
	pconn_use_lmt = zipf(64);
	open_conn_lmt = 4;
	dns_resolver = Resolver;
	origins = Map.names;
	addresses = robotAddrs(asPolyMix4, TheBench);
	http_versions = ["1.1"];
};

time platDur = 4hour;

time rampDur = platDur/12;

int clientHostCount = clientHostCount(TheBench);

float fillable_ratio = HitIfRepeat;

rate peak_fill_rate = TheBench.peak_req_rate*0.45*fillable_ratio;

int wsc = int(peak_fill_rate*platDur);

working_set_cap(wsc/clientHostCount);

float smallFactor = 1.0/count(R.addresses);

Phase phFRamp = {
	name = "framp";
	goal.duration = rampDur;
	recur_factor_beg = 5%/55%;
	special_msg_factor_beg = 0.1;
	populus_factor_beg = smallFactor;
	populus_factor_end = FillRate/TheBench.peak_req_rate;
};

Phase phFill = {
	name = "fill";
	goal.fill_size = 2*ProxyCacheSize/clientHostCount;
	wait_wss_freeze = yes;
};

Phase phFExit = {
	name = "fexit";
	goal.duration = rampDur;
	recur_factor_end = 1;
	special_msg_factor_end = 1;
	populus_factor_end = smallFactor;
};

Phase phInc1 = {
	name = "inc1";
	goal.duration = rampDur;
	populus_factor_end = 1;
};

Phase phTop1 = {
	name = "top1";
	goal.duration = platDur;
};

Phase phDec1 = {
	name = "dec1";
	goal.duration = rampDur;
	populus_factor_end = 0.1;
};

Phase phIdle = {
	name = "idle";
	goal.duration = rampDur;
};

Phase phInc2 = {
	name = "inc2";
	goal.duration = rampDur;
	populus_factor_end = 1.0;
};

Phase phTop2 = {
	name = "top2";
	goal.duration = platDur;
};

Phase phDec2 = {
	name = "dec2";
	goal.duration = rampDur;
	populus_factor_end = 0;
	synchronize = false;
};

StatsSample topSample = {
	capacity = 10000;
};

StatsSample fillSample = {
	capacity = int(10%*topSample.capacity);
};

phFill.stats_samples = [fillSample];

phTop1.stats_samples = [topSample];

phTop2.stats_samples = [topSample];

schedule(phFRamp, phFill, phFExit, phInc1, phTop1, phDec1, phIdle, phInc2, phTop2, phDec2);

use(S, R);

use(Map);

use(TheBench);