@@ -1134,6 +1134,9 @@ struct topo_params {
1134
1134
int num_die ;
1135
1135
int num_cpus ;
1136
1136
int num_cores ;
1137
+ int allowed_packages ;
1138
+ int allowed_cpus ;
1139
+ int allowed_cores ;
1137
1140
int max_cpu_num ;
1138
1141
int max_node_num ;
1139
1142
int nodes_per_pkg ;
@@ -1179,7 +1182,6 @@ int for_all_cpus(int (func) (struct thread_data *, struct core_data *, struct pk
1179
1182
struct thread_data * t ;
1180
1183
struct core_data * c ;
1181
1184
struct pkg_data * p ;
1182
-
1183
1185
t = GET_THREAD (thread_base , thread_no , core_no , node_no , pkg_no );
1184
1186
1185
1187
if (cpu_is_not_allowed (t -> cpu_id ))
@@ -2426,40 +2428,40 @@ void compute_average(struct thread_data *t, struct core_data *c, struct pkg_data
2426
2428
/* Use the global time delta for the average. */
2427
2429
average .threads .tv_delta = tv_delta ;
2428
2430
2429
- average .threads .tsc /= topo .num_cpus ;
2430
- average .threads .aperf /= topo .num_cpus ;
2431
- average .threads .mperf /= topo .num_cpus ;
2432
- average .threads .instr_count /= topo .num_cpus ;
2433
- average .threads .c1 /= topo .num_cpus ;
2431
+ average .threads .tsc /= topo .allowed_cpus ;
2432
+ average .threads .aperf /= topo .allowed_cpus ;
2433
+ average .threads .mperf /= topo .allowed_cpus ;
2434
+ average .threads .instr_count /= topo .allowed_cpus ;
2435
+ average .threads .c1 /= topo .allowed_cpus ;
2434
2436
2435
2437
if (average .threads .irq_count > 9999999 )
2436
2438
sums_need_wide_columns = 1 ;
2437
2439
2438
- average .cores .c3 /= topo .num_cores ;
2439
- average .cores .c6 /= topo .num_cores ;
2440
- average .cores .c7 /= topo .num_cores ;
2441
- average .cores .mc6_us /= topo .num_cores ;
2440
+ average .cores .c3 /= topo .allowed_cores ;
2441
+ average .cores .c6 /= topo .allowed_cores ;
2442
+ average .cores .c7 /= topo .allowed_cores ;
2443
+ average .cores .mc6_us /= topo .allowed_cores ;
2442
2444
2443
2445
if (DO_BIC (BIC_Totl_c0 ))
2444
- average .packages .pkg_wtd_core_c0 /= topo .num_packages ;
2446
+ average .packages .pkg_wtd_core_c0 /= topo .allowed_packages ;
2445
2447
if (DO_BIC (BIC_Any_c0 ))
2446
- average .packages .pkg_any_core_c0 /= topo .num_packages ;
2448
+ average .packages .pkg_any_core_c0 /= topo .allowed_packages ;
2447
2449
if (DO_BIC (BIC_GFX_c0 ))
2448
- average .packages .pkg_any_gfxe_c0 /= topo .num_packages ;
2450
+ average .packages .pkg_any_gfxe_c0 /= topo .allowed_packages ;
2449
2451
if (DO_BIC (BIC_CPUGFX ))
2450
- average .packages .pkg_both_core_gfxe_c0 /= topo .num_packages ;
2452
+ average .packages .pkg_both_core_gfxe_c0 /= topo .allowed_packages ;
2451
2453
2452
- average .packages .pc2 /= topo .num_packages ;
2454
+ average .packages .pc2 /= topo .allowed_packages ;
2453
2455
if (DO_BIC (BIC_Pkgpc3 ))
2454
- average .packages .pc3 /= topo .num_packages ;
2456
+ average .packages .pc3 /= topo .allowed_packages ;
2455
2457
if (DO_BIC (BIC_Pkgpc6 ))
2456
- average .packages .pc6 /= topo .num_packages ;
2458
+ average .packages .pc6 /= topo .allowed_packages ;
2457
2459
if (DO_BIC (BIC_Pkgpc7 ))
2458
- average .packages .pc7 /= topo .num_packages ;
2460
+ average .packages .pc7 /= topo .allowed_packages ;
2459
2461
2460
- average .packages .pc8 /= topo .num_packages ;
2461
- average .packages .pc9 /= topo .num_packages ;
2462
- average .packages .pc10 /= topo .num_packages ;
2462
+ average .packages .pc8 /= topo .allowed_packages ;
2463
+ average .packages .pc9 /= topo .allowed_packages ;
2464
+ average .packages .pc10 /= topo .allowed_packages ;
2463
2465
2464
2466
for (i = 0 , mp = sys .tp ; mp ; i ++ , mp = mp -> next ) {
2465
2467
if (mp -> format == FORMAT_RAW )
@@ -2469,7 +2471,7 @@ void compute_average(struct thread_data *t, struct core_data *c, struct pkg_data
2469
2471
sums_need_wide_columns = 1 ;
2470
2472
continue ;
2471
2473
}
2472
- average .threads .counter [i ] /= topo .num_cpus ;
2474
+ average .threads .counter [i ] /= topo .allowed_cpus ;
2473
2475
}
2474
2476
for (i = 0 , mp = sys .cp ; mp ; i ++ , mp = mp -> next ) {
2475
2477
if (mp -> format == FORMAT_RAW )
@@ -2478,7 +2480,7 @@ void compute_average(struct thread_data *t, struct core_data *c, struct pkg_data
2478
2480
if (average .cores .counter [i ] > 9999999 )
2479
2481
sums_need_wide_columns = 1 ;
2480
2482
}
2481
- average .cores .counter [i ] /= topo .num_cores ;
2483
+ average .cores .counter [i ] /= topo .allowed_cores ;
2482
2484
}
2483
2485
for (i = 0 , mp = sys .pp ; mp ; i ++ , mp = mp -> next ) {
2484
2486
if (mp -> format == FORMAT_RAW )
@@ -2487,7 +2489,7 @@ void compute_average(struct thread_data *t, struct core_data *c, struct pkg_data
2487
2489
if (average .packages .counter [i ] > 9999999 )
2488
2490
sums_need_wide_columns = 1 ;
2489
2491
}
2490
- average .packages .counter [i ] /= topo .num_packages ;
2492
+ average .packages .counter [i ] /= topo .allowed_packages ;
2491
2493
}
2492
2494
}
2493
2495
@@ -3690,7 +3692,7 @@ void re_initialize(void)
3690
3692
{
3691
3693
free_all_buffers ();
3692
3694
setup_all_buffers ();
3693
- fprintf (outf , "turbostat: re-initialized with num_cpus %d\n" , topo .num_cpus );
3695
+ fprintf (outf , "turbostat: re-initialized with num_cpus %d, allowed_cpus %d \n" , topo .num_cpus , topo . allowed_cpus );
3694
3696
}
3695
3697
3696
3698
void set_max_cpu_num (void )
@@ -5953,6 +5955,24 @@ void allocate_irq_buffers(void)
5953
5955
err (-1 , "calloc %d" , topo .max_cpu_num + 1 );
5954
5956
}
5955
5957
5958
+ int update_topo (struct thread_data * t , struct core_data * c , struct pkg_data * p )
5959
+ {
5960
+ topo .allowed_cpus ++ ;
5961
+ if ((int )t -> cpu_id == c -> base_cpu )
5962
+ topo .allowed_cores ++ ;
5963
+ if ((int )t -> cpu_id == p -> base_cpu )
5964
+ topo .allowed_packages ++ ;
5965
+
5966
+ return 0 ;
5967
+ }
5968
+
5969
+ void topology_update (void )
5970
+ {
5971
+ topo .allowed_cpus = 0 ;
5972
+ topo .allowed_cores = 0 ;
5973
+ topo .allowed_packages = 0 ;
5974
+ for_all_cpus (update_topo , ODD_COUNTERS );
5975
+ }
5956
5976
void setup_all_buffers (void )
5957
5977
{
5958
5978
topology_probe ();
@@ -5962,6 +5982,7 @@ void setup_all_buffers(void)
5962
5982
allocate_counters (& thread_odd , & core_odd , & package_odd );
5963
5983
allocate_output_buffer ();
5964
5984
for_all_proc_cpus (initialize_counters );
5985
+ topology_update ();
5965
5986
}
5966
5987
5967
5988
void set_base_cpu (void )
0 commit comments