// this is just one of the simplest workloads that can produce hits
// never use this workload for benchmarking
Content value1= {
kind = "HTTP_value1"; // just a label
mime = { type = undef(); prefixes = ["MP4_value1_pgclient/"]; extensions = [ ".mp4" ]; };
size = exp(5MB);
cachable = 100%;
};
Content value2= {
kind = "HTTP_value2"; // just a label
mime = { type = undef(); prefixes = ["MP4_value2_pgclient/"]; extensions = [ ".mp4" ]; };
size = exp(5MB);
cachable = 100%;
};
//ips
//addr[] srv_ips =['127.0.0.1:8002'];
//addr[] rbt_ips =['127.0.0.1' ** 10];
addr[] srv_ips =['172.134.1-10.1-145:8002', '172.170.1-10.1-145:8002'];
addr[] rbt_ips =['172.133.10-19.1-110'];
// a primitive server cleverly labeled "S101"
// normally, you would specify more properties,
// but we will mostly rely on defaults for now
Server S = {
kind = "S101";
contents = [ value1: 60%, value2: 40% ];
direct_access = contents;
addresses = srv_ips; // where to create these server agents
};
// a primitive robot
Robot R = {
kind = "R101";
pop_model = { pop_distr = popUnif(); };
recurrence = 40%; //
req_rate = 1/sec;
origins = S.addresses; // where the origin servers are
addresses = rbt_ips; // where these robot agents will be created
};
/* working set capacity */
working_set_cap(48933);
/* phases (note that load is kept at constant level) */
time ExpDur = 4000hour; // experiment duration
Phase phases1 = {
name = "phases1";
goal.duration = 10% * ExpDur;
};
Phase phases2 = {
name = "phases2";
goal.duration = ExpDur - phases1.goal.duration; // the rest of the run
};
schedule(
phases1, phases2
);
// commit to using these servers and robots
use(S, R);
./polygraph-client --cfg_dirs ../share/polygraph/workloads/include/ --config ./simple.pg --verb_lvl 10
--log a.log --proxy 127.0.0.1:3128
- nginx
- url rewrite. request http url like "http://ip:port/MP4_value1_pgclient/w19fa92dc.44827bae:00001438/t03/_00000001.mp4" and "http://ip:port/MP4_value2_pgclient/w19fa92dc.44827bae:00001438/t03/_00000001.mp4".
#rewrite about polygraph rewrite "^(/MP4_value1_pgclient)" /video-test/value1_stream.mp4; rewrite "^(/MP4_value2_pgclient)" /video-test/value2_stream.mp4;
- cacheable: Represents 30% of the line "if sum% 10 <3 then" cacheable.
location ~ \.(flv|mp4|3gp) {
set $v1 "null";
set $v2 "null";
set $v3 "null";
if ($request_uri ~* ^\/[0-9a-zA-Z_]*_pgclient\/([0-9a-zA-Z:\.]*)\/([0-9a-zA-Z]*)\/([_0-9a-zA-Z]*)\.(flv|mp4|3gp)$ ) {
set $v1 $1;
set $v2 $2;
set $v3 $3;
header_filter_by_lua '
sum=0;
string_key = ngx.var.v1 .. ngx.var.v2 .. ngx.var.v3;
for i=1, string.len(string_key) do
sum = sum + string.byte(string_key, i);
end
ngx.header["X-test_value"] = ngx.var.v1 .. ngx.var.v2 .. ngx.var.v3 .. "--" .. sum .. ":" .. sum%10;
if sum % 10 < 3 then
ngx.header["Cache-Control"] = "private";
else
ngx.header["Cache-Control"] = "public";
end
';
}
}
- add header:
location ~ \.mp4 {
mp4;
expires 120s;
add_header Cache-Control public;
}