def run3(prefix):
    parameters = System.Parameters(n_users=25,
                                   n_CPUs=4,
                                   easeInTime=20.0,
                                   maxIters=10000,
                                   bufferCapacity=800,
                                   threadpoolSize=200,
                                   quantum=0.5,
                                   ctxxTime=0.01,
                                   serviceTimeMean=2.0,
                                   requestTimeoutMin=5.0,
                                   requestTimeoutMax=15.0,
                                   thinkTimeMean=12.0,
                                   thinkTimeStdv=4.0,
                                   retryThinkTimeMean=12.0,
                                   retryThinkTimeStdv=4.0)

    x_data = []
    throughput_y_data = []
    responseTime_y_data = []
    responseTime_ci = []
    utilization_y_data = []
    goodput_y_data = []
    badput_y_data = []
    dropRate_y_data = []
    droppedFraction_y_data = []
    timedOutFraction_y_data = []

    min_quantum = 0.5
    max_quantum = 4.0
    step = 0.5
    beta = 0.95

    for ctxxTime in [
            0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3,
            1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 3.0, 4.0
    ]:
        print("Quantum:", ctxxTime)
        repeatRuns = 10
        parameters.quantum = ctxxTime
        x_data.append(ctxxTime)
        throughput = 0.0
        responseTime_samples = []
        utilization = 0.0
        goodput = 0.0
        badput = 0.0
        dropRate = 0.0
        droppedFraction = 0.0
        timedOutFraction = 0.0
        for _ in range(0, repeatRuns):
            simulator = Simulator(parameters)
            metrics = simulator.run()
            throughput += metrics.throughput
            responseTime_samples.append(metrics.responseTime)
            utilization += metrics.utilization
            goodput += metrics.goodput
            badput += metrics.badput
            dropRate += metrics.dropRate
            droppedFraction += metrics.droppedFraction
            timedOutFraction += metrics.timedOutFraction

        (responseTime_lb, responseTime_mean,
         responseTime_ub) = confidenceIntervals(responseTime_samples, beta)
        throughput_y_data.append(scipy.mean(throughput) / repeatRuns)
        utilization_y_data.append(scipy.mean(utilization) / repeatRuns)
        responseTime_y_data.append(responseTime_mean)
        responseTime_ci.append((responseTime_ub - responseTime_lb) / 2)
        goodput_y_data.append(scipy.mean(goodput) / repeatRuns)
        badput_y_data.append(scipy.mean(badput) / repeatRuns)
        dropRate_y_data.append(scipy.mean(dropRate) / repeatRuns)
        droppedFraction_y_data.append(scipy.mean(droppedFraction) / repeatRuns)
        timedOutFraction_y_data.append(
            scipy.mean(timedOutFraction) / repeatRuns)

    # f = open(prefix + "_data.tsv", "w")
    # print("ctxxTime\tThroughput\tResponseTime\tUtilization\tGoodput\tBadput\tDropRate", file=f)
    # for i in range(min_users - 1, max_users):
    # 	print(x_data[i], end="\t", file=f)
    # 	print("{0:.4f}".format(throughput_y_data[i]), end="\t", file=f)
    # 	print("{0:.4f}".format(responseTime_y_data[i]), end="\t", file=f)
    # 	print("{0:.4f}".format(utilization_y_data[i]), end="\t", file=f)
    # 	print("{0:.4f}".format(goodput_y_data[i]), end="\t", file=f)
    # 	print("{0:.4f}".format(badput_y_data[i]), end="\t", file=f)
    # 	print("{0:.4f}".format(dropRate_y_data[i]), file=f)
    # f.close()

    plt.title("Throughput v/s Quantum")
    plt.xlabel("Quantum")
    plt.ylabel("Throughput (req / s)")
    plt.plot(x_data, throughput_y_data, "c")
    plt.grid(True)
    plt.savefig(prefix + "_Throughput.png")
    plt.close()

    plt.title("Goodput v/s Quantum")
    plt.xlabel("Quantum")
    plt.ylabel("Goodput (req / s)")
    plt.plot(x_data, goodput_y_data, "c")
    plt.grid(True)
    plt.savefig(prefix + "_Goodput.png")
    plt.close()

    plt.title("Badput v/s Quantum")
    plt.xlabel("Quantum")
    plt.ylabel("Badput (req / s)")
    plt.plot(x_data, badput_y_data, "c")
    plt.grid(True)
    plt.savefig(prefix + "_Badput.png")
    plt.close()

    plt.title("Request Drop Rate v/s Quantum")
    plt.xlabel("Quantum")
    plt.ylabel("Request Drop Rate (req / s)")
    plt.plot(x_data, dropRate_y_data, "c")
    plt.grid(True)
    plt.savefig(prefix + "_DropRate.png")
    plt.close()

    plt.title("Request Drop Fracttion v/s Quantum")
    plt.xlabel("Quantum")
    plt.ylabel("Request Drop Fraction")
    plt.plot(x_data, droppedFraction_y_data, "c")
    plt.grid(True)
    plt.savefig(prefix + "_DroppedFraction.png")
    plt.close()

    plt.title("Timed out Fracttion v/s Quantum")
    plt.xlabel("Quantum")
    plt.ylabel("Timed Out Fraction")
    plt.plot(x_data, timedOutFraction_y_data, "c")
    plt.grid(True)
    plt.savefig(prefix + "_TimedOutFraction.png")
    plt.close()

    plt.title("Response Time v/s Quantum")
    plt.xlabel("Quantum")
    plt.ylabel("Response Time (s)")
    plt.plot(x_data, responseTime_y_data, "c")
    plt.errorbar(x_data,
                 responseTime_y_data,
                 yerr=responseTime_ci,
                 linestyle="None")
    plt.grid(True)
    plt.savefig(prefix + "_ResponseTime.png")
    plt.close()

    plt.title("CPU Utilization v/s Quantum")
    plt.xlabel("Quantum")
    plt.ylabel("CPU Utilization")
    plt.plot(x_data, utilization_y_data, "c")
    plt.grid(True)
    plt.savefig(prefix + "_Utilization.png")
    plt.close()

    plt.title("CPU Utilization v/s Throughput")
    plt.xlabel("Throught")
    plt.ylabel("CPU Utilization")
    plt.plot(throughput_y_data, utilization_y_data, "c")
    plt.grid(True)
    plt.savefig(prefix + "_UtilizationThroughput.png")
    plt.close()
Exemplo n.º 2
0
#!/usr/bin/env python3

from Simulator import Simulator
from System import System

parameters = System.Parameters(n_users=50,
                               n_CPUs=4,
                               easeInTime=20.0,
                               maxIters=10000,
                               bufferCapacity=800,
                               threadpoolSize=200,
                               quantum=0.5,
                               ctxxTime=1,
                               serviceTimeMean=2,
                               requestTimeoutMin=100.0,
                               requestTimeoutMax=300.0,
                               thinkTimeMean=12.0,
                               thinkTimeStdv=4.0,
                               retryThinkTimeMean=12.0,
                               retryThinkTimeStdv=4.0)

simulator = Simulator(parameters)
metrics = simulator.run()
metrics.display()
def correctness(prefix):
    parameters = System.Parameters(n_users=50,
                                   n_CPUs=1,
                                   easeInTime=20.0,
                                   maxIters=10000,
                                   bufferCapacity=8000000,
                                   threadpoolSize=2000000,
                                   quantum=10000.0,
                                   ctxxTime=0.0,
                                   serviceTimeMean=0.5,
                                   requestTimeoutMin=1000.0,
                                   requestTimeoutMax=2000.0,
                                   thinkTimeMean=12.0,
                                   thinkTimeStdv=4.0,
                                   retryThinkTimeMean=12.0,
                                   retryThinkTimeStdv=4.0)

    x_data = []
    throughput_y_data = []
    responseTime_y_data = []
    responseTime_ci = []
    utilization_y_data = []

    min_users = 1
    max_users = 60
    beta = 0.95

    for users in range(min_users, max_users + 1):
        print("Users:", users)
        repeatRuns = 10
        parameters.n_users = users
        x_data.append(users)
        throughput = 0.0
        responseTime_samples = []
        utilization = 0.0
        for _ in range(0, repeatRuns):
            simulator = Simulator(parameters)
            metrics = simulator.run()
            throughput += metrics.throughput
            responseTime_samples.append(metrics.responseTime)
            utilization += metrics.utilization

        (responseTime_lb, responseTime_mean,
         responseTime_ub) = confidenceIntervals(responseTime_samples, beta)
        throughput_y_data.append(scipy.mean(throughput))
        utilization_y_data.append(scipy.mean(utilization))
        responseTime_y_data.append(responseTime_mean)
        responseTime_ci.append((responseTime_ub - responseTime_lb) / 2)

    f = open(prefix + "_data.tsv", "w")
    print("Users\tThroughput\tResponseTime\tUtilization", file=f)
    for i in range(min_users - 1, max_users):
        print(x_data[i], end="\t", file=f)
        print("{0:.4f}".format(throughput_y_data[i]), end="\t", file=f)
        print("{0:.4f}".format(responseTime_y_data[i]), end="\t", file=f)
        print("{0:.4f}".format(utilization_y_data[i]), file=f)
    f.close()

    plt.title("Throughput v/s Users")
    plt.xlabel("Users")
    plt.ylabel("Throughput (req / s)")
    plt.plot(x_data, throughput_y_data, "c")
    plt.grid(True)
    plt.savefig(prefix + "_Throughput.png")
    plt.close()

    plt.title("Response Time v/s Users")
    plt.xlabel("Users")
    plt.ylabel("Response Time (s)")
    plt.plot(x_data, responseTime_y_data, "m")
    plt.errorbar(x_data,
                 responseTime_y_data,
                 yerr=responseTime_ci,
                 linestyle="None")
    plt.grid(True)
    plt.savefig(prefix + "_ResponseTime.png")
    plt.close()

    plt.title("CPU Utilization v/s Users")
    plt.xlabel("Users")
    plt.ylabel("CPU Utilization")
    plt.plot(x_data, utilization_y_data, "y")
    plt.grid(True)
    plt.savefig(prefix + "_Utilization.png")
    plt.close()