Commit 9fb72504 authored by Azat Khuziyakhmetov's avatar Azat Khuziyakhmetov
Browse files

changes to rcm. wip

parent bac3ed53
......@@ -25,29 +25,27 @@ def rcmattr(func):
class Attributes:
@rcmattr
def cpu_usage(Aggr):
CPUDIFF_HIGH = 1
CPUDIFF_LOW = 4
def cpu_usage_total_max(Aggr):
cpu_usage = 0
cpu_usage_sum = 0
cpu_requested = Aggr.job.requested_cu
for node in Aggr.nodes:
cpu_usage_sum += node.proc.cpu_usage
cpu_ratio = cpu_usage_sum / cpu_requested / 100
cpu_diff = abs(cpu_usage_sum / 100 - cpu_requested)
cpu_usage = cpu_usage_sum / cpu_requested
printd("{} = {} (total cpu_usage) / {} (requested cores) / {}".
format(cpu_ratio, cpu_usage_sum, cpu_requested, 100))
printd("{} = {} (total cpu_usage) / {} (requested cores)".
format(cpu_usage, cpu_usage_sum, cpu_requested))
res = "MED"
if cpu_ratio > 1 and cpu_diff >= CPUDIFF_HIGH:
res = "HIGH"
elif cpu_ratio < 1 and cpu_diff > CPUDIFF_LOW:
res = "NORM"
if cpu_usage < 50 and node.alloc_cu <= 8:
res = "LOW"
break
elif cpu_usage < 80 and node.alloc_cu > 8:
res = "LOW"
break
return res
......@@ -79,17 +77,17 @@ class Attributes:
return res
@rcmattr
def max_proc_ratio(Aggr):
max_proc_ratio = 0
def node_cpu_usage_max(Aggr):
res = "NORM"
for node in Aggr.nodes:
node_proc_ratio = (node.proc.cpu_usage / 100) / node.alloc_cu
max_proc_ratio = max(max_proc_ratio, node_proc_ratio)
node_proc_ratio = node.proc.cpu_usage / node.alloc_cu
res = "MED"
if max_proc_ratio > 1.1:
res = "HIGH"
elif max_proc_ratio < 0.9:
res = "LOW"
if node_proc_ratio < 50 and node.alloc_cu <= 8:
res = "LOW"
break
elif node_proc_ratio < 80 and node.alloc_cu > 8:
res = "LOW"
break
return res
......@@ -139,3 +137,15 @@ class Attributes:
break
return exists
@rcmattr
def job_nodes_amount(Aggr):
nnodes = count(Aggr.nodes)
res = "ERR"
if nnodes == 1:
res = "ONE"
elif nnodes > 1:
res = "MULT"
return res
......@@ -4,6 +4,9 @@
Here are listed the attributes used for making rules.
**Common parameters of the attributes:**
- If there is an error during calculation of the attribute, the return value is `ERR`
## req_walltime
The attribute for the requested walltime.
......@@ -25,4 +28,65 @@ The attribute for the requested walltime.
**Extra**:
![req_walltime](img/req_walltime.svg)
*The `HIGH` values are highlighted*
## node_cpu_usage_max
The attribute for the maximum `cpu_usage`.
The optimal CPU usages depends on the amount of cores requested. When the number of requested cores is not very high, `cpu_usage` should not be near 100%, since the program might be not CPU bound (as soon as we can check it we can make more elaborate attribute). But when the amount of requested CPUs get higher, they should be used more efficiently.
**Values**:
`NORM` - The maximum `cpu_usage` is in the tolerable range
`LOW` - The maximum `cpu_usage` is lower than expected
**Calculation**:
`U` - maximum sum of `cpu_usage` of all processes on a single node, divided by the number of requested cores.
`R` - requested amount of cores on a single node.
`LOW` = `U < 50` & `R <= 8` | `U < 80` & `R > 8`
![node_cpu_usage_max](img/node_cpu_usage_max.svg)
*The `LOW` values are highlighted*
## cpu_usage_total_max
The attribute for the sum of maximum `cpu_usage` per node.
The attribute is very similar to **node_cpu_usage_max** but instead of global maximum `cpu_usage` it compares the total sum of maximum `cpu_usage` of the nodes. The calculations are similar too.
**Values**:
`NORM` - The maximum `cpu_usage` is in the tolerable range
`LOW` - The maximum `cpu_usage` is lower than expected
**Calculation**:
`U` - the global sum of maximum sums of `cpu_usage` of all processes on the nodes, divided by the number of requested cores.
`R` - requested amount of cores on a single node.
`LOW` = `U < 50` & `R <= 8` | `U < 80` & `R > 8`
![cpu_usage_total_max](img/cpu_usage_total_max.svg)
*The `LOW` values are highlighted*
## job_nodes_amount
The attribute for the amount of nodes allocated for the job.
It simply divides the job into 2 categories: running on a single node and running on multiple nodes.
**Values**:
`ONE` - if the number of nodes equals 1
`MULT` - if the number of nodes is greater than 1
This diff is collapsed.
This diff is collapsed.
......@@ -87,10 +87,10 @@ L 124.56 -38.016
L 113.4 -38.016
L 102.24 -38.016
z
" id="m60d88f8f88" style="stroke:#ff0000;stroke-opacity:0.3;"/>
" id="m6728b4a34d" style="stroke:#ff0000;stroke-opacity:0.3;"/>
</defs>
<g clip-path="url(#p35f65eef25)">
<use style="fill:#ff0000;fill-opacity:0.3;stroke:#ff0000;stroke-opacity:0.3;" x="0" xlink:href="#m60d88f8f88" y="345.6"/>
<g clip-path="url(#pe9a1445d12)">
<use style="fill:#ff0000;fill-opacity:0.3;stroke:#ff0000;stroke-opacity:0.3;" x="0" xlink:href="#m6728b4a34d" y="345.6"/>
</g>
</g>
<g id="PolyCollection_2">
......@@ -138,16 +138,16 @@ L 213.84 -131.1552
L 202.68 -124.5024
L 191.52 -117.8496
z
" id="m4bb2360b9b" style="stroke:#ff0000;stroke-opacity:0.3;"/>
" id="me2cb5dd8d0" style="stroke:#ff0000;stroke-opacity:0.3;"/>
</defs>
<g clip-path="url(#p35f65eef25)">
<use style="fill:#ff0000;fill-opacity:0.3;stroke:#ff0000;stroke-opacity:0.3;" x="0" xlink:href="#m4bb2360b9b" y="345.6"/>
<g clip-path="url(#pe9a1445d12)">
<use style="fill:#ff0000;fill-opacity:0.3;stroke:#ff0000;stroke-opacity:0.3;" x="0" xlink:href="#me2cb5dd8d0" y="345.6"/>
</g>
</g>
<g id="matplotlib.axis_1">
<g id="xtick_1">
<g id="line2d_1">
<path clip-path="url(#p35f65eef25)" d="M 57.6 307.584
<path clip-path="url(#pe9a1445d12)" d="M 57.6 307.584
L 57.6 41.472
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
......@@ -155,10 +155,10 @@ L 57.6 41.472
<defs>
<path d="M 0 0
L 0 3.5
" id="m42e669e000" style="stroke:#000000;stroke-width:0.8;"/>
" id="md1a1fc0b21" style="stroke:#000000;stroke-width:0.8;"/>
</defs>
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#m42e669e000" y="307.584"/>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#md1a1fc0b21" y="307.584"/>
</g>
</g>
<g id="text_1">
......@@ -193,13 +193,13 @@ z
</g>
<g id="xtick_2">
<g id="line2d_3">
<path clip-path="url(#p35f65eef25)" d="M 113.4 307.584
<path clip-path="url(#pe9a1445d12)" d="M 113.4 307.584
L 113.4 41.472
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_4">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="113.4" xlink:href="#m42e669e000" y="307.584"/>
<use style="stroke:#000000;stroke-width:0.8;" x="113.4" xlink:href="#md1a1fc0b21" y="307.584"/>
</g>
</g>
<g id="text_2">
......@@ -237,13 +237,13 @@ z
</g>
<g id="xtick_3">
<g id="line2d_5">
<path clip-path="url(#p35f65eef25)" d="M 169.2 307.584
<path clip-path="url(#pe9a1445d12)" d="M 169.2 307.584
L 169.2 41.472
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_6">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="169.2" xlink:href="#m42e669e000" y="307.584"/>
<use style="stroke:#000000;stroke-width:0.8;" x="169.2" xlink:href="#md1a1fc0b21" y="307.584"/>
</g>
</g>
<g id="text_3">
......@@ -271,13 +271,13 @@ z
</g>
<g id="xtick_4">
<g id="line2d_7">
<path clip-path="url(#p35f65eef25)" d="M 225 307.584
<path clip-path="url(#pe9a1445d12)" d="M 225 307.584
L 225 41.472
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_8">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="225" xlink:href="#m42e669e000" y="307.584"/>
<use style="stroke:#000000;stroke-width:0.8;" x="225" xlink:href="#md1a1fc0b21" y="307.584"/>
</g>
</g>
<g id="text_4">
......@@ -290,13 +290,13 @@ L 225 41.472
</g>
<g id="xtick_5">
<g id="line2d_9">
<path clip-path="url(#p35f65eef25)" d="M 280.8 307.584
<path clip-path="url(#pe9a1445d12)" d="M 280.8 307.584
L 280.8 41.472
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_10">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="280.8" xlink:href="#m42e669e000" y="307.584"/>
<use style="stroke:#000000;stroke-width:0.8;" x="280.8" xlink:href="#md1a1fc0b21" y="307.584"/>
</g>
</g>
<g id="text_5">
......@@ -335,13 +335,13 @@ z
</g>
<g id="xtick_6">
<g id="line2d_11">
<path clip-path="url(#p35f65eef25)" d="M 336.6 307.584
<path clip-path="url(#pe9a1445d12)" d="M 336.6 307.584
L 336.6 41.472
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_12">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="336.6" xlink:href="#m42e669e000" y="307.584"/>
<use style="stroke:#000000;stroke-width:0.8;" x="336.6" xlink:href="#md1a1fc0b21" y="307.584"/>
</g>
</g>
<g id="text_6">
......@@ -354,13 +354,13 @@ L 336.6 41.472
</g>
<g id="xtick_7">
<g id="line2d_13">
<path clip-path="url(#p35f65eef25)" d="M 392.4 307.584
<path clip-path="url(#pe9a1445d12)" d="M 392.4 307.584
L 392.4 41.472
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_14">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="392.4" xlink:href="#m42e669e000" y="307.584"/>
<use style="stroke:#000000;stroke-width:0.8;" x="392.4" xlink:href="#md1a1fc0b21" y="307.584"/>
</g>
</g>
<g id="text_7">
......@@ -406,7 +406,7 @@ z
</g>
</g>
<g id="text_8">
<!-- Requested walltime (hours) -->
<!-- Requested walltime (R, hours) -->
<defs>
<path d="M 44.390625 34.1875
Q 47.5625 33.109375 50.5625 29.59375
......@@ -689,6 +689,14 @@ Q 8.59375 42.28125 12.203125 53.3125
Q 15.828125 64.359375 23.1875 75.875
z
" id="DejaVuSans-40"/>
<path d="M 11.71875 12.40625
L 22.015625 12.40625
L 22.015625 4
L 14.015625 -11.625
L 7.71875 -11.625
L 11.71875 4
z
" id="DejaVuSans-44"/>
<path d="M 54.890625 33.015625
L 54.890625 0
L 45.90625 0
......@@ -759,7 +767,7 @@ Q 14.5 64.65625 8.015625 75.875
z
" id="DejaVuSans-41"/>
</defs>
<g transform="translate(167.013125 335.860562)scale(0.1 -0.1)">
<g transform="translate(160.360781 335.860562)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-82"/>
<use x="69.419922" xlink:href="#DejaVuSans-101"/>
<use x="130.943359" xlink:href="#DejaVuSans-113"/>
......@@ -780,19 +788,22 @@ z
<use x="930.455078" xlink:href="#DejaVuSans-101"/>
<use x="991.978516" xlink:href="#DejaVuSans-32"/>
<use x="1023.765625" xlink:href="#DejaVuSans-40"/>
<use x="1062.779297" xlink:href="#DejaVuSans-104"/>
<use x="1126.158203" xlink:href="#DejaVuSans-111"/>
<use x="1187.339844" xlink:href="#DejaVuSans-117"/>
<use x="1250.71875" xlink:href="#DejaVuSans-114"/>
<use x="1291.832031" xlink:href="#DejaVuSans-115"/>
<use x="1343.931641" xlink:href="#DejaVuSans-41"/>
<use x="1062.779297" xlink:href="#DejaVuSans-82"/>
<use x="1132.261719" xlink:href="#DejaVuSans-44"/>
<use x="1164.048828" xlink:href="#DejaVuSans-32"/>
<use x="1195.835938" xlink:href="#DejaVuSans-104"/>
<use x="1259.214844" xlink:href="#DejaVuSans-111"/>
<use x="1320.396484" xlink:href="#DejaVuSans-117"/>
<use x="1383.775391" xlink:href="#DejaVuSans-114"/>
<use x="1424.888672" xlink:href="#DejaVuSans-115"/>
<use x="1476.988281" xlink:href="#DejaVuSans-41"/>
</g>
</g>
</g>
<g id="matplotlib.axis_2">
<g id="ytick_1">
<g id="line2d_15">
<path clip-path="url(#p35f65eef25)" d="M 57.6 307.584
<path clip-path="url(#pe9a1445d12)" d="M 57.6 307.584
L 414.72 307.584
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
......@@ -800,10 +811,10 @@ L 414.72 307.584
<defs>
<path d="M 0 0
L -3.5 0
" id="maf0c07a6fe" style="stroke:#000000;stroke-width:0.8;"/>
" id="m09c7e0e4db" style="stroke:#000000;stroke-width:0.8;"/>
</defs>
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#maf0c07a6fe" y="307.584"/>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#m09c7e0e4db" y="307.584"/>
</g>
</g>
<g id="text_9">
......@@ -825,13 +836,13 @@ z
</g>
<g id="ytick_2">
<g id="line2d_17">
<path clip-path="url(#p35f65eef25)" d="M 57.6 274.32
<path clip-path="url(#pe9a1445d12)" d="M 57.6 274.32
L 414.72 274.32
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_18">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#maf0c07a6fe" y="274.32"/>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#m09c7e0e4db" y="274.32"/>
</g>
</g>
<g id="text_10">
......@@ -845,13 +856,13 @@ L 414.72 274.32
</g>
<g id="ytick_3">
<g id="line2d_19">
<path clip-path="url(#p35f65eef25)" d="M 57.6 241.056
<path clip-path="url(#pe9a1445d12)" d="M 57.6 241.056
L 414.72 241.056
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_20">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#maf0c07a6fe" y="241.056"/>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#m09c7e0e4db" y="241.056"/>
</g>
</g>
<g id="text_11">
......@@ -865,13 +876,13 @@ L 414.72 241.056
</g>
<g id="ytick_4">
<g id="line2d_21">
<path clip-path="url(#p35f65eef25)" d="M 57.6 207.792
<path clip-path="url(#pe9a1445d12)" d="M 57.6 207.792
L 414.72 207.792
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_22">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#maf0c07a6fe" y="207.792"/>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#m09c7e0e4db" y="207.792"/>
</g>
</g>
<g id="text_12">
......@@ -896,13 +907,13 @@ z
</g>
<g id="ytick_5">
<g id="line2d_23">
<path clip-path="url(#p35f65eef25)" d="M 57.6 174.528
<path clip-path="url(#pe9a1445d12)" d="M 57.6 174.528
L 414.72 174.528
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_24">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#maf0c07a6fe" y="174.528"/>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#m09c7e0e4db" y="174.528"/>
</g>
</g>
<g id="text_13">
......@@ -917,13 +928,13 @@ L 414.72 174.528
</g>
<g id="ytick_6">
<g id="line2d_25">
<path clip-path="url(#p35f65eef25)" d="M 57.6 141.264
<path clip-path="url(#pe9a1445d12)" d="M 57.6 141.264
L 414.72 141.264
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_26">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#maf0c07a6fe" y="141.264"/>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#m09c7e0e4db" y="141.264"/>
</g>
</g>
<g id="text_14">
......@@ -938,13 +949,13 @@ L 414.72 141.264
</g>
<g id="ytick_7">
<g id="line2d_27">
<path clip-path="url(#p35f65eef25)" d="M 57.6 108
<path clip-path="url(#pe9a1445d12)" d="M 57.6 108
L 414.72 108
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_28">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#maf0c07a6fe" y="108"/>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#m09c7e0e4db" y="108"/>
</g>
</g>
<g id="text_15">
......@@ -959,13 +970,13 @@ L 414.72 108
</g>
<g id="ytick_8">
<g id="line2d_29">
<path clip-path="url(#p35f65eef25)" d="M 57.6 74.736
<path clip-path="url(#pe9a1445d12)" d="M 57.6 74.736
L 414.72 74.736
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_30">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#maf0c07a6fe" y="74.736"/>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#m09c7e0e4db" y="74.736"/>
</g>
</g>
<g id="text_16">
......@@ -980,13 +991,13 @@ L 414.72 74.736
</g>
<g id="ytick_9">
<g id="line2d_31">
<path clip-path="url(#p35f65eef25)" d="M 57.6 41.472
<path clip-path="url(#pe9a1445d12)" d="M 57.6 41.472
L 414.72 41.472
" style="fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;"/>
</g>
<g id="line2d_32">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#maf0c07a6fe" y="41.472"/>
<use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#m09c7e0e4db" y="41.472"/>
</g>
</g>
<g id="text_17">
......@@ -1000,7 +1011,7 @@ L 414.72 41.472
</g>
</g>
<g id="text_18">
<!-- Used walltime (hours) -->
<!-- Used walltime (U, hours) -->
<defs>
<path d="M 8.6875 72.90625
L 18.609375 72.90625
......@@ -1019,7 +1030,7 @@ Q 8.6875 13.140625 8.6875 27.390625
z
" id="DejaVuSans-85"/>
</defs>
<g transform="translate(22.254687 229.406906)rotate(-90)scale(0.1 -0.1)">
<g transform="translate(22.254687 236.244406)rotate(-90)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-85"/>
<use x="73.193359" xlink:href="#DejaVuSans-115"/>
<use x="125.292969" xlink:href="#DejaVuSans-101"/>
......@@ -1035,17 +1046,20 @@ z
<use x="645.117188" xlink:href="#DejaVuSans-101"/>
<use x="706.640625" xlink:href="#DejaVuSans-32"/>
<use x="738.427734" xlink:href="#DejaVuSans-40"/>
<use x="777.441406" xlink:href="#DejaVuSans-104"/>
<use x="840.820312" xlink:href="#DejaVuSans-111"/>
<use x="902.001953" xlink:href="#DejaVuSans-117"/>
<use x="965.380859" xlink:href="#DejaVuSans-114"/>
<use x="1006.494141" xlink:href="#DejaVuSans-115"/>
<use x="1058.59375" xlink:href="#DejaVuSans-41"/>
<use x="777.441406" xlink:href="#DejaVuSans-85"/>
<use x="850.634766" xlink:href="#DejaVuSans-44"/>
<use x="882.421875" xlink:href="#DejaVuSans-32"/>
<use x="914.208984" xlink:href="#DejaVuSans-104"/>
<use x="977.587891" xlink:href="#DejaVuSans-111"/>
<use x="1038.769531" xlink:href="#DejaVuSans-117"/>
<use x="1102.148438" xlink:href="#DejaVuSans-114"/>
<use x="1143.261719" xlink:href="#DejaVuSans-115"/>
<use x="1195.361328" xlink:href="#DejaVuSans-41"/>
</g>
</g>
</g>
<g id="line2d_33">
<path clip-path="url(#p35f65eef25)" d="M 57.6 307.584
<path clip-path="url(#pe9a1445d12)" d="M 57.6 307.584
L 68.76 294.2784
L 79.92 280.9728
L 91.08 267.6672
......@@ -1073,12 +1087,12 @@ L 316.42316 -1
" style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
</g>
<g id="line2d_34">
<path clip-path="url(#p35f65eef25)" d="M 102.24 307.584
<path clip-path="url(#pe9a1445d12)" d="M 102.24 307.584
L 102.24 41.472
" style="fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;"/>
</g>
<g id="line2d_35">
<path clip-path="url(#p35f65eef25)" d="M 57.6 307.584
<path clip-path="url(#pe9a1445d12)" d="M 57.6 307.584
L 68.76 300.9312
L 79.92 294.2784
L 91.08 287.6256
......@@ -1113,7 +1127,7 @@ L 403.56 101.3472
" style="fill:none;stroke:#2ca02c;stroke-linecap:square;stroke-width:1.5;"/>
</g>
<g id="line2d_36">
<path clip-path="url(#p35f65eef25)" d="M 91.835541 346.6
<path clip-path="url(#pe9a1445d12)" d="M 91.835541 346.6
L 102.24 334.1952
L 113.4 320.8896
L 124.56 307.584
......@@ -1319,7 +1333,7 @@ z
</g>
</g>
<defs>
<clipPath id="p35f65eef25">
<clipPath id="pe9a1445d12">
<rect height="266.112" width="357.12" x="57.6" y="41.472"/>
</clipPath>
</defs>
......
# The input of the recommendations system
The recommendation system is a python module and as an input it gets a python object.
The structure of the required python object is described here.
```python
class Aggregator:
job = JobData()
nodes = [NodeData()]
```
```python
class JobData:
id = None
user_name = None
used_queue = None
submit_time = None
start_time = None
end_time = None
run_time = None
requested_time = None
requested_cu = None
num_nodes = None
alloc_cu = [AllocCUData()]
class AllocCUData:
node_id = None
cu_count = None
```
```python
class NodeData:
name = None
cpu_model = None
sockets = None
cores_per_socket = None
virt_thr_core = None
phys_thr_core = None
main_mem = None
seq_cpu_usage = None
seq_load_avg = None
seq_load_max = None
proc = None
alloc_cu = None
def __init__(self):
self.proc = ProcData()
self.seq_load_avg = SeqVals()
self.seq_load_max = SeqVals()
self.seq_cpu_usage = SeqVals()