On 3/27/2026 12:49 AM, Markus Armbruster wrote:
JAEHOON KIM <[email protected]> writes:
On 3/25/2026 9:04 AM, Markus Armbruster wrote:
Jaehoon Kim <[email protected]> writes:
Introduce a configurable poll-weight parameter for adaptive polling
in IOThread. This parameter replaces the hardcoded POLL_WEIGHT_SHIFT
constant, allowing runtime control over how much the most recent
event interval affects the next polling duration calculation.
The poll-weight parameter uses a shift value where larger values
decrease the weight of the current interval, enabling more gradual
adjustments. When set to 0, a default value of 3 is used (meaning
the current interval contributes approximately 1/8 to the weighted
average).
This patch also removes the hardcoded default values for poll-grow
and poll-shrink parameters from the grow_polling_time() and
shrink_polling_time() functions, as these defaults are now properly
initialized in iothread.c during IOThread creation.
Signed-off-by: Jaehoon Kim <[email protected]>
[...]
diff --git a/qapi/qom.json b/qapi/qom.json
index c653248f85..feb80b6cfe 100644
--- a/qapi/qom.json
+++ b/qapi/qom.json
@@ -606,6 +606,11 @@
# algorithm detects it is spending too long polling without
# encountering events. 0 selects a default behaviour (default: 0)
#
+# @poll-weight: the weight factor for adaptive polling.
+# Determines how much the current event interval contributes to
+# the next polling time calculation. Valid values are 1 or
+# greater. If set to 0, the default value of 3 is used.
The commit message hints what the valid values mean, the doc comment
doesn't even that. Do users need to know?
Code [*] below uses it like time >> poll_weight, where @time is int64_t.
poll_weight > 63 is undefined behavior, which is a no-no. Please reject
such values. poll_weight == 64 results in zero. Is that useful?
Missing: (default: 0) (since 11.1)
I agree. I will update the doc comment to give users a practical hint,
for example like this:
# @poll-weight: the weight factor for adaptive polling.
# Determines how much the most recent event interval affects
# the next polling duration calculation.
# If set to 0, the system default value of 3 is used.
# Typical values: 1 (high weight on recent interval),
# 2-4 (moderate weight on recent interval).
# (default: 0) (since 11.1)
Better, thanks!
I will also a check in the code so that values exceeding the maximum
allowed will revert to the system default.
Don't silently "correct" invalid input, reject it!
[...]
Hi Markus,
Thank you for the review.
I will change the code to reject invalid values instead of silently correct
them in the next version.
Regards,
Jaehoon.