When the host page is a huge page and something is sent in the current iteration, migration_rate_limit() should be executed. If not, it can be omitted.
Signed-off-by: Keqian Zhu <zhukeqi...@huawei.com> Signed-off-by: Kunkun Jiang <jiangkun...@huawei.com> Reviewed-by: David Edmondson <david.edmond...@oracle.com> --- migration/ram.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 72143da0ac..3eb5b0d7a7 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -2015,8 +2015,13 @@ static int ram_save_host_page(RAMState *rs, PageSearchStatus *pss, pages += tmppages; pss->page++; - /* Allow rate limiting to happen in the middle of huge pages */ - migration_rate_limit(); + /* + * Allow rate limiting to happen in the middle of huge pages if + * something is sent in the current iteration. + */ + if (pagesize_bits > 1 && tmppages > 0) { + migration_rate_limit(); + } } while ((pss->page & (pagesize_bits - 1)) && offset_in_ramblock(pss->block, ((ram_addr_t)pss->page) << TARGET_PAGE_BITS)); -- 2.23.0