Message ID | 20240118144857.2124034-4-zhao1.liu@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | tests/unit/test-smp-parse.c: Add more CPU topology test cases | expand |
On 18/01/2024 15.48, Zhao Liu wrote: > From: Zhao Liu <zhao1.liu@intel.com> > > Currently, -smp supports 2 more new levels: book and drawer. > > It is necessary to consider the effects of book and drawer in the test > cases to ensure that the calculations are correct. This is also the > preparation to add new book and drawer test cases. > > Signed-off-by: Zhao Liu <zhao1.liu@intel.com> > --- > tests/unit/test-smp-parse.c | 25 ++++++++++++++++++++++--- > 1 file changed, 22 insertions(+), 3 deletions(-) > > diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c > index 55ba13bf7d15..a8eb3bbb35ed 100644 > --- a/tests/unit/test-smp-parse.c > +++ b/tests/unit/test-smp-parse.c > @@ -384,6 +384,8 @@ static char *smp_config_to_string(const SMPConfiguration *config) > return g_strdup_printf( > "(SMPConfiguration) {\n" > " .has_cpus = %5s, cpus = %" PRId64 ",\n" > + " .has_drawers = %5s, drawers = %" PRId64 ",\n" > + " .has_books = %5s, books = %" PRId64 ",\n" > " .has_sockets = %5s, sockets = %" PRId64 ",\n" > " .has_dies = %5s, dies = %" PRId64 ",\n" > " .has_clusters = %5s, clusters = %" PRId64 ",\n" > @@ -392,6 +394,8 @@ static char *smp_config_to_string(const SMPConfiguration *config) > " .has_maxcpus = %5s, maxcpus = %" PRId64 ",\n" > "}", > config->has_cpus ? "true" : "false", config->cpus, > + config->has_drawers ? "true" : "false", config->drawers, > + config->has_books ? "true" : "false", config->books, > config->has_sockets ? "true" : "false", config->sockets, > config->has_dies ? "true" : "false", config->dies, > config->has_clusters ? "true" : "false", config->clusters, > @@ -404,10 +408,10 @@ static char *smp_config_to_string(const SMPConfiguration *config) > static unsigned int cpu_topology_get_threads_per_socket(const CpuTopology *topo) > { > /* Check the divisor to avoid invalid topology examples causing SIGFPE. */ > - if (!topo->sockets) { > + if (!topo->drawers || !topo->books || !topo->sockets) { > return 0; > } else { > - return topo->max_cpus / topo->sockets; > + return topo->max_cpus / topo->drawers / topo->books / topo->sockets; > } > } > > @@ -429,6 +433,8 @@ static char *cpu_topology_to_string(const CpuTopology *topo, > return g_strdup_printf( > "(CpuTopology) {\n" > " .cpus = %u,\n" > + " .drawers = %u,\n" > + " .books = %u,\n" > " .sockets = %u,\n" > " .dies = %u,\n" > " .clusters = %u,\n" > @@ -438,7 +444,8 @@ static char *cpu_topology_to_string(const CpuTopology *topo, > " .threads_per_socket = %u,\n" > " .cores_per_socket = %u,\n" > "}", > - topo->cpus, topo->sockets, topo->dies, topo->clusters, > + topo->cpus, topo->drawers, topo->books, > + topo->sockets, topo->dies, topo->clusters, > topo->cores, topo->threads, topo->max_cpus, > threads_per_socket, cores_per_socket); > } > @@ -473,6 +480,8 @@ static void check_parse(MachineState *ms, const SMPConfiguration *config, > if (is_valid) { > if ((err == NULL) && > (ms->smp.cpus == expect_topo->cpus) && > + (ms->smp.drawers == expect_topo->drawers) && > + (ms->smp.books == expect_topo->books) && > (ms->smp.sockets == expect_topo->sockets) && > (ms->smp.dies == expect_topo->dies) && > (ms->smp.clusters == expect_topo->clusters) && > @@ -564,6 +573,16 @@ static void unsupported_params_init(const MachineClass *mc, SMPTestData *data) > data->expect_prefer_sockets.clusters = 1; > data->expect_prefer_cores.clusters = 1; > } > + > + if (!mc->smp_props.books_supported) { > + data->expect_prefer_sockets.books = 1; > + data->expect_prefer_cores.books = 1; > + } > + > + if (!mc->smp_props.drawers_supported) { > + data->expect_prefer_sockets.drawers = 1; > + data->expect_prefer_cores.drawers = 1; > + } > } > Reviewed-by: Thomas Huth <thuth@redhat.com>
diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c index 55ba13bf7d15..a8eb3bbb35ed 100644 --- a/tests/unit/test-smp-parse.c +++ b/tests/unit/test-smp-parse.c @@ -384,6 +384,8 @@ static char *smp_config_to_string(const SMPConfiguration *config) return g_strdup_printf( "(SMPConfiguration) {\n" " .has_cpus = %5s, cpus = %" PRId64 ",\n" + " .has_drawers = %5s, drawers = %" PRId64 ",\n" + " .has_books = %5s, books = %" PRId64 ",\n" " .has_sockets = %5s, sockets = %" PRId64 ",\n" " .has_dies = %5s, dies = %" PRId64 ",\n" " .has_clusters = %5s, clusters = %" PRId64 ",\n" @@ -392,6 +394,8 @@ static char *smp_config_to_string(const SMPConfiguration *config) " .has_maxcpus = %5s, maxcpus = %" PRId64 ",\n" "}", config->has_cpus ? "true" : "false", config->cpus, + config->has_drawers ? "true" : "false", config->drawers, + config->has_books ? "true" : "false", config->books, config->has_sockets ? "true" : "false", config->sockets, config->has_dies ? "true" : "false", config->dies, config->has_clusters ? "true" : "false", config->clusters, @@ -404,10 +408,10 @@ static char *smp_config_to_string(const SMPConfiguration *config) static unsigned int cpu_topology_get_threads_per_socket(const CpuTopology *topo) { /* Check the divisor to avoid invalid topology examples causing SIGFPE. */ - if (!topo->sockets) { + if (!topo->drawers || !topo->books || !topo->sockets) { return 0; } else { - return topo->max_cpus / topo->sockets; + return topo->max_cpus / topo->drawers / topo->books / topo->sockets; } } @@ -429,6 +433,8 @@ static char *cpu_topology_to_string(const CpuTopology *topo, return g_strdup_printf( "(CpuTopology) {\n" " .cpus = %u,\n" + " .drawers = %u,\n" + " .books = %u,\n" " .sockets = %u,\n" " .dies = %u,\n" " .clusters = %u,\n" @@ -438,7 +444,8 @@ static char *cpu_topology_to_string(const CpuTopology *topo, " .threads_per_socket = %u,\n" " .cores_per_socket = %u,\n" "}", - topo->cpus, topo->sockets, topo->dies, topo->clusters, + topo->cpus, topo->drawers, topo->books, + topo->sockets, topo->dies, topo->clusters, topo->cores, topo->threads, topo->max_cpus, threads_per_socket, cores_per_socket); } @@ -473,6 +480,8 @@ static void check_parse(MachineState *ms, const SMPConfiguration *config, if (is_valid) { if ((err == NULL) && (ms->smp.cpus == expect_topo->cpus) && + (ms->smp.drawers == expect_topo->drawers) && + (ms->smp.books == expect_topo->books) && (ms->smp.sockets == expect_topo->sockets) && (ms->smp.dies == expect_topo->dies) && (ms->smp.clusters == expect_topo->clusters) && @@ -564,6 +573,16 @@ static void unsupported_params_init(const MachineClass *mc, SMPTestData *data) data->expect_prefer_sockets.clusters = 1; data->expect_prefer_cores.clusters = 1; } + + if (!mc->smp_props.books_supported) { + data->expect_prefer_sockets.books = 1; + data->expect_prefer_cores.books = 1; + } + + if (!mc->smp_props.drawers_supported) { + data->expect_prefer_sockets.drawers = 1; + data->expect_prefer_cores.drawers = 1; + } } static void machine_base_class_init(ObjectClass *oc, void *data)