diff --git a/test/core/support/cpu_test.c b/test/core/support/cpu_test.c index c1833ce3ca637139140522bb1568385d31b11a1c..382c0ba6d15a61891634c7e11c7fefe6b65d7be1 100644 --- a/test/core/support/cpu_test.c +++ b/test/core/support/cpu_test.c @@ -54,14 +54,15 @@ to run on all cores). 4) Each thread checks what core it is running on, and marks that core as "used" in the test. - 5) Check that all cores were "used" + 5) Count number of "used" cores. The test will fail if: 1) gpr_cpu_num_cores() == 0 - 2) The result of gpr_cpu_current_cpu() >= gpr_cpu_num_cores() - 3) Not all cores are used/seen in the test. If a system does not exhibit - this property (e.g. some cores reserved/unusable), then this condition - will have to be rethought. + 2) Any result from gpr_cpu_current_cpu() >= gpr_cpu_num_cores() + 3) Ideally, we would fail if not all cores were seen as used. Unfortunately, + this is only probabilistically true, and depends on the OS, it's + scheduler, etc. So we just print out an indication of how many were seen; + hopefully developers can use this to sanity check their system. */ /* Status shared across threads */ @@ -92,7 +93,6 @@ static void worker_thread(void *arg) { gpr_mu_unlock(&ct->mu); } gpr_mu_lock(&ct->mu); - fprintf(stderr, "thread done on core %d\n", cpu); ct->r = r; /* make it look like we care about r's value... */ ct->nthreads--; if (ct->nthreads == 0) { @@ -104,11 +104,11 @@ static void worker_thread(void *arg) { static void cpu_test(void) { gpr_uint32 i; + int cores_seen = 0; struct cpu_test ct; gpr_thd_id thd; ct.ncores = gpr_cpu_num_cores(); GPR_ASSERT(ct.ncores > 0); - fprintf(stderr, "#cores = %d\n", ct.ncores); ct.nthreads = (int)ct.ncores * 3; ct.used = gpr_malloc(ct.ncores * sizeof(int)); memset(ct.used, 0, ct.ncores * sizeof(int)); @@ -124,8 +124,11 @@ static void cpu_test(void) { } gpr_mu_unlock(&ct.mu); for (i = 0; i < ct.ncores; i++) { - GPR_ASSERT(ct.used[i]); + if (ct.used[i]) { + cores_seen++; + } } + fprintf(stderr, "Saw %d/%d cores\n", cores_seen, ct.ncores); } int main(int argc, char *argv[]) {