log GC's peak memory use on exit
This commit is contained in:
parent
d044fa0beb
commit
825af972db
|
@ -326,6 +326,7 @@ typedef struct Thread_Local_Variables {
|
||||||
volatile short delayed_break_ready_;
|
volatile short delayed_break_ready_;
|
||||||
struct Scheme_Thread *main_break_target_thread_;
|
struct Scheme_Thread *main_break_target_thread_;
|
||||||
intptr_t scheme_code_page_total_;
|
intptr_t scheme_code_page_total_;
|
||||||
|
intptr_t max_gc_pre_used_bytes_;
|
||||||
int locale_on_;
|
int locale_on_;
|
||||||
void *current_locale_name_ptr_;
|
void *current_locale_name_ptr_;
|
||||||
int gensym_counter_;
|
int gensym_counter_;
|
||||||
|
@ -711,6 +712,7 @@ XFORM_GC_VARIABLE_STACK_THROUGH_THREAD_LOCAL;
|
||||||
#define delayed_break_ready XOA (scheme_get_thread_local_variables()->delayed_break_ready_)
|
#define delayed_break_ready XOA (scheme_get_thread_local_variables()->delayed_break_ready_)
|
||||||
#define main_break_target_thread XOA (scheme_get_thread_local_variables()->main_break_target_thread_)
|
#define main_break_target_thread XOA (scheme_get_thread_local_variables()->main_break_target_thread_)
|
||||||
#define scheme_code_page_total XOA (scheme_get_thread_local_variables()->scheme_code_page_total_)
|
#define scheme_code_page_total XOA (scheme_get_thread_local_variables()->scheme_code_page_total_)
|
||||||
|
#define max_gc_pre_used_bytes XOA (scheme_get_thread_local_variables()->max_gc_pre_used_bytes_)
|
||||||
#define locale_on XOA (scheme_get_thread_local_variables()->locale_on_)
|
#define locale_on XOA (scheme_get_thread_local_variables()->locale_on_)
|
||||||
#define current_locale_name_ptr XOA (scheme_get_thread_local_variables()->current_locale_name_ptr_)
|
#define current_locale_name_ptr XOA (scheme_get_thread_local_variables()->current_locale_name_ptr_)
|
||||||
#define gensym_counter XOA (scheme_get_thread_local_variables()->gensym_counter_)
|
#define gensym_counter XOA (scheme_get_thread_local_variables()->gensym_counter_)
|
||||||
|
|
|
@ -177,6 +177,8 @@ THREAD_LOCAL_DECL(static int thread_swap_count);
|
||||||
THREAD_LOCAL_DECL(int scheme_did_gc_count);
|
THREAD_LOCAL_DECL(int scheme_did_gc_count);
|
||||||
THREAD_LOCAL_DECL(static intptr_t process_time_at_swap);
|
THREAD_LOCAL_DECL(static intptr_t process_time_at_swap);
|
||||||
|
|
||||||
|
THREAD_LOCAL_DECL(static intptr_t max_gc_pre_used_bytes);
|
||||||
|
|
||||||
SHARED_OK static int init_load_on_demand = 1;
|
SHARED_OK static int init_load_on_demand = 1;
|
||||||
|
|
||||||
#ifdef RUNSTACK_IS_GLOBAL
|
#ifdef RUNSTACK_IS_GLOBAL
|
||||||
|
@ -448,6 +450,8 @@ static int post_system_idle();
|
||||||
|
|
||||||
static Scheme_Object *current_stats(int argc, Scheme_Object *args[]);
|
static Scheme_Object *current_stats(int argc, Scheme_Object *args[]);
|
||||||
|
|
||||||
|
static void log_peak_memory_use();
|
||||||
|
|
||||||
SHARED_OK static Scheme_Object **config_map;
|
SHARED_OK static Scheme_Object **config_map;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -1827,6 +1831,7 @@ void scheme_run_atexit_closers_on_all(Scheme_Exit_Closer_Func alt)
|
||||||
|
|
||||||
void do_run_atexit_closers_on_all()
|
void do_run_atexit_closers_on_all()
|
||||||
{
|
{
|
||||||
|
log_peak_memory_use();
|
||||||
scheme_run_atexit_closers_on_all(NULL);
|
scheme_run_atexit_closers_on_all(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9081,6 +9086,10 @@ static void inform_GC(int master_gc, int major_gc,
|
||||||
intptr_t post_child_places_used)
|
intptr_t post_child_places_used)
|
||||||
{
|
{
|
||||||
Scheme_Logger *logger;
|
Scheme_Logger *logger;
|
||||||
|
|
||||||
|
if (!master_gc && (pre_used > max_gc_pre_used_bytes))
|
||||||
|
max_gc_pre_used_bytes = pre_used;
|
||||||
|
|
||||||
logger = scheme_get_gc_logger();
|
logger = scheme_get_gc_logger();
|
||||||
if (logger && scheme_log_level_p(logger, SCHEME_LOG_DEBUG)) {
|
if (logger && scheme_log_level_p(logger, SCHEME_LOG_DEBUG)) {
|
||||||
/* Don't use scheme_log(), because it wants to allocate a buffer
|
/* Don't use scheme_log(), because it wants to allocate a buffer
|
||||||
|
@ -9147,6 +9156,28 @@ static void inform_GC(int master_gc, int major_gc,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void log_peak_memory_use()
|
||||||
|
{
|
||||||
|
Scheme_Logger *logger;
|
||||||
|
logger = scheme_get_gc_logger();
|
||||||
|
if (logger && scheme_log_level_p(logger, SCHEME_LOG_DEBUG)) {
|
||||||
|
char buf[256], nums[128], *num;
|
||||||
|
intptr_t buflen;
|
||||||
|
num = gc_num(nums, max_gc_pre_used_bytes);
|
||||||
|
sprintf(buf,
|
||||||
|
"" PLACE_ID_FORMAT "atexit peak was %sK",
|
||||||
|
#ifdef MZ_USE_PLACES
|
||||||
|
scheme_current_place_id,
|
||||||
|
#endif
|
||||||
|
num);
|
||||||
|
buflen = strlen(buf);
|
||||||
|
scheme_log_message(logger, SCHEME_LOG_DEBUG, buf, buflen, scheme_false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
static void log_peak_memory_use() {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user