mwrap user+dev discussion/patches/pulls/bugs/help
 help / color / mirror / code / Atom feed
* [PATCH] httpd: show GC count
@ 2023-01-08 23:43 Eric Wong
  0 siblings, 0 replies; only message in thread
From: Eric Wong @ 2023-01-08 23:43 UTC (permalink / raw)
  To: mwrap-public

We can't call rb_gc_count() safely outside of Ruby threads
(especially during startup/teardown), but we can share it's
last-known value safely.
---
 ext/mwrap/httpd.h      | 3 +++
 ext/mwrap/mwrap_core.h | 5 ++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/ext/mwrap/httpd.h b/ext/mwrap/httpd.h
index 03aef9f..0ef6cd9 100644
--- a/ext/mwrap/httpd.h
+++ b/ext/mwrap/httpd.h
@@ -548,6 +548,9 @@ static void show_stats(FILE *fp)
 		"/ files: %zu / locations: %zu",
 		inc , inc - dec,
 		uatomic_read(&nr_file), uatomic_read(&nr_src_loc));
+#if MWRAP_RUBY
+	fprintf(fp, " / GC: %zu", uatomic_read(&last_gc_count));
+#endif
 }
 
 /* /$PID/at/$LOCATION endpoint */
diff --git a/ext/mwrap/mwrap_core.h b/ext/mwrap/mwrap_core.h
index 48669d5..827ee7b 100644
--- a/ext/mwrap/mwrap_core.h
+++ b/ext/mwrap/mwrap_core.h
@@ -85,6 +85,7 @@ static size_t *root_locating; /* determines if PL_curcop is our thread */
 #if MWRAP_RUBY
 static void mw_ruby_set_generation(size_t *, size_t);
 #	define SET_GENERATION(gen, size) mw_ruby_set_generation(gen, size)
+static size_t last_gc_count; /* for httpd which runs in a non-GVL thread */
 #endif /* MWRAP_RUBY */
 
 #ifndef SET_GENERATION /* C-only builds w/o Perl|Ruby */
@@ -1074,8 +1075,10 @@ static void mw_ruby_set_generation(size_t *gen, size_t size)
 {
 	if (rb_gc_count) {
 		uatomic_add_return(&total_bytes_inc, size);
-		if (has_ec_p())
+		if (has_ec_p()) {
 			*gen = rb_gc_count();
+			uatomic_set(&last_gc_count, *gen);
+		}
 	} else {
 		*gen = uatomic_add_return(&total_bytes_inc, size);
 	}

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2023-01-08 23:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-08 23:43 [PATCH] httpd: show GC count Eric Wong

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mwrap.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).