Lines Matching refs:g
38 #define tprintf(x...) do { if (g && g->p.show_details >= 0) printf(x); } while (0)
43 #define dprintf(x...) do { if (g && g->p.show_details >= 1) printf(x); } while (0)
151 static struct global_info *g = NULL; variable
224 for (cpu = 0; cpu < g->p.nr_cpus; cpu++) in bind_to_cpu()
227 BUG_ON(target_cpu < 0 || target_cpu >= g->p.nr_cpus); in bind_to_cpu()
239 int cpus_per_node = g->p.nr_cpus/g->p.nr_nodes; in bind_to_node()
244 BUG_ON(cpus_per_node*g->p.nr_nodes != g->p.nr_cpus); in bind_to_node()
253 for (cpu = 0; cpu < g->p.nr_cpus; cpu++) in bind_to_node()
259 BUG_ON(cpu_stop > g->p.nr_cpus); in bind_to_node()
283 ret = set_mempolicy(MPOL_DEFAULT, NULL, g->p.nr_nodes-1); in mempol_restore()
296 BUG_ON(g->p.nr_nodes > (int)sizeof(nodemask)); in bind_to_memnode()
340 if (ret && !g->print_once) { in alloc_data()
341 g->print_once = 1; in alloc_data()
347 if (ret && !g->print_once) { in alloc_data()
348 g->print_once = 1; in alloc_data()
396 return alloc_data(bytes, MAP_SHARED, 1, g->p.init_cpu0, g->p.thp, g->p.init_random); in zalloc_shared_data()
404 return alloc_data(bytes, MAP_SHARED, 0, g->p.init_cpu0, g->p.thp, g->p.init_random); in setup_shared_data()
413 return alloc_data(bytes, MAP_PRIVATE, 0, g->p.init_cpu0, g->p.thp, g->p.init_random); in setup_private_data()
443 if (!g->p.cpu_list_str) in parse_setup_cpu_list()
446 dprintf("g->p.nr_tasks: %d\n", g->p.nr_tasks); in parse_setup_cpu_list()
448 str0 = str = strdup(g->p.cpu_list_str); in parse_setup_cpu_list()
483 BUG_ON(step <= 0 || step >= g->p.nr_cpus); in parse_setup_cpu_list()
495 BUG_ON(bind_len <= 0 || bind_len > g->p.nr_cpus); in parse_setup_cpu_list()
508 if (bind_cpu_0 >= g->p.nr_cpus || bind_cpu_1 >= g->p.nr_cpus) { in parse_setup_cpu_list()
509 printf("\nTest not applicable, system has only %d CPUs.\n", g->p.nr_cpus); in parse_setup_cpu_list()
522 if (t >= g->p.nr_tasks) { in parse_setup_cpu_list()
526 td = g->threads + t; in parse_setup_cpu_list()
538 BUG_ON(cpu < 0 || cpu >= g->p.nr_cpus); in parse_setup_cpu_list()
549 if (t < g->p.nr_tasks) in parse_setup_cpu_list()
550 printf("# NOTE: %d tasks bound, %d tasks unbound\n", t, g->p.nr_tasks - t); in parse_setup_cpu_list()
580 if (!g->p.node_list_str) in parse_setup_node_list()
583 dprintf("g->p.nr_tasks: %d\n", g->p.nr_tasks); in parse_setup_node_list()
585 str0 = str = strdup(g->p.node_list_str); in parse_setup_node_list()
619 BUG_ON(step <= 0 || step >= g->p.nr_nodes); in parse_setup_node_list()
632 if (bind_node_0 >= g->p.nr_nodes || bind_node_1 >= g->p.nr_nodes) { in parse_setup_node_list()
633 printf("\nTest not applicable, system has only %d nodes.\n", g->p.nr_nodes); in parse_setup_node_list()
644 if (t >= g->p.nr_tasks) { in parse_setup_node_list()
648 td = g->threads + t; in parse_setup_node_list()
664 if (t < g->p.nr_tasks) in parse_setup_node_list()
665 printf("# NOTE: %d tasks mem-bound, %d tasks unbound\n", t, g->p.nr_tasks - t); in parse_setup_node_list()
698 if (g->p.data_reads) in access_data()
700 if (g->p.data_writes) in access_data()
729 if (g->p.data_zero_memset && !g->p.data_rand_walk) { in do_work()
736 chunk_1 = words/g->p.nr_loops; in do_work()
742 if (g->p.data_rand_walk) { in do_work()
754 if (g->p.data_zero_memset) { in do_work()
761 } else if (!g->p.data_backwards || (nr + loop) & 1) { in do_work()
807 g->threads[task_nr].curr_cpu = cpu; in update_curr_cpu()
827 for (t = 0; t < g->p.nr_threads; t++) { in count_process_nodes()
832 task_nr = process_nr*g->p.nr_threads + t; in count_process_nodes()
833 td = g->threads + task_nr; in count_process_nodes()
862 for (p = 0; p < g->p.nr_proc; p++) { in count_node_processes()
863 for (t = 0; t < g->p.nr_threads; t++) { in count_node_processes()
868 task_nr = p*g->p.nr_threads + t; in count_node_processes()
869 td = g->threads + task_nr; in count_node_processes()
890 for (p = 0; p < g->p.nr_proc; p++) { in calc_convergence_compression()
926 if (!g->p.show_convergence && !g->p.measure_convergence) in calc_convergence()
929 for (node = 0; node < g->p.nr_nodes; node++) in calc_convergence()
935 for (t = 0; t < g->p.nr_tasks; t++) { in calc_convergence()
936 struct thread_data *td = g->threads + t; in calc_convergence()
955 nr_min = g->p.nr_tasks; in calc_convergence()
958 for (node = 0; node < g->p.nr_nodes; node++) { in calc_convergence()
966 BUG_ON(sum > g->p.nr_tasks); in calc_convergence()
968 if (0 && (sum < g->p.nr_tasks)) in calc_convergence()
978 for (node = 0; node < g->p.nr_nodes; node++) { in calc_convergence()
1002 if (strong && process_groups == g->p.nr_proc) { in calc_convergence()
1006 if (g->p.measure_convergence) { in calc_convergence()
1007 g->all_converged = true; in calc_convergence()
1008 g->stop_work = true; in calc_convergence()
1023 (double)(l+1)/g->p.nr_loops*100.0, runtime_ns_max/1e9 / 60.0); in show_summary()
1027 if (g->p.show_details >= 0) in show_summary()
1039 int details = g->p.show_details; in worker_thread()
1057 global_data = g->data; in worker_thread()
1059 thread_data = setup_private_data(g->p.bytes_thread); in worker_thread()
1064 if (process_nr == g->p.nr_proc-1 && thread_nr == g->p.nr_threads-1) in worker_thread()
1076 if (g->p.serialize_startup) { in worker_thread()
1077 pthread_mutex_lock(&g->startup_mutex); in worker_thread()
1078 g->nr_tasks_started++; in worker_thread()
1079 pthread_mutex_unlock(&g->startup_mutex); in worker_thread()
1082 pthread_mutex_lock(&g->start_work_mutex); in worker_thread()
1083 g->nr_tasks_working++; in worker_thread()
1086 if (g->nr_tasks_working == g->p.nr_tasks) in worker_thread()
1087 pthread_mutex_unlock(&g->startup_done_mutex); in worker_thread()
1089 pthread_mutex_unlock(&g->start_work_mutex); in worker_thread()
1097 for (l = 0; l < g->p.nr_loops; l++) { in worker_thread()
1100 if (g->stop_work) in worker_thread()
1103 val += do_work(global_data, g->p.bytes_global, process_nr, g->p.nr_proc, l, val); in worker_thread()
1104 val += do_work(process_data, g->p.bytes_process, thread_nr, g->p.nr_threads, l, val); in worker_thread()
1105 val += do_work(thread_data, g->p.bytes_thread, 0, 1, l, val); in worker_thread()
1107 if (g->p.sleep_usecs) { in worker_thread()
1109 usleep(g->p.sleep_usecs); in worker_thread()
1115 if (g->p.bytes_process_locked) { in worker_thread()
1117 val += do_work(process_data, g->p.bytes_process_locked, thread_nr, g->p.nr_threads, l, val); in worker_thread()
1121 work_done = g->p.bytes_global + g->p.bytes_process + in worker_thread()
1122 g->p.bytes_process_locked + g->p.bytes_thread; in worker_thread()
1127 if (details < 0 && !g->p.perturb_secs && !g->p.measure_convergence && !g->p.nr_secs) in worker_thread()
1135 if (g->p.nr_secs) { in worker_thread()
1137 if ((u32)diff.tv_sec >= g->p.nr_secs) { in worker_thread()
1138 g->stop_work = true; in worker_thread()
1151 …if (first_task && g->p.perturb_secs && (int)(stop.tv_sec - last_perturbance) >= g->p.perturb_secs)… in worker_thread()
1163 this_cpu = g->threads[task_nr].curr_cpu; in worker_thread()
1164 if (this_cpu < g->p.nr_cpus/2) in worker_thread()
1165 target_cpu = g->p.nr_cpus-1; in worker_thread()
1211 free_data(thread_data, g->p.bytes_thread); in worker_thread()
1213 pthread_mutex_lock(&g->stop_work_mutex); in worker_thread()
1214 g->bytes_done += bytes_done; in worker_thread()
1215 pthread_mutex_unlock(&g->stop_work_mutex); in worker_thread()
1240 task_nr = process_nr*g->p.nr_threads; in worker_process()
1241 td = g->threads + task_nr; in worker_process()
1246 pthreads = zalloc(g->p.nr_threads * sizeof(pthread_t)); in worker_process()
1247 process_data = setup_private_data(g->p.bytes_process); in worker_process()
1249 if (g->p.show_details >= 3) { in worker_process()
1251 process_nr, g->data, process_data); in worker_process()
1254 for (t = 0; t < g->p.nr_threads; t++) { in worker_process()
1255 task_nr = process_nr*g->p.nr_threads + t; in worker_process()
1256 td = g->threads + task_nr; in worker_process()
1270 for (t = 0; t < g->p.nr_threads; t++) { in worker_process()
1275 free_data(process_data, g->p.bytes_process); in worker_process()
1281 if (g->p.show_details < 0) in print_summary()
1286 g->p.nr_tasks, g->p.nr_tasks == 1 ? "task" : "tasks", g->p.nr_nodes, g->p.nr_cpus); in print_summary()
1288 g->p.nr_loops, g->p.bytes_global/1024/1024); in print_summary()
1290 g->p.nr_loops, g->p.bytes_process/1024/1024); in print_summary()
1292 g->p.nr_loops, g->p.bytes_thread/1024/1024); in print_summary()
1301 ssize_t size = sizeof(*g->threads)*g->p.nr_tasks; in init_thread_data()
1304 g->threads = zalloc_shared_data(size); in init_thread_data()
1306 for (t = 0; t < g->p.nr_tasks; t++) { in init_thread_data()
1307 struct thread_data *td = g->threads + t; in init_thread_data()
1315 for (cpu = 0; cpu < g->p.nr_cpus; cpu++) in init_thread_data()
1322 ssize_t size = sizeof(*g->threads)*g->p.nr_tasks; in deinit_thread_data()
1324 free_data(g->threads, size); in deinit_thread_data()
1329 g = (void *)alloc_data(sizeof(*g), MAP_SHARED, 1, 0, 0 /* THP */, 0); in init()
1332 g->p = p0; in init()
1334 g->p.nr_cpus = numa_num_configured_cpus(); in init()
1336 g->p.nr_nodes = numa_max_node() + 1; in init()
1339 BUG_ON(g->p.nr_nodes > MAX_NR_NODES || g->p.nr_nodes < 0); in init()
1341 if (g->p.show_quiet && !g->p.show_details) in init()
1342 g->p.show_details = -1; in init()
1345 if (!g->p.mb_global_str && !g->p.mb_proc_str && !g->p.mb_thread_str) in init()
1348 if (g->p.mb_global_str) { in init()
1349 g->p.mb_global = atof(g->p.mb_global_str); in init()
1350 BUG_ON(g->p.mb_global < 0); in init()
1353 if (g->p.mb_proc_str) { in init()
1354 g->p.mb_proc = atof(g->p.mb_proc_str); in init()
1355 BUG_ON(g->p.mb_proc < 0); in init()
1358 if (g->p.mb_proc_locked_str) { in init()
1359 g->p.mb_proc_locked = atof(g->p.mb_proc_locked_str); in init()
1360 BUG_ON(g->p.mb_proc_locked < 0); in init()
1361 BUG_ON(g->p.mb_proc_locked > g->p.mb_proc); in init()
1364 if (g->p.mb_thread_str) { in init()
1365 g->p.mb_thread = atof(g->p.mb_thread_str); in init()
1366 BUG_ON(g->p.mb_thread < 0); in init()
1369 BUG_ON(g->p.nr_threads <= 0); in init()
1370 BUG_ON(g->p.nr_proc <= 0); in init()
1372 g->p.nr_tasks = g->p.nr_proc*g->p.nr_threads; in init()
1374 g->p.bytes_global = g->p.mb_global *1024L*1024L; in init()
1375 g->p.bytes_process = g->p.mb_proc *1024L*1024L; in init()
1376 g->p.bytes_process_locked = g->p.mb_proc_locked *1024L*1024L; in init()
1377 g->p.bytes_thread = g->p.mb_thread *1024L*1024L; in init()
1379 g->data = setup_shared_data(g->p.bytes_global); in init()
1382 init_global_mutex(&g->start_work_mutex); in init()
1383 init_global_mutex(&g->startup_mutex); in init()
1384 init_global_mutex(&g->startup_done_mutex); in init()
1385 init_global_mutex(&g->stop_work_mutex); in init()
1401 free_data(g->data, g->p.bytes_global); in deinit()
1402 g->data = NULL; in deinit()
1406 free_data(g, sizeof(*g)); in deinit()
1407 g = NULL; in deinit()
1419 if (!g->p.show_quiet) in print_res()
1441 pids = zalloc(g->p.nr_proc * sizeof(*pids)); in __bench_numa()
1445 pthread_mutex_lock(&g->start_work_mutex); in __bench_numa()
1447 if (g->p.serialize_startup) { in __bench_numa()
1454 for (i = 0; i < g->p.nr_proc; i++) { in __bench_numa()
1469 while (g->nr_tasks_started != g->p.nr_tasks) in __bench_numa()
1472 BUG_ON(g->nr_tasks_started != g->p.nr_tasks); in __bench_numa()
1474 if (g->p.serialize_startup) { in __bench_numa()
1477 pthread_mutex_lock(&g->startup_done_mutex); in __bench_numa()
1480 pthread_mutex_unlock(&g->start_work_mutex); in __bench_numa()
1483 pthread_mutex_lock(&g->startup_done_mutex); in __bench_numa()
1497 pthread_mutex_unlock(&g->startup_done_mutex); in __bench_numa()
1505 for (i = 0; i < g->p.nr_proc; i++) { in __bench_numa()
1515 for (t = 0; t < g->p.nr_tasks; t++) { in __bench_numa()
1516 u64 thread_runtime_ns = g->threads[t].runtime_ns; in __bench_numa()
1536 bytes = g->bytes_done; in __bench_numa()
1537 runtime_avg = (double)runtime_ns_sum / g->p.nr_tasks / 1e9; in __bench_numa()
1539 if (g->p.measure_convergence) { in __bench_numa()
1557 print_res(name, bytes / g->p.nr_tasks / 1e9, in __bench_numa()
1563 print_res(name, runtime_sec_max * 1e9 / (bytes / g->p.nr_tasks), in __bench_numa()
1566 print_res(name, bytes / g->p.nr_tasks / 1e9 / runtime_sec_max, in __bench_numa()
1572 if (g->p.show_details >= 2) { in __bench_numa()
1575 for (p = 0; p < g->p.nr_proc; p++) { in __bench_numa()
1576 for (t = 0; t < g->p.nr_threads; t++) { in __bench_numa()
1578 td = g->threads + p*g->p.nr_threads + t; in __bench_numa()