PolyMix4As asPolyMix4 = { agents_per_addr = 2; }; Bench TheBench = { client_side = { max_host_load = 500/sec; max_agent_load = 0.4/sec; addr_space = [ 'lo0::10.30.0-123.1-250/22' ]; hosts = [ '172.16.30.61' ]; }; server_side = { max_host_load = client_side.max_host_load; max_agent_load = undef(); addr_space = [ 'lo0::10.30.128-251.1-250:80/22' ]; hosts = [ '172.16.30.191' ]; }; peak_req_rate = 350/sec; }; size ProxyCacheSize = 3*7500MB; DnsResolver Resolver = { servers = [ '10.0.8.1:53' ]; timeout = 5sec; }; 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 olcOther = { length = unif(1day, 1year); variance = 50%; with_lmt = 100%; expires = [nmt + const(0sec)]; }; 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 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%, cntOther ]; direct_access = [ cntHTML, cntDownload, 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%; }; 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.0" ]; }; time platDur = 4hour; 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 = 3min; recur_factor_beg = 5%/55%; recur_factor_end = 1; special_msg_factor_beg = 0.1; special_msg_factor_end = 1; populus_factor_beg = smallFactor; populus_factor_end = (100/sec)/(TheBench.peak_req_rate); }; float adjustment = 1.0%; Goal downSample = { xactions = 1000; }; Goal upSample = { xactions = 1000; }; Goal adjustmentPeriod = { fill_size = 2*ProxyCacheSize/50; }; time miss_target = 3.0sec; time hit_target = 0.25sec; Phase phPF = { name = "peak_finder"; goal.fill_size = 2*ProxyCacheSize; script = { every downSample do { StatSample sample = currentSample(); time miss = sample.real.miss.rptm.mean; time hit = sample.real.hit.rptm.mean; if (miss > miss_target) then { print("miss.rptm=", miss, " hit.rptm=", hit, "; adjusting by ", -100 * adjustment, "%"); changePopulusFactorBy(-adjustment); } else { if (hit > hit_target) then { print("miss.rptm=", miss, " hit.rptm=", hit, "; adjusting by ", -100 * adjustment, "%"); changePopulusFactorBy(-adjustment); } } } every upSample do { StatSample phase = currentPhase(); if (phase.populus.level.last < (count(R.addresses)*0.98)) then { StatSample sample = currentSample(); time miss = sample.real.miss.rptm.mean; time hit = sample.real.hit.rptm.mean; if (miss < miss_target) then { if (hit < hit_target) then { print("miss.rptm=", miss, " hit.rptm=", hit, "; adjusting by ", 100 * adjustment, "%"); changePopulusFactorBy(adjustment); } } } } every adjustmentPeriod do { adjustment = adjustment - 0.01%; } }; }; schedule(phFRamp, phPF); use(S, R); use(Map); use(TheBench);