📄 aggcbqegress-est.cc.cc
字号:
//------------ end of computation --------------------
}
void AggCbqEgress_Est::generatearrivalenvelope0()
{
int j=0;
double tempmean;
double tempmeancount;
double tempvariance;
double tempvariancecount;
double mean;
double variance;
//The arrival envelope is stored in the array arrivalenvelope
//The first column gives the mean and the second column the variance
while(j < 17)
{
navigatelist0 = headoflist0;
tempmean = 0.0;
tempmeancount = 0;
while(navigatelist0->next != headoflist0)
{
if(navigatelist0->maxminarrayoftime0[j][0] != 0 &&
navigatelist0->maxminarrayoftime0[j][0] != 9999)
{
tempmeancount++;
tempmean = tempmean + navigatelist0->maxminarrayoftime0[j][0];
}
navigatelist0 = navigatelist0->next;
}
if(navigatelist0->next == headoflist0)
{
if(navigatelist0->maxminarrayoftime0[j][0] != 0 &&
navigatelist0->maxminarrayoftime0[j][0] != 9999)
{
tempmeancount++;
tempmean = tempmean + navigatelist0->maxminarrayoftime0[j][0];
}
}
if(tempmeancount > 0)
{
mean = tempmean/tempmeancount;
}
else
{
mean = 0.0;
}
arrivalenvelope0[j][0] = mean;
navigatelist0 = headoflist0;
tempvariance = 0.0;
tempvariancecount = 0;
while(navigatelist0->next != headoflist0)
{
if(navigatelist0->maxminarrayoftime0[j][0] != 0 &&
navigatelist0->maxminarrayoftime0[j][0] != 9999)
{
tempvariancecount++;
tempvariance = tempvariance + ((mean -
navigatelist0->maxminarrayoftime0[j][0])*(mean -navigatelist0->maxminarrayoftime0[j][0]));
}
navigatelist0 = navigatelist0->next;
}
if(navigatelist0->next == headoflist0)
{
if(navigatelist0->maxminarrayoftime0[j][0] != 0 &&
navigatelist0->maxminarrayoftime0[j][0] != 9999)
{
tempvariancecount++;
tempvariance = tempvariance + ((mean -
navigatelist0->maxminarrayoftime0[j][0])*(mean - navigatelist0->maxminarrayoftime0[j][0]));
}
}
if(tempvariancecount > 1)
{
variance = tempvariance / (tempvariancecount-1);
}
else
{
variance = 0.0;
}
arrivalenvelope0[j][1] = variance;
j++;
}
printf("\n The arrival envelopes are : \n");
for(j = 0; j < 17; j++)
{
printf(" Row %d --------- Mean is %f ..... Variance is %f \n",j,arrivalenvelope0[j][0],arrivalenvelope0[j][1]);
}
}
void AggCbqEgress_Est::generatearrivalenvelope1()
{
int j=0;
double tempmean;
double tempmeancount;
double tempvariance;
double tempvariancecount;
double mean;
double variance;
//The arrival envelope is stored in the array arrivalenvelope
//The first column gives the mean and the second column the variance
while(j < 17)
{
navigatelist1 = headoflist1;
tempmean = 0.0;
tempmeancount = 0;
while(navigatelist1->next != headoflist1)
{
if(navigatelist1->maxminarrayoftime1[j][0] != 0 &&
navigatelist1->maxminarrayoftime1[j][0] != 9999)
{
tempmeancount++;
tempmean = tempmean + navigatelist1->maxminarrayoftime1[j][0];
}
navigatelist1 = navigatelist1->next;
}
if(navigatelist1->next == headoflist1)
{
if(navigatelist1->maxminarrayoftime1[j][0] != 0 &&
navigatelist1->maxminarrayoftime1[j][0] != 9999)
{
tempmeancount++;
tempmean = tempmean + navigatelist1->maxminarrayoftime1[j][0];
}
}
if(tempmeancount > 0)
{
mean = tempmean/tempmeancount;
}
else
{
mean = 0.0;
}
arrivalenvelope1[j][0] = mean;
navigatelist1 = headoflist1;
tempvariance = 0.0;
tempvariancecount = 0;
while(navigatelist1->next != headoflist1)
{
if(navigatelist1->maxminarrayoftime1[j][0] != 0 &&
navigatelist1->maxminarrayoftime1[j][0] != 9999)
{
tempvariancecount++;
tempvariance = tempvariance + ((mean -
navigatelist1->maxminarrayoftime1[j][0])*(mean -navigatelist1->maxminarrayoftime1[j][0]));
}
navigatelist1 = navigatelist1->next;
}
if(navigatelist1->next == headoflist1)
{
if(navigatelist1->maxminarrayoftime1[j][0] != 0 &&
navigatelist1->maxminarrayoftime1[j][0] != 9999)
{
tempvariancecount++;
tempvariance = tempvariance + ((mean -
navigatelist1->maxminarrayoftime1[j][0])*(mean - navigatelist1->maxminarrayoftime1[j][0]));
}
}
if(tempvariancecount > 1)
{
variance = tempvariance / (tempvariancecount-1);
}
else
{
variance = 0.0;
}
arrivalenvelope1[j][1] = variance;
j++;
}
printf("\n The arrival envelopes are : \n");
for(j = 0; j < 17; j++)
{
printf(" Row %d --------- Mean is %f ..... Variance is %f \n",j,arrivalenvelope1[j][0],arrivalenvelope1[j][1]);
}
}
void AggCbqEgress_Est::generateserviceenvelope0()
{
int j=0;
double tempmean;
double tempmeancount;
double tempvariance;
double tempvariancecount;
double mean;
double variance;
//The service envelope is stored in the array service envelope
//The first column gives the mean and the second column the variance
while(j < 17)
{
navigatelist0 = headoflist0;
tempmean = 0.0;
tempmeancount = 0;
while(navigatelist0->next != headoflist0)
{
if(navigatelist0->maxminarrayoftime0[j][1] != 9999 &&
navigatelist0->maxminarrayoftime0[j][1] != 0)
{
tempmeancount++;
tempmean = tempmean + navigatelist0->maxminarrayoftime0[j][1];
}
navigatelist0 = navigatelist0->next;
}
if(navigatelist0->next == headoflist0)
{
if(navigatelist0->maxminarrayoftime0[j][1] != 9999 &&
navigatelist0->maxminarrayoftime0[j][1] != 0)
{
tempmeancount++;
tempmean = tempmean + navigatelist0->maxminarrayoftime0[j][1];
}
}
if(tempmeancount > 0)
{
mean = tempmean/tempmeancount;
}
else
{
mean = 0.0;
}
serviceenvelope0[j][0] = mean;
navigatelist0 = headoflist0;
tempvariance = 0.0;
tempvariancecount = 0;
while(navigatelist0->next != headoflist0)
{
if(navigatelist0->maxminarrayoftime0[j][1] != 9999 &&
navigatelist0->maxminarrayoftime0[j][1] != 0)
{
tempvariancecount++;
tempvariance = tempvariance + ((mean -
navigatelist0->maxminarrayoftime0[j][1])*(mean -navigatelist0->maxminarrayoftime0[j][1]));
}
navigatelist0 = navigatelist0->next;
}
if(navigatelist0->next == headoflist0)
{
if(navigatelist0->maxminarrayoftime0[j][1] != 9999 &&
navigatelist0->maxminarrayoftime0[j][1] != 0)
{
tempvariancecount++;
tempvariance = tempvariance + ((mean -
navigatelist0->maxminarrayoftime0[j][1])*(mean - navigatelist0->maxminarrayoftime0[j][1]));
}
}
if(tempvariancecount > 1)
{
variance = tempvariance / (tempvariancecount-1);
}
else
{
variance = 0.0;
}
serviceenvelope0[j][1] = variance;
j++;
}
printf("\n The service envelopes are : \n");
for(j = 0; j < 17; j++)
{
printf(" Row %d --------- Mean is %f ..... Variance is %f \n",j,serviceenvelope0[j][0],serviceenvelope0[j][1]);
}
}
void AggCbqEgress_Est::generateserviceenvelope1()
{
int j=0;
double tempmean;
double tempmeancount;
double tempvariance;
double tempvariancecount;
double mean;
double variance;
//The service envelope is stored in the array service envelope
//The first column gives the mean and the second column the variance
while(j < 17)
{
navigatelist1 = headoflist1;
tempmean = 0.0;
tempmeancount = 0;
while(navigatelist1->next != headoflist1)
{
if(navigatelist1->maxminarrayoftime1[j][1] != 9999 &&
navigatelist1->maxminarrayoftime1[j][1] != 0)
{
tempmeancount++;
tempmean = tempmean + navigatelist1->maxminarrayoftime1[j][1];
}
navigatelist1 = navigatelist1->next;
}
if(navigatelist1->next == headoflist1)
{
if(navigatelist1->maxminarrayoftime1[j][1] != 9999 &&
navigatelist1->maxminarrayoftime1[j][1] != 0)
{
tempmeancount++;
tempmean = tempmean + navigatelist1->maxminarrayoftime1[j][1];
}
}
if(tempmeancount > 0)
{
mean = tempmean/tempmeancount;
}
else
{
mean = 0.0;
}
serviceenvelope1[j][0] = mean;
navigatelist1 = headoflist1;
tempvariance = 0.0;
tempvariancecount = 0;
while(navigatelist1->next != headoflist1)
{
if(navigatelist1->maxminarrayoftime1[j][1] != 9999 &&
navigatelist1->maxminarrayoftime1[j][1] != 0)
{
tempvariancecount++;
tempvariance = tempvariance + ((mean -
navigatelist1->maxminarrayoftime1[j][1])*(mean -navigatelist1->maxminarrayoftime1[j][1]));
}
navigatelist1 = navigatelist1->next;
}
if(navigatelist1->next == headoflist1)
{
if(navigatelist1->maxminarrayoftime1[j][1] != 9999 &&
navigatelist1->maxminarrayoftime1[j][1] != 0)
{
tempvariancecount++;
tempvariance = tempvariance + ((mean -
navigatelist1->maxminarrayoftime1[j][1])*(mean - navigatelist1->maxminarrayoftime1[j][1]));
}
}
if(tempvariancecount > 1)
{
variance = tempvariance / (tempvariancecount-1);
}
else
{
variance = 0.0;
}
serviceenvelope1[j][1] = variance;
j++;
}
printf("\n The service envelopes are : \n");
for(j = 0; j < 17; j++)
{
printf(" Row %d --------- Mean is %f ..... Variance is %f \n",j,serviceenvelope1[j][0],serviceenvelope1[j][1]);
}
}
void AggCbqEgress_Est::estimate()
{
static int check = 0;
if(check == 0)
{
double now2 = Scheduler::instance().clock();
printf("\n the time in estimate function is %f \n",now2);
// This part of the code is for extracting the arrival and service times of the
// packets into an array
extractarrivalservicetimesintoarray();
// this part of the code is used for generating the table which contains the
// maximum arrival time and minimum service time for 1k, 2k, 4k...... 64k
computationofminarrivalmaxservicetimes0();
computationofminarrivalmaxservicetimes1();
// This part of the code is for creating the circular list which keeps data over a
// time period of 10 seconds
createmaxmintimelist0(maxmintimes0);
createmaxmintimelist1(maxmintimes1);
// printmaxmintimelist0();
// printmaxmintimelist1();
// This part of the code is for generating the arrival and service envelopes
// The arrival envelope contains the mean and variance of all the arrival times
generatearrivalenvelope0();
generatearrivalenvelope1();
// The service envelope contains the mean and variance of all the service times
generateserviceenvelope0();
generateserviceenvelope1();
Trace::snoopqueueinitialize();
Trace::setsnoopqueuecount();
}
if(check == 0)
{
check = 1;
}
else
{
check = 0;
}
}
void AggCbqEgress_Est::start() {
printf("AggTrafEnv_Est::start\n");
initializemaxminlist0();
initializemaxminlist1();
//printmaxmintimelist();
est_timer_.resched(period_);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -