On 06/12/2017 10:26, Yang Zhong wrote: > Hello Paolo, > > The best option is only trim one time after guest kernel bootup or VM > bootup, and as for > hotplug/unhotplug operations during the VM running, the trim still can do > for each batch > memory free because trim will not impact VM performance during VM running > status. > > So, the key point is qemu is hard to know when guest ernel bootup is over. > If you have some > suggestions, please let me know. thanks!
It shouldn't be hard. Does QEMU's RCU thread actually get any significant activity after bootup? Hence the suggestion of keeping malloc_trim in the RCU thread, but only do it if some time has passed since the last time. Maybe something like this every time the RCU thread runs: static uint64_t next_trim_time, last_trim_time; if (current time < next_trim_time) { next_trim_time -= last_trim_time / 2 /* or higher */ last_trim_time -= last_trim_time / 2 /* same as previous line */ } else { trim_start_time = current time malloc_trim(...) last_trim_time = current time - trim_start_time next_trim_time = current time + last_trim_time } Where the "2" factor should be tuned so that both your and Shannon's scenario work fine. Thanks, Paolo