From ddda3930959800c211d90f149808821f2a56b59e Mon Sep 17 00:00:00 2001 From: Yohan Boujon Date: Thu, 30 Jan 2025 17:58:33 +0100 Subject: [PATCH] [NOT WORKING] Start of "Probability of rejection" for performance measures. --- perf-om2m/img/network.png | Bin 0 -> 36421 bytes perf-om2m/simulation.py | 83 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 perf-om2m/img/network.png create mode 100755 perf-om2m/simulation.py diff --git a/perf-om2m/img/network.png b/perf-om2m/img/network.png new file mode 100644 index 0000000000000000000000000000000000000000..9e22b4d697b0370e44532cf422fa289cb362263a GIT binary patch literal 36421 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 literal 0 HcmV?d00001 diff --git a/perf-om2m/simulation.py b/perf-om2m/simulation.py new file mode 100755 index 0000000..32a2156 --- /dev/null +++ b/perf-om2m/simulation.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 +import argparse +import math +import numpy as np + +''' +Rappel des notations: +H -> HTTP Server +R -> Resource +D -> Database +T -> Thread +--- +LAMBDA -> Entrée +MU -> Sortie + +''' + +def rejection_probability(): + # Counter when T is empty + kappa = 0 + # Initially, N thread is given + X_T = N + # Number of message received + msg_recu = 0 + proba_sortie = 0 + + for _ in range(STEPS): + entree_proba = np.random.exponential(1/LAMBDA_H) + sortie_proba = np.random.exponential(1/MU_H) + + # If an arrival occurs first + if entree_proba < sortie_proba: + msg_recu += 1 + if X_T > 0: + X_T -= 1 + else: + kappa += 1 + else: + proba_sortie += 1 + if X_T < N: + X_T += 1 + + print(msg_recu) + print(kappa) + print(proba_sortie) + return kappa/msg_recu + +def create_network(): + STATE_VECTOR[0] = N + +def simulate_network(): + print(f"Simating for {STEPS} steps:") + for _ in range(STEPS): + msg_received = np.random.exponential(1/LAMBDA_H) + msg_send = np.random.exponential(1/MU_H) + = np.random.exponential(1/MU_R) + sortie_proba = np.random.exponential(1/MU_D) + + +# General variables +STATE_VECTOR = [0,0,0,0] +STEPS = 100000 + +LAMBDA_H = 3 +MU_H = 1 +MU_R = 1 +MU_D = 1 +# Tokens (Processors) for Resources +C = 1 +# Available Token (Thread) for the HTTP Server +N = 1 + +def parse(): + # Parsing arguments + parser = argparse.ArgumentParser(description="A simple script to parse the -n argument with a number.") + parser.add_argument('-n', '--number', type=int, required=True, help='The size of the queue') + args = parser.parse_args() + # Access the number + return args.number + +if __name__ == "__main__": + create_network() + print(f"Probability of rejection: {rejection_probability():.4f}") \ No newline at end of file