1/* 2 * WebAxe-4 workload (the details) 3 * 4 */ 5 6/* modifications in this file cause non-compliance with WebAxe rules 7 * all user-specified parameters are in webaxe-4.pg */ 8 9 10#include "contents.pg" 11 12 13Server S = { 14 kind = "WebAxe-4-srv"; 15 16 contents = [ cntImage: 65%, cntHTML: 15%, cntDownload: 0.5%, cntOther ]; 17 direct_access = [ cntHTML, cntDownload, cntOther ]; 18 19 xact_think = norm(0.3sec, 0.1sec); 20 pconn_use_lmt = zipf(64); 21 idle_pconn_tout = 15sec; 22 abort_prob = 0.1%; 23 24 addresses = serverAddrs(asWebAxe4, TheBench); 25 http_versions = [ "1.0" ]; // newer agents use HTTP/1.1 by default 26}; 27 28AddrMap Map = { 29 zone = "bench.tst"; 30 addresses = S.addresses; 31 names = TheBench.proxy_side.hosts; 32}; 33 34// popularity model for the robots 35PopModel popModel = { 36 pop_distr = popUnif(); 37 hot_set_frac = 1%; // fraction of WSS (i.e., hot_set_size / WSS) 38 hot_set_prob = 10%; // prob. of req. an object from the hot set 39 40 bhr_discrimination = 90%; // revisit smaller files more often 41}; 42 43Robot R = { 44 kind = "WebAxe-4-rbt"; 45 46 recurrence = 95%; 47 embed_recur = 100%; 48 pop_model = popModel; 49 50 req_types = [ "Basic", "Ims200": 5%, "Ims304": 10%, "Reload" : 5% ]; 51 req_methods = [ "GET", "POST" : 1.5%, "HEAD" : 0.1% ]; 52 abort_prob = 0.1%; 53 54 req_rate = TheBench.client_side.max_agent_load; 55 pconn_use_lmt = zipf(16); 56 open_conn_lmt = 4; 57 58 origins = Map.names; 59 addresses = robotAddrs(asWebAxe4, TheBench); 60 http_versions = [ "1.0" ]; // newer agents use HTTP/1.1 by default 61 62 post_contents = [ cntSimpleRequest ]; 63}; 64 65 66/* phases */ 67 68time platDur = 4hour; // plateau phases duration (except idle phase) 69time rampDur = platDur/12; // ramp phases duration (and idle phase) 70 71// limit the growth of the URL "working set" size (WSS) 72int clientHostCount = clientHostCount(TheBench); 73working_set_cap(int(WSS/11KB/clientHostCount)); 74 75float smallFactor = 1.0/count(R.addresses); 76 77Phase phFRamp = { 78 name = "framp"; 79 goal.duration = rampDur; 80 recur_factor_beg = 5%/55%; 81 special_msg_factor_beg = 0.1; 82 populus_factor_beg = smallFactor; 83 populus_factor_end = FillRate/TheBench.peak_req_rate; 84}; 85 86Phase phFill = { 87 name = "fill"; 88 goal.fill_size = 2*ProxyCacheSize / clientHostCount; 89 wait_wss_freeze = yes; // will finish only if WSS is frozen 90}; 91 92Phase phFExit = { 93 name = "fexit"; 94 goal.duration = rampDur; 95 recur_factor_end = 1; 96 special_msg_factor_end = 1; 97 populus_factor_end = smallFactor; 98}; 99 100Phase phInc1 = { 101 name = "inc1"; 102 goal.duration = rampDur; 103 populus_factor_end = 1; 104}; 105 106Phase phTop1 = { name = "top1"; goal.duration = platDur; }; 107Phase phDec1 = { name = "dec1"; goal.duration = rampDur; populus_factor_end = 0.1; }; 108 109Phase phIdle = { name = "idle"; goal.duration = rampDur; }; 110 111Phase phInc2 = { name = "inc2"; goal.duration = rampDur; populus_factor_end = 1.0; }; 112Phase phTop2 = { name = "top2"; goal.duration = platDur; }; 113Phase phDec2 = { name = "dec2"; goal.duration = rampDur; populus_factor_end = 0; synchronize = false; }; 114 115/* collect stats samples in the middle of plateau phases */ 116StatsSample topSample = { capacity = 10000; }; 117StatsSample fillSample = { capacity = int(10% * topSample.capacity); }; 118 119phFill.stats_samples = [ fillSample ]; 120phTop1.stats_samples = [ topSample ]; 121phTop2.stats_samples = [ topSample ]; 122 123// build schedule using some well-known phases and phases defined above 124schedule( 125 phFRamp, phFill, phFExit, 126 phInc1, phTop1, phDec1, 127 phIdle, 128 phInc2, phTop2, phDec2 129); 130 131 132// commit to using these objects 133use(S, R); 134use(Map); 135use(TheBench); 136 137// do not forget to configure network level delay and packet loss! 138// client side: 40msec delay and 0.05% packet loss in both directions 139// server side: no delays or packet loss 140