Warning: this workload file is out of date and preserved here for historical purposes only. /* * PolyMix-3 workload * */ #include "contents.pg" #include "phases.pg" #include "pipes.pg" // Fill rate (must be between 10% and 100% of peak request rate, PeakRate) // Set your fill rate here (e.g., 100/sec) rate FillRate = undef(); /* * The peak request rate depends on the number of robots (each robot is * configured with a constant 0.4/sec rate). If you are designing a custom * workload, you can change that, of course. */ rate PeakRate = undef(); // where the simulated servers and robots will be located // these ips will need adjustments based on your local environment! addr[] srv_ips = ['127.0.0.1:8080', '127.0.0.1:8888' ]; addr[] rbt_ips = ['127.0.0.1' ]; // describe PolyMix-3 server Server S = { kind = "PolyMix-3-srv"; contents = [ cntImage: 65%, cntHTML: 15%, cntDownload: 0.5%, cntOther ]; direct_access = [ cntHTML, cntDownload, cntOther ]; xact_think = norm(2.5sec, 1sec); pconn_use_lmt = zipf(16); idle_pconn_tout = 15sec; hosts = srv_ips; }; // describe PolyMix-3 robot Robot R = { kind = "PolyMix-3-rbt"; origins = srv_ips; recurrence = 55%/80%; // adjust for average cachability embed_recur = 100%; public_interest = 50%; req_types = [ "IMS" : 20%, "Reload" : 5%, "Basic" ]; pop_model = pmUnif(); hot_wss = 10%; // simulate "hot" subset of hot_wss_prob = 10%; // working set size req_rate = 0.4/sec; pconn_use_lmt = zipf(64); open_conn_lmt = 4; // open connections limit launch_win = 2.5min; // avoid burst of requests at start hosts = rbt_ips; }; // compute peak request rate PeakRate = count(R.hosts)*R.req_rate; /* phases */ time platDur = 4hour; // plateau phases duration (except idle phase) time rampDur = 30min; // ramp phases duration (and idle phase) float FillFactor = FillRate/PeakRate; Phase phWarm = { name = "warm"; goal.duration = 2*R.launch_win; load_factor_beg = 0.1; log_stats = false; }; Phase phFRamp = { name = "framp"; goal.duration = rampDur; load_factor_end = FillFactor; }; Phase phFill = { name = "fill"; goal.fill_size = 2*CacheSize; recur_factor = 5%/80%; } Phase phInc1 = { name = "inc1"; goal.duration = rampDur; load_factor_end = 1.0; }; Phase phTop1 = { name = "top1"; goal.duration = platDur; }; Phase phDec1 = { name = "dec1"; goal.duration = rampDur; load_factor_end = 0.1; }; Phase phIdle = { name = "idle"; goal.duration = rampDur; }; Phase phInc2 = { name = "inc2"; goal.duration = rampDur; load_factor_end = 1.0; }; Phase phTop2 = { name = "top2"; goal.duration = platDur; }; Phase phDec2 = { name = "dec2"; goal.duration = rampDur; load_factor_end = 0.1; }; // build schedule using some well-known phases and phases defined above schedule( phWarm, phFRamp, phFill phInc1, phTop1, phDec1, phIdle, phInc2, phTop2, phDec2, phCool); // limit growth of URL "working set" working_set_length(4*phu); // commit to using these servers and robots use(S, R); /* Todo (things that may be changed before this workload becomes official): - decide whether FillRate can exceed PeakRate - make objects cachability phase-dependent? - working set algorithm may need to be adjusted for the fill phase - Object Lifecycle model needs better parameters - move embedded objects back into the Polygraph URL namespace - support filename extensions in URLs - if possible, replace "linear" ramps with log-based ones */