File: inc22.1.3

package info (click to toggle)
slurm-wlm 22.05.8-4%2Bdeb12u3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 48,492 kB
  • sloc: ansic: 475,246; exp: 69,020; sh: 8,862; javascript: 6,528; python: 6,444; makefile: 4,185; perl: 4,069; pascal: 131
file content (165 lines) | stat: -rw-r--r-- 11,218 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Use sreport to get cluster usage for the first 3 days from
#          configuration set up in test22.1.
############################################################################
# Copyright (C) 2008 Lawrence Livermore National Security.
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
# Written by Danny Auble <da@llnl.gov>
# CODE-OCEC-09-009. All rights reserved.
#
# Portions Copyright (C) 2012-2017 SchedMD LLC
# Written by Nathan Yee <nyee32@schedmd.com>
#
# This file is part of Slurm, a resource management program.
# For details, see <https://slurm.schedmd.com/>.
# Please also read the included file: DISCLAIMER.
#
# Slurm is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# Slurm is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with Slurm; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
############################################################################

proc inc22_1_3 { } {
	global sreport node0_down_start node0_down_end node0_cpus
	global node1_cpus cluster1 cluster2 my_pid accounts users cluster_cpus
	global job0_start job1_end job1_cpus job1_alloc job2_start
	global job2_end job2_cpus job2_alloc job2_elig job3_start
	global job3_end job3_cpus job3_alloc job3_elig acct1_alloc acct2_alloc
	global acct3_alloc total_alloc wckey1_alloc user1_wckey1_alloc
	global user2_wckey1_alloc user1 user2 account1 account2 account3
	global sql_rem_clus1 wckey1 wc_key_track
	global job4_cpus job4_elig

	# Since there are 2 test clusters we will just use one
	set cluster $cluster1
	set sql_rm $sql_rem_clus1

	# Mon Dec 31 23:00:00 2007
	set start_time "Mon Dec 31 23:00:00 2007"
	set period_start [exec date +%s --date=$start_time]

	# Tue Jan 3 00:00:00 2008
	set end_time "Tue Jan 3 00:00:00 2008"
	set period_end [exec date +%s --date=$end_time]

	set start_str [timestamp -format %Y-%m-%dT%X -seconds $period_start]
	set end_str [timestamp -format %Y-%m-%dT%X -seconds $period_end]

	set reported [expr ($period_end - $period_start) * $cluster_cpus]
	set down [expr ($node0_down_end - $node0_down_start) * $node0_cpus]
	set alloc_sec [expr ($job1_end-$job0_start) * $job1_cpus]
	set alloc_sec [expr $alloc_sec + (($job2_end-$job2_start) * $job2_cpus)]
	set alloc_sec [expr $alloc_sec + (($job3_end-$job3_start) * $job3_cpus)]
	set wckey_alloc_sec1 [expr $job1_alloc + $job3_alloc]
	set wckey_alloc_sec2 $job2_alloc
	set resv [expr ($job2_start - $job2_elig) * $job2_cpus]
	set resv [expr $resv + (($job3_start - $job3_elig) * $job3_cpus)]
	set resv [expr $resv + (($period_end - $job4_elig) * $job4_cpus)]
	# I didn't have time to do the correct math here so I am just putting in 16800 which should be the correct value of over commit
	set over 16800
	set resv [expr $resv - $over]
	set idle [expr $reported - ($down + $alloc_sec + $resv)]
	# Do the same logic inside the plugin to figure out the correct
	# idle time and resv time
	if {$idle < 0 } {
		set resv [expr $resv + $idle]
		set idle 0
		if {$resv < 0} {
			set resv 0
		}
	}
	set down [format "%d\\\(%.2f%%\\\)" $down [expr double($down * 100)/$reported]]
	set alloc [format "%d\\\(%.2f%%\\\)" $alloc_sec [expr double($alloc_sec * 100)/$reported]]
	set resv [format "%d\\\(%.2f%%\\\)" $resv  [expr double($resv * 100)/$reported]]
	set idle [format "%d\\\(%.2f%%\\\)" $idle [expr double($idle * 100)/$reported]]
	set over [format "%d\\\(%.2f%%\\\)" $over [expr double($over * 100)/$reported]]

	set job1_alloc_str [format "%d\\\(%.2f%%\\\)" $job1_alloc [expr double($job1_alloc * 100)/$reported]]
	set job2_alloc_str [format "%d\\\(%.2f%%\\\)" $job2_alloc [expr double($job2_alloc * 100)/$reported]]
	set job3_alloc_str [format "%d\\\(%.2f%%\\\)" $job3_alloc [expr double($job3_alloc * 100)/$reported]]
	set total_alloc_str [format "%d\\\(%.2f%%\\\)" $total_alloc [expr double($total_alloc * 100)/$reported]]
	set acct1_alloc_str [format "%d\\\(%.2f%%\\\)" $acct1_alloc [expr double($acct1_alloc * 100)/$reported]]
	set acct2_alloc_str [format "%d\\\(%.2f%%\\\)" $acct2_alloc [expr double($acct2_alloc * 100)/$reported]]
	set acct3_alloc_str [format "%d\\\(%.2f%%\\\)" $acct3_alloc [expr double($acct3_alloc * 100)/$reported]]
	set wckey1_alloc_str [format "%d\\\(%.2f%%\\\)" $wckey1_alloc [expr double($wckey1_alloc * 100)/$reported]]
	set user1_wckey1_alloc_str [format "%d\\\(%.2f%%\\\)" $user1_wckey1_alloc [expr double($user1_wckey1_alloc * 100)/$reported]]
	set user2_wckey1_alloc_str [format "%d\\\(%.2f%%\\\)" $user2_wckey1_alloc [expr double($user2_wckey1_alloc * 100)/$reported]]

	set reported [format "%d\\\(%.2f%%\\\)" $reported 100]


	log_info "Testing sreport over 3 days"
	set output [run_command_output -fail "$sreport --local cluster utilization cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,idle,down,alloc,res,over,reported"]
	subtest {![regexp "There was a problem" $output]} "Verify no error message is reported by sreport"
	subtest {[regexp -all "$cluster.$idle.$down.$alloc.$resv.$over.$reported." $output] == 1} "Test the cluster utilization report over 3 days"

	# Test the UserUtilizationByAccount report
	set output [run_command_output -fail "$sreport --local cluster UserUtilizationByAccount cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,login,account,used"]
	subtest {![regexp "There was a problem" $output]} "Verify no error message is reported by sreport"
	subtest {[regexp -all "$cluster.$user2.$account3.$job2_alloc_str." $output] == 1} "Test the UserUtilizationByAccount report over 3 days"
	subtest {[regexp -all "$cluster.$user1.$account1.$job1_alloc_str." $output] == 1} "Test the UserUtilizationByAccount report over 3 days"
	subtest {[regexp -all "$cluster.$user1.$account2.$job3_alloc_str." $output] == 1} "Test the UserUtilizationByAccount report over 3 days"

	# Test the AccountUtilizationByUser report
	set output [run_command_output -fail "$sreport --local cluster AccountUtilizationByUser cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,account,login,used"]
	subtest {![regexp "There was a problem" $output]} "Verify no error message is reported by sreport"
	subtest {[regexp -all "$cluster.root..$total_alloc_str." $output] == 1} "Test the AccountUtilizationByUser report over 3 days"
	subtest {[regexp -all "$cluster.$account1..$acct1_alloc_str." $output] == 1} "Test the AccountUtilizationByUser report over 3 days"
	subtest {[regexp -all "$cluster.$account1.$user1.$job1_alloc_str." $output] == 1} "Test the AccountUtilizationByUser report over 3 days"
	subtest {[regexp -all "$cluster.$account2..$acct2_alloc_str." $output] == 1} "Test the AccountUtilizationByUser report over 3 days"
	subtest {[regexp -all "$cluster.$account2.$user1.$job3_alloc_str." $output] == 1} "Test the AccountUtilizationByUser report over 3 days"
	subtest {[regexp -all "$cluster.$account3..$acct3_alloc_str." $output] == 1} "Test the AccountUtilizationByUser report over 3 days"
	subtest {[regexp -all "$cluster.$account3.$user2.$job2_alloc_str." $output] == 1} "Test the AccountUtilizationByUser report over 3 days"

	if {!$wc_key_track} {
		subskip "Needs TracWCKey for some subtests"
	} else {
		# Test the UserUtilizationByWckey report
		set output [run_command_output -fail "$sreport --local cluster UserUtilizationByWckey cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,login,wckey,used"]
		subtest {![regexp "There was a problem" $output]} "Verify no error message is reported by sreport"
		subtest {[regexp -all "$cluster.$user2.$wckey1.$user2_wckey1_alloc_str." $output] == 1} "Test the UserUtilizationByWckey report over 3 days"
		subtest {[regexp -all "$cluster.$user1.$wckey1.$user1_wckey1_alloc_str." $output] == 1} "Test the UserUtilizationByWckey report over 3 days"

		# Test the WckeyUtilizationByUser report
		set output [run_command_output -fail "$sreport --local cluster WckeyUtilizationByUser cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,wckey,login,used"]
		subtest {![regexp "There was a problem" $output]} "Verify no error message is reported by sreport"
		subtest {[regexp -all "$cluster.$wckey1..$wckey1_alloc_str." $output] == 1} "Test the WckeyUtilizationByUser report over 3 days"
		subtest {[regexp -all "$cluster.$wckey1.$user1.$user1_wckey1_alloc_str." $output] == 1} "Test the WckeyUtilizationByUser report over 3 days"
		subtest {[regexp -all "$cluster.$wckey1.$user2.$user2_wckey1_alloc_str." $output] == 1} "Test the WckeyUtilizationByUser report over 3 days"
	}

	# Test the User Top report
	set output [run_command_output -fail "$sreport --local user top cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,account,login,used"]
	subtest {![regexp "There was a problem" $output]} "Verify no error message is reported by sreport"
	subtest {[regexp -all "$cluster.$account3.$user2.$job2_alloc_str." $output] == 1} "Test the User Top report over 3 days"
	subtest {[regexp -all "$cluster.$account1.$user1.$job1_alloc_str." $output] == 1} "Test the User Top report over 3 days"
	subtest {[regexp -all "$cluster.$account2.$user1.$job3_alloc_str." $output] == 1} "Test the User Top report over 3 days"

	# Test the Job Size report
	set output [run_command_output -fail "$sreport --local job size AcctAsParent grouping=2,4 cluster='$cluster' start=$start_str end=$end_str -tsec -p -n"]
	subtest {![regexp "There was a problem" $output]} "Verify no error message is reported by sreport"
	subtest {[regexp -all "$cluster.$account1.0.$job1_alloc.0." $output] == 1} "Test the Job Size report over 3 days"
	subtest {[regexp -all "$cluster.$account2.0.$job3_alloc.$job2_alloc." $output] == 1} "Test the Job Size report over 3 days"

	# Test the Job Size report down a level
	set output [run_command_output -fail "$sreport --local job size AcctAsParent grouping=2,4 cluster='$cluster' account='$account2' start=$start_str end=$end_str -tsec -p -n"]
	subtest {![regexp "There was a problem" $output]} "Verify no error message is reported by sreport"
	subtest {[regexp -all "$cluster.$account3.0.0.$job2_alloc." $output] == 1} "Test the Job Size report down a level over 3 days"

	# Test the Job Size by wckey report
	set output [run_command_output -fail "$sreport --local job sizesbywckey grouping=2,4 cluster='$cluster' start=$start_str end=$end_str -tsec -p -n"]
	subtest {![regexp "There was a problem" $output]} "Verify no error message is reported by sreport"
	subtest {[regexp -all "$cluster.$wckey1.0.$wckey_alloc_sec1.$wckey_alloc_sec2." $output] == 1} "Test the Job Size by wckey report over 3 days"
}