diff options
Diffstat (limited to 'kern')
-rw-r--r-- | kern/counters.c | 3 | ||||
-rw-r--r-- | kern/counters.h | 3 | ||||
-rw-r--r-- | kern/thread.c | 15 |
3 files changed, 13 insertions, 8 deletions
diff --git a/kern/counters.c b/kern/counters.c index 74fd42d..0a0665b 100644 --- a/kern/counters.c +++ b/kern/counters.c @@ -46,6 +46,9 @@ mach_counter_t c_stacks_current = 0; mach_counter_t c_stacks_max = 0; mach_counter_t c_stacks_min = 0; mach_counter_t c_stacks_total = 0; +mach_counter_t c_stack_alloc_hits = 0; +mach_counter_t c_stack_alloc_misses = 0; +mach_counter_t c_stack_alloc_max = 0; mach_counter_t c_clock_ticks = 0; mach_counter_t c_ipc_mqueue_send_block = 0; mach_counter_t c_ipc_mqueue_receive_block_user = 0; diff --git a/kern/counters.h b/kern/counters.h index bfa9b44..aa1e739 100644 --- a/kern/counters.h +++ b/kern/counters.h @@ -69,6 +69,9 @@ extern mach_counter_t c_stacks_current; extern mach_counter_t c_stacks_max; extern mach_counter_t c_stacks_min; extern mach_counter_t c_stacks_total; +extern mach_counter_t c_stack_alloc_hits; +extern mach_counter_t c_stack_alloc_misses; +extern mach_counter_t c_stack_alloc_max; extern mach_counter_t c_clock_ticks; extern mach_counter_t c_ipc_mqueue_send_block; extern mach_counter_t c_ipc_mqueue_receive_block_user; diff --git a/kern/thread.c b/kern/thread.c index 5ffa844..009884c 100644 --- a/kern/thread.c +++ b/kern/thread.c @@ -124,10 +124,6 @@ vm_offset_t stack_free_list; /* splsched only */ unsigned int stack_free_count = 0; /* splsched only */ unsigned int stack_free_limit = 1; /* patchable */ -unsigned int stack_alloc_hits = 0; /* debugging */ -unsigned int stack_alloc_misses = 0; /* debugging */ -unsigned int stack_alloc_max = 0; /* debugging */ - /* * The next field is at the base of the stack, * so the low end is left unsullied. @@ -160,10 +156,10 @@ boolean_t stack_alloc_try( if (stack != 0) { stack_attach(thread, stack, resume); - stack_alloc_hits++; + counter(c_stack_alloc_hits++); return TRUE; } else { - stack_alloc_misses++; + counter(c_stack_alloc_misses++); return FALSE; } } @@ -235,8 +231,11 @@ void stack_free( stack_lock(); stack_next(stack) = stack_free_list; stack_free_list = stack; - if (++stack_free_count > stack_alloc_max) - stack_alloc_max = stack_free_count; + stack_free_count += 1; +#if MACH_COUNTERS + if (stack_free_count > c_stack_alloc_max) + c_stack_alloc_max = stack_free_count; +#endif /* MACH_COUNTERS */ stack_unlock(); } } |