# Dynamic Scaling in docker [github](https://github.com/wilson20010327/ScaleableResourceForDocker) * Every requests will send to mn1 server and there are 20% probability send to mn2 server by mn1 after receive the request, each request will create a cpu instence task on target server (Calculate prime number from 1~N) * Rt in reward function will be calculated at the last 5 second in the period(30 second), this request will send to mn1 and mn2 servers respectively per second, which we can calculate the response time, and their ports are not same as the previous ports(use in create cpu instence task), Rt will be the average of these five response time, but there is an exception, when there is a timeout in this five collection, Rt will be set as max rt (in our setting 50 ms) * $c_{utilization}$ in reward function will be calculated at the last 5 second in the period(30 second), we get the container's metric by docker stats command, $c_{utilization}$ will be the average of these five cpu usage which are contained in container's metric. * Reward function To calculate the reward I use moving average (4) to smooth the unstable $c_{utilization}$ and Rt \begin{align*} Rt &= \begin{cases} RtList_{lastfourmean} & \text{if } RtList_{size} \geq {4} \\ Rt & \text{otherwise} \end{cases}, \\ c_{utilization} &= \begin{cases} c_{utilization}List_{lastfourmean} & \text{if } c_{utilization}List_{size} \geq {4} \\ c_{utilization} & \text{otherwise} \end{cases}, \\ c_{delay} &= \begin{cases} 1 & \text{if } Rt \geq {t_{max}} \\ 0 & \text{otherwise} \end{cases}, \\ c_{utilization} &= \begin{cases} 1 & \text{if } {cpu_{utilization}} > 0.9 \\ 0 & \text{otherwise} \end{cases}, \\ c_{res} &= \begin{cases} 1 & \text{if } {cpu_{utilization}} < 0.4 \\ 0 & \text{otherwise} \end{cases}, \\ reward_{perf} &= {w_{perf}} \cdot (c_{\text{delay}} + c_{\text{utilization}}), \\ reward_{res} &= {w_{res}} \cdot c_{\text{res}}, \\ {reward} &= -({reward_{perf}} + {reward_{res}}). \end{align*} ```python c_delay=0 if(Rt>=self.t_max): c_delay=1 # cpu_utilization cost if relative_cpu_utilization >0.9: c_utilization = 1 else: c_utilization = 0 # calculate the reward c_perf = c_delay+ c_utilization # resource penalty c_res=c_utilization<0.4 reward_perf = self.w_perf * c_perf reward_res = self.w_res * c_res reward = -(reward_perf + reward_res) ``` ## MPDQN Train * 8 epochs * 3600 s/per epoch * N=20000 * Request rate According to [ paper](https://github.com/effereds/rlad-core-simulator), take the request list as name "request" from it and take the number in this list every 30 second.ex: at time 0 I take the request[0], at time 30 I take request[30], I ignore the number bewteen them. ![Figure_1](https://hackmd.io/_uploads/Hkgcf_6SC.png) * tau_actor: 0.1 * tau_actor_param: 0.01 * learning_rate_actor: 0.01 * learning_rate_actor_param: 0.001 * gamma: 0.9 * epsilon_steps: 840 * epsilon_final: 0.01 * replay_memory_size: 960 * batch_size: 16 * loss_function: MSE loss * layers: [64] * w_perf: 0.5 * w_res: 0.5 * action space: Hybrid 3 (discrete(for replica), continuous (for cpus)) ### Train Plot ``` First_level_MNCSE Avg_Cpus: 0.8453645833333202 First_level_MNCSE Avg_Replicas: 2.1666666666666665 First_level_MNCSE Median: 18.75 First_level_MNCSE Tmax_violation: 0.446875 Second_level_MNCSE Avg_Cpus: 0.8432395833333205 Second_level_MNCSE Avg_Replicas: 2.221875 Second_level_MNCSE Median: 1.5 Second_level_MNCSE Tmax_violation: 0.0 ``` MN1 | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/BkwJJ_aS0.png) | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/H1wky_pBC.png) | | -------- | -------- | | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/B1PJJ_aHR.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/SkOJ1uTS0.png) | | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/B1vy1dpSR.png) | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/B1uJk_aH0.png) | MN2 | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/SJCMyOpB0.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/BkCMy_THR.png) | | -------- | -------- | | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/SJ0G1O6B0.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/Sk0GJuaHC.png) | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/H1CM1dTBC.png)|![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/B1RzkdpB0.png)| ## MPDQN Evaluation * 1 epochs * 3600 s/per epoch * Request rate Using same request rate as train process * Parameters same as training ### Evaluation Plot ``` First_level_MNCSE Avg_Cpus: 0.8016528925619817 First_level_MNCSE Avg_Replicas: 1.9917355371900827 First_level_MNCSE Median: 13.5 First_level_MNCSE Tmax_violation: 0.2892561983471074 Second_level_MNCSE Avg_Cpus: 0.8016528925619817 Second_level_MNCSE Avg_Replicas: 2.834710743801653 Second_level_MNCSE Median: 0.5 Second_level_MNCSE Tmax_violation: 0.0 ``` MN1 | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/SykO1OTrR.png)| ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/SyJuyOTHA.png) | | -------- | -------- | | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/rJyOk_TH0.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/Skyd1uar0.png) | |![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/BJ1_y_pSA.png)|![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/Syyuk_6rC.png)| MN2 | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/H1kdJuprR.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/ryx_yOTrR.png) | | -------- | -------- | |![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/BJx_yu6r0.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/Hkeyuyd6r0.png) | |![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/Syxkdk_aS0.png)|![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/SJgJdkOpH0.png)| ## DQN Train * 8 epochs * 3600 s/per epoch * N=20000 * Request rate According to [ paper](https://github.com/effereds/rlad-core-simulator), take the request list as name "request" from it and take the number in this list every 30 second.ex: at time 0 I take the request[0], at time 30 I take request[30], I ignore the number bewteen them. ![Figure_1](https://hackmd.io/_uploads/Hkgcf_6SC.png) * tau: 0.1 * learning_rate: 0.01 * gamma: 0.9 * epsilon_steps: 840 * epsilon_final: 0.01 * replay_memory_size: 960 * batch_size: 16 * loss_function: MSE loss * layers: [128] * w_perf: 0.5 * w_res: 0.5 * action space: discrete 5 ([None, +0.1 ,-0.1 , +1, -1 ]) ### Train Plot MN1 | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/SkzJXTML0.png) | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/SJbJXTzIR.png) | | -------- | -------- | | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/H1ZkXaGLC.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/H1bJXTGU0.png) | |![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/SJ-JmpzI0.png)|![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/S1GkXpzUR.png)| MN2 | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/BJ7m76fUR.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/rkXXmpMLA.png) | | -------- | -------- | | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/SymXQ6M8A.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/S1X7m6G8C.png) | |![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/rJmXmpGUA.png)|![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/H1EX7TfIR.png)| ## DQN Evaluation * 1 epochs * 3600 s/per epoch * Request rate Using same request rate as train process * Parameters same as training ### Evaluation Plot ``` First_level_MNCSE Avg_Cpus: 1.0 First_level_MNCSE Avg_Replicas: 1.0 First_level_MNCSE Median: 34.0 First_level_MNCSE Tmax_violation: 0.7355371900826446 Second_level_MNCSE Avg_Cpus: 0.708264462809919 Second_level_MNCSE Avg_Replicas: 1.0 Second_level_MNCSE Median: 2.0 Second_level_MNCSE Tmax_violation: 0.0 ``` MN1 | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/BkyaDTfLA.png) | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/SkJpP6GIA.png) | | -------- | -------- | | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/r1kTD6ML0.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/Bk1pP6GUR.png) | | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/ryJpPaGUC.png) |![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/SyJpD6GUR.png) | MN2 | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/Sy-xu6z8A.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/ryZed6G8R.png) | | -------- | -------- | | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/HkWeO6M8R.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/BJZxd6GUC.png) | |![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/HyWeOTfIR.png) | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/BkZgu6f8A.png) | ## DQN-9 Train * 8 epochs * 3600 s/per epoch * N=20000 * Request rate According to [ paper](https://github.com/effereds/rlad-core-simulator), take the request list as name "request" from it and take the number in this list every 30 second.ex: at time 0 I take the request[0], at time 30 I take request[30], I ignore the number bewteen them. ![Figure_1](https://hackmd.io/_uploads/Hkgcf_6SC.png) * tau: 0.1 * learning_rate: 0.01 * gamma: 0.9 * epsilon_steps: 840 * epsilon_final: 0.01 * replay_memory_size: 960 * batch_size: 16 * loss_function: MSE loss * layers: [128] * w_perf: 0.5 * w_res: 0.5 * action space: discrete 9 ([-1,0.1],[-1,0],[-1,-0.1],[0,0.1],[0,0],[0,-0.1],[1,0.1],[1,0],[1,-0.1]) ### Train Plot MN1 |![First_level_MNCSE_cost](https://hackmd.io/_uploads/HyT2AhQv0.png) | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/HyT202QPA.png)| | -------- | -------- | | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/By6nA2mvC.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/rkpnR2mvR.png) | | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/ry6hRnmwC.png) | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/SJa30hQDC.png) | MN2 | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/HJDPJTXwC.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/S1DvyaXPC.png)| | -------- | -------- | | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/B1wP16mwA.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/SkPDypQv0.png) | | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/r1PvypmwA.png) | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/HyDPyT7vC.png) | ## DQN-9 Evaluation * 1 epochs * 3600 s/per epoch * Request rate Using same request rate as train process * Parameters same as training ### Evaluation Plot ``` First_level_MNCSE Avg_Cpus: 1.0 First_level_MNCSE Avg_Replicas: 2.9338842975206614 First_level_MNCSE Median: 10.0 First_level_MNCSE Tmax_violation: 0.12396694214876033 Second_level_MNCSE Avg_Cpus: 0.7173553719008279 Second_level_MNCSE Avg_Replicas: 1.28099173553719 Second_level_MNCSE Median: 1.5 Second_level_MNCSE Tmax_violation: 0.0 ``` MN1 | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/r1zJZa7PC.png) | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/ByG1ba7wA.png)| | -------- | -------- | | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/Sy7kWaXD0.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/BJGk-a7wR.png) | | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/Hkzk-aXv0.png) | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/H1G1bp7DC.png) | MN2 | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/S1IU-pmv0.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/HJIIZTmDR.png) | | -------- | -------- | | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/SyLIZ6mv0.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/rJI8bamDR.png) | | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/H1w8Z67PR.png) | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/rJvIWa7wA.png) | ## Graph compare ### N=20000 #### MN1 | | MPDQN | DQN | DQN-9 | | ------------ | ----- | ---- | ----- | | Avg_Cpus | 0.8016528925619817 | 1.0 | 1.0 | | Avg_Replicas | 1.9917355371900827 | 1.0 | 2.9338842975206614 | | Median | 13.5 | 34.0 | 10.0 | | Tmax_violation | 0.2892561983471074 | 0.7355371900826446| 0.12396694214876033 | | | MPDQN | DQN | DQN-9 | | --------------- | ------------------------------------------------------------------------------ | --- | ----- | | reward | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/H1B-r6XwA.png) | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/Sk4_ramPR.png) | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/Byl58pmDR.png) | | Cpus | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/rJrWBT7P0.png) | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/SyNOrTmPA.png) | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/ryl5Up7PC.png) | | CPU utilization | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/HyrWHT7vR.png) | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/SkEurTXPR.png) | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/BkecL67DC.png) | | Replicas | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/SkSZra7wR.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/ryV_H6XD0.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/B1x5UT7P0.png) | | Resource | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/B1HZra7w0.png) | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/BkEuBa7wR.png) | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/ryx5ITmvR.png) | | Response time | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/rkBWHTmDR.png) | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/Sk4drp7DA.png) | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/HkgcLaQDA.png)| #### MN2 | | MPDQN | DQN | DQN-9 | | ------------ | ----- | ---- | ----- | | Avg_Cpus | 0.8016528925619817 | 0.708264462809919 | 0.7173553719008279 | | Avg_Replicas | 2.834710743801653 | 1.0 | 1.28099173553719 | | Median | 0.5 | 2.0 | 1.5 | | Tmax_violation | 0.0 | 0.0 | 0.0 | | | MPDQN | DQN | DQN-9 | | -------- | -------- | -------- | --- | | reward | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/rJUxIbZ_0.png) | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/rJ6EIWZOC.png) | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/BkMywWZOR.png) | | Cpus | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/ry8eUWbuA.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/rkTVIWWOR.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/BkfJwbWOR.png) | | CPU utilization | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/SJ8lIWbdC.png) | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/r1aEU-ZuC.png) | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/S1M1wbWOC.png) | | Replicas | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/HyIlIbbdR.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/SypNLb-O0.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/H1zkvbWuC.png) | | Resource | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/ryUe8ZbdA.png) | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/ryT48ZZOR.png) | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/SkGkv-Z_A.png) | | Response time | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/S1l8e8bbdC.png) | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/HJa48W-OR.png) | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/B1zkD-ZdR.png) | ### N=4000 #### MN1 | | MPDQN | DQN | DQN-9 | | ------------ | ----- | ---- | ----- | | Avg_Cpus | 0.8016528925619817 | 0.9983471074380165 | 1.0 | | Avg_Replicas | 2.9834710743801653 | 1.0 | 2.975206611570248 | | Median | 10.0 | 25.0 | 10.0 | | Tmax_violation | 0.05785123966942149 | 0.628099173553719 | 0.09917355371900827 | | | MPDQN | DQN | DQN-9 | | -------- | -------- | -------- | --- | | reward | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/ryXZdZb_A.png) | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/Bk_UObZdA.png) | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/Hyo6O--uA.png) | | Cpus | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/S1embuWW_C.png) | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/B1dL_Z-_R.png) | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/BynpuZbuA.png) | | CPU utilization | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/rk7ZuZZ_C.png) | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/By_8O-bOC.png) | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/SJoTdbZuC.png) | | Replicas | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/By7-_ZZOC.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/SyOIO-ZOR.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/rJop_bWOA.png) | | Resource | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/ryQWuW-uC.png) | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/rJ_L_Wb_0.png) | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/Syi6dWb_A.png) | | Response time | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/H1X-uWbOR.png) | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/H1_UdZbuC.png) | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/SJn6d--uA.png) | #### MN2 | | MPDQN | DQN | DQN-9 | | ------------ | ----- | ---- | ----- | | Avg_Cpus | 0.8016528925619817 | 0.9495867768595043 | 0.7338842975206628 | | Avg_Replicas | 2.0661157024793386 | 1.4049586776859504 | 1.0 | | Median | 5.5 | 0.5 | 6.5 | | Tmax_violation | 0.0 | 0.0 | 0.0 | | | MPDQN | DQN | DQN-9 | | -------- | -------- | -------- | --- | | reward | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/HyxNuZ-u0.png) | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/rkec_WbuA.png) | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/Sy87KWbuA.png) | | Cpus | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/BJgN_-buA.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/Skeq_Z-u0.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/ByUQYZZ_R.png) | | CPU utilization | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/SygEdWbOA.png) | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/B1gc_-Wd0.png) | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/BkU7tb-uA.png) | | Replicas | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/Hyl4ObZ_A.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/HkxxcuWWOC.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/rJ8XKWZdC.png) | | Resource | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/Byg4_W-uA.png) | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/rkl5dW-uC.png) | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/HyIXt-bO0.png) | | Response time | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/Hke4O-WOA.png) | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/rJxq_WWO0.png) | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/rk8mKZZOR.png) | ### N=2000 #### MN1 | | MPDQN | DQN | DQN-9 | | ------------ | ----- | ---- | ----- | | Avg_Cpus | 0.8016528925619817 | 1.0 | 1.0 | | Avg_Replicas | 1.9256198347107438 | 1.0 | 2.958677685950413 | | Median | 10.0 | 24.5 | 10.0 | | Tmax_violation | 0.17355371900826447 | 0.5950413223140496 | 0.10743801652892562 | | | MPDQN | DQN | DQN-9 | | -------- | -------- | -------- | --- | | reward | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/rJzvF--_C.png) | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/H1A5tbWd0.png) | ![First_level_MNCSE_cost](https://hackmd.io/_uploads/BkYkq-WdC.png) | | Cpus | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/SJzwYZ-_0.png) | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/BJRcFWWuR.png) | ![First_level_MNCSE_Cpus](https://hackmd.io/_uploads/ryYJcZWu0.png) | | CPU utilization | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/HJMwt--dA.png) | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/BkAcY-Zu0.png) | ![First_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/SkKycbb_R.png) | | Replicas | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/S1fDtWWO0.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/rkAqKb-dA.png) | ![First_level_MNCSE_Replicas](https://hackmd.io/_uploads/ByFkcZZuC.png) | | Resource | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/SkMvtb-OA.png) | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/SkkiKWbuC.png) | ![First_level_MNCSE_Resource_use](https://hackmd.io/_uploads/BkFkcbZ_A.png) | | Response time | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/ryezPYW-_R.png) | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/BJC5KZbu0.png) | ![First_level_MNCSE_Response_time](https://hackmd.io/_uploads/BJFJ9bWuA.png) | #### MN2 | | MPDQN | DQN | DQN-9 | | ------------ | ----- | ---- | ----- | | Avg_Cpus | 0.8016528925619817 | 0.9049586776859507 | 0.7876033057851248 | | Avg_Replicas | 2.9834710743801653 | 1.0 | 1.0 | | Median | 5.5 | 0.5 | 6.0 | | Tmax_violation | 0.0 | 0.0 | 0.0 | | | MPDQN | DQN | DQN-9 | | -------- | -------- | -------- | --- | | reward | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/ByAuFbZOC.png) | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/SyXpKbWd0.png) | ![Second_level_MNCSE_cost](https://hackmd.io/_uploads/ryzVcZ-u0.png) | | Cpus | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/SkAOtW-u0.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/Hymat-W_R.png) | ![Second_level_MNCSE_Cpus](https://hackmd.io/_uploads/B1G45-Z_R.png) | | CPU utilization | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/rkC_K-bOR.png) | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/HymTFWWOC.png) | ![Second_level_MNCSE_Cpu_utilization](https://hackmd.io/_uploads/H1zV9ZWuA.png) | | Replicas | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/r1R_t-ZdC.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/Hy7aKZbuR.png) | ![Second_level_MNCSE_Replicas](https://hackmd.io/_uploads/r1MN9W-OA.png) | | Resource | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/BJ0dY-bdR.png) | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/H17TFZZdC.png) | ![Second_level_MNCSE_Resource_use](https://hackmd.io/_uploads/BkME5ZbdR.png) | | Response time | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/SJR_tZZuA.png) | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/HJXpYZ-_C.png) | ![Second_level_MNCSE_Response_time](https://hackmd.io/_uploads/HyfNcZ-u0.png) |