All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] qobject/json-writer: preallocate output buffer
@ 2026-05-29  2:34 Bin Guo
  2026-05-29  6:13 ` Philippe Mathieu-Daudé
  2026-06-02  8:34 ` Markus Armbruster
  0 siblings, 2 replies; 5+ messages in thread
From: Bin Guo @ 2026-05-29  2:34 UTC (permalink / raw)
  To: qemu-devel; +Cc: armbru

json_writer_new() creates the output GString with g_string_new(NULL),
which starts at the GLib default of 64 bytes.  Serializing typical
QMP responses then requires multiple reallocations as the buffer
grows -- for query-qmp-schema the GString is reallocated 12+ times.

Preallocate JSON_WRITER_INITIAL_SIZE (4096) bytes.  This covers
most QMP responses without any reallocation.  4096 is one page on
most systems, which is efficient for the allocator.  The JSONWriter
is a short-lived object so the preallocation does not accumulate.

Signed-off-by: Bin Guo <guobin@linux.alibaba.com>
---
 qobject/json-writer.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/qobject/json-writer.c b/qobject/json-writer.c
index aac2c6ab71..fb3f3f3e3c 100644
--- a/qobject/json-writer.c
+++ b/qobject/json-writer.c
@@ -24,13 +24,16 @@ struct JSONWriter {
     GByteArray *container_is_array;
 };
 
+/* Covers most QMP responses without reallocation (one page) */
+#define JSON_WRITER_INITIAL_SIZE  4096
+
 JSONWriter *json_writer_new(bool pretty)
 {
     JSONWriter *writer = g_new(JSONWriter, 1);
 
     writer->pretty = pretty;
     writer->need_comma = false;
-    writer->contents = g_string_new(NULL);
+    writer->contents = g_string_sized_new(JSON_WRITER_INITIAL_SIZE);
     writer->container_is_array = g_byte_array_new();
     return writer;
 }
-- 
2.50.1 (Apple Git-155)



^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-06-03 10:25 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-29  2:34 [PATCH] qobject/json-writer: preallocate output buffer Bin Guo
2026-05-29  6:13 ` Philippe Mathieu-Daudé
2026-06-02  8:34 ` Markus Armbruster
2026-06-03  9:52   ` Daniel P. Berrangé
2026-06-03 10:24     ` Markus Armbruster

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.