* [PATCH v2] qobject/json-writer: preallocate output buffer
@ 2026-06-03 2:25 Bin Guo
2026-06-03 7:24 ` Markus Armbruster
0 siblings, 1 reply; 2+ messages in thread
From: Bin Guo @ 2026-06-03 2:25 UTC (permalink / raw)
To: qemu-devel; +Cc: armbru, philmd
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. The JSONWriter is a
short-lived object so the preallocation does not accumulate.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Bin Guo <guobin@linux.alibaba.com>
---
v1->v2: drop "one page" argument from commit message and comment
(per Markus Armbruster's review)
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..c23c81709b 100644
--- a/qobject/json-writer.c
+++ b/qobject/json-writer.c
@@ -24,13 +24,16 @@ struct JSONWriter {
GByteArray *container_is_array;
};
+/* Should cover most QMP responses without reallocation */
+#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] 2+ messages in thread
* Re: [PATCH v2] qobject/json-writer: preallocate output buffer
2026-06-03 2:25 [PATCH v2] qobject/json-writer: preallocate output buffer Bin Guo
@ 2026-06-03 7:24 ` Markus Armbruster
0 siblings, 0 replies; 2+ messages in thread
From: Markus Armbruster @ 2026-06-03 7:24 UTC (permalink / raw)
To: Bin Guo; +Cc: qemu-devel, philmd, Paolo Bonzini
Bin Guo <guobin@linux.alibaba.com> writes:
> 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. The JSONWriter is a
> short-lived object so the preallocation does not accumulate.
>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Reviewed-by: Markus Armbruster <armbru@redhat.com>
> Signed-off-by: Bin Guo <guobin@linux.alibaba.com>
Thanks!
Paolo, perhaps you can merge this together with your JSON parser
patches.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-06-03 7:25 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-03 2:25 [PATCH v2] qobject/json-writer: preallocate output buffer Bin Guo
2026-06-03 7: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.