|
From: | Hyman Huang |
Subject: | Re: [PATCH v11 3/4] softmmu/dirtylimit: implement virtual CPU throttle |
Date: | Sat, 22 Jan 2022 11:54:07 +0800 |
User-agent: | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 |
Ok, i remove the dirtylimit_thread and implemtment throttle in bottom half instead, indeed, it become more accurate. Anyway, how do you think of it?+static void *dirtylimit_thread(void *opaque) +{ + CPUState *cpu; + + rcu_register_thread(); + + while (!qatomic_read(&dirtylimit_quit)) { + sleep(DIRTYLIMIT_CALC_TIME_MS / 1000);Sorry to have not mentioned this: I think we probably don't even need this dirtylimit thread. It'll be hard to make the "sleep" right here.. you could read two identical values from the dirty calc thread because the 1sec sleep is not accurate, so even after this sleep() the calc thread may not have provided the latest number yet. It'll be much cleaner (and most importantly, accurate..) to me if we could make this a hook function being passed over to the vcpu_dirty_rate_stat_thread() thread, then after each vcpu_dirty_rate_stat_collect() we call the hook.
+ + dirtylimit_state_lock(); + + if (!dirtylimit_in_service()) { + dirtylimit_state_unlock(); + break; + } + + CPU_FOREACH(cpu) { + if (!dirtylimit_vcpu_get_state(cpu->cpu_index)->enabled) { + continue; + } + dirtylimit_adjust_throttle(cpu); + } + dirtylimit_state_unlock(); + } + + rcu_unregister_thread(); + + return NULL; +} +
-- Best regard Hyman Huang(黄勇)
[Prev in Thread] | Current Thread | [Next in Thread] |