バランス境界作業アルゴリズム同時シミュレーション3層アーキテクチャに基づくWebシステムのベンチマーク性能をテストする
トランスミッションゲートhttp://blog.csdn.net/leverage_1229
一、実験パラメータリスト
二、MATLABスクリプト(appr_mva_bounds.m)
三、バランス作業境界予測応答時間とスループット
一、実験パラメータリスト
二、MATLABスクリプト(appr_mva_bounds.m)
clear;
% input
N1 = input('Number of customers of class 1 N1 = '); % number of customers of class 1
N2 = input('Number of customers of class 2 N2 = '); % number of customers of class 2
M = input('number of applicaion tiers M = '); % number of applicaion tiers
for k = 2:(M+1)
S1(k) = input('Average service time S1 = '); % average service time per tier of class 1
V1(k) = input('Visit number V1 = '); % visit number per tier of class 1
end
Z1 = input('Think time Z1 = '); % average think time of class 1
for k = 2:(M+1)
S2(k) = input('Average service time S2 = '); % average service time per tier of class 2
V2(k) = input('Visit number V2 = '); % visit number per tier of class 2
end
Z2 = input('Think time Z2 = '); % average think time of class 2
% initialization
S1(1) = Z1;
V1(1) = 1;
for m = 1:(M+1)
D1(m) = V1(m) * S1(m); % service demand per tier of class 1
end
S2(1) = Z2;
V2(1) = 1;
for m = 1:(M+1)
D2(m) = V2(m) * S2(m); % service demand per tier of class 2
end
vN2 = [1 5:5:N2];
for n = 1:length(vN2) % up to a maximum number of customers
N2 = vN2(n);
% APPROXIMATE MVA ALGORITHM
% initialization
for m = 2:(M+1)
Q1(m) = N1/M;
Q2(m) = N2/M;
end
error = [1 1 1 1 1 1];
R1(1) = D1(1);
R2(1) = D2(1);
while max(error) > 0.01
for m = 2:(M+1)
A1(m) = (N1-1)/N1*Q1(m) + Q2(m); % average number of customers per tier of class 1
A2(m) = (N2-1)/N2*Q2(m) + Q1(m); % average number of customers per tier of class 2
end
for m = 2:(M+1)
R1(m) = D1(m) * (1 + A1(m)); % average delay per tier of class 1
R2(m) = D2(m) * (1 + A2(m)); % average delay per tier of class 2
end
X1 = N1 / (sum(R1(:))); % throughput of class 1
X2 = N2 / (sum(R2(:))); % throughput of class 2
for m = 2:(M+1)
Q1old(m) = Q1(m); % old length of queue 1
Q2old(m) = Q2(m); % old length of queue 2
Q1(m) = X1 * R1(m); % new length of queue 1
Q2(m) = X2 * R2(m); % new length of queue 2
end
for m = 2:(M+1)
error(m-1) = abs((Q1(m) - Q1old(m)) / Q1old(m));
error(m-1+M) = abs((Q2(m) - Q2old(m)) / Q2old(m));
end
end
for m = 2:(M+1)
U1n(n,m) = X1 * S1(m) * V1(m); % tier utilization of class 1
U2n(n,m) = X2 * S2(m) * V2(m); % tier utilization of class 2
end
X1n(n) = X1; % throughput of class 1
X2n(n) = X2; % throughput of class 2
RT1n(n) = sum(R1(2:(M+1))); % response time of class 1
RT2n(n) = sum(R2(2:(M+1))); % response time of class 2
end
% BALANCED JOB BOUNDS
D1max = max(D1(2:(M+1))); % maximum service demand per queue of class 1
D2max = max(D2(2:(M+1))); % maximum service demand per queue of class 2
D1sum = sum(D1(2:(M+1))); % sum of total service demands of class 1
D2sum = sum(D2(2:(M+1))); % sum of total service demands of class 2
D1avg = D1sum/M; % average service demand per queue of class 1
D2avg = D2sum/M; % average service demand per queue of class 2
for n = 1:length(vN2)
N = vN2(n) + N1;
R2min(n) = max(N * D2max - Z2, D2sum + ((N-1)*D2avg*D2sum/(D2sum+Z2))); % lower bound of response time
R2max(n) = D2sum + ((N-1)*D2max*(N-1)*D2sum/(((N-1)*D2sum)+Z2)); % upper bound of response time
X2min(n) = vN2(n) / (Z2 + R2max(n)); % lower bound of throughput
X2max(n) = vN2(n) / (Z2 + R2min(n)); % upper bound of throughput
for m = 2:(M+1)
U2minm(n,m) = X2min(n) * D2(m); % lower bound of utilization per tier
U2maxm(n,m) = X2max(n) * D2(m); % upper bound of utilization per tier
end
end
t = vN2;
% response time
figure(1), plot(t, RT2n,'r', t, R2min, 'g', t, R2max, 'b'), xlabel('Simultaneous browser connections'), ylabel('Response time(s)');
% throughput
figure(2), plot(t, X2n,'r', t,X2min,'g', t, X2max, 'b'), xlabel('Simultaneous browser connections'), ylabel('Throughput(1/s)');
三、バランス作業境界予測応答時間とスループット