From c3c4516ec60d39d227211b49baab34a19e54fa31 Mon Sep 17 00:00:00 2001 From: David Loup <david.loup@inria.fr> Date: Tue, 21 Apr 2020 10:50:27 +0200 Subject: [PATCH] Check new core numbering scheme (pyxis) in valid:oar-properties --- lib/refrepo/valid/oar-properties.rb | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/refrepo/valid/oar-properties.rb b/lib/refrepo/valid/oar-properties.rb index c3e40795e38..5a4a3c41340 100644 --- a/lib/refrepo/valid/oar-properties.rb +++ b/lib/refrepo/valid/oar-properties.rb @@ -1,5 +1,6 @@ # coding: utf-8 +require 'refrepo/data_loader' require 'net/ssh' require 'hashdiff' @@ -13,6 +14,7 @@ G5K_PROPERTIES=%w{api_timestamp available_upto besteffort chassis chunks cluster module RefRepo::Valid::OarProperties def self.check(options) ret = true + refapi = load_data_hierarchy options[:sites].each do |site| puts "Checking site #{site}..." resources = RefRepo::Utils::get_api("sites/#{site}/internal/oarapi/resources/details.json?limit=1000000")['items'] @@ -77,6 +79,7 @@ module RefRepo::Valid::OarProperties raise "Invalid: varying nbcores inside cluster!" end nbcores = nbcores.first + refapi_host = refapi['sites'][site]['clusters'][cluster]['nodes'][host.split('.')[0]] if host_resources.length != nbcores puts "ERROR: invalid number of resources for #{host}. should be nbcores." @@ -100,10 +103,22 @@ module RefRepo::Valid::OarProperties ret = false end # the last cpuset should be nbcores-1 - if host_cpusets_max - host_cpusets_min + 1 != nbcores + if host_cpusets_max - host_cpusets_min + 1 != nbcores and refapi_host['architecture']['cpu_core_numbering'] != 'contiguous-including-threads' puts "ERROR: cpuset values for #{host} are not sequential" ret = false end + + # Core numbering is different with contiguous-including-threads + if refapi_host['architecture']['cpu_core_numbering'] == 'contiguous-including-threads' + cpu_num_max = refapi_host['architecture']['nb_procs'] - 1 + thread_per_cpu = refapi_host['architecture']['nb_threads'] / refapi_host['architecture']['nb_procs'] + core_per_cpu = nbcores / refapi_host['architecture']['nb_procs'] + if host_cpusets_max != cpu_num_max * thread_per_cpu + core_per_cpu - 1 + puts "ERROR: cpuset values for #{host} do not match contiguous-including-threads core numbering" + ret = false + end + end + if options[:verbose] and (host_cpusets_max - host_cpusets_min + 1 != nbcores or host_cores_max - host_cores_min + 1 != nbcores) puts "id cpu core cpuset" pp(host_resources.map { |e| [e['id'], e['cpu'], e['core'], e['cpuset'] ] }) -- GitLab