From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 67C6FC48BD1 for ; Fri, 11 Jun 2021 13:16:49 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 88E0B613AE for ; Fri, 11 Jun 2021 13:16:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 88E0B613AE Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chinatelecom.cn Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:40400 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lrh1i-00040q-AA for qemu-devel@archiver.kernel.org; Fri, 11 Jun 2021 09:16:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41942) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lrh0x-0003IS-5t for qemu-devel@nongnu.org; Fri, 11 Jun 2021 09:15:59 -0400 Received: from prt-mail.chinatelecom.cn ([42.123.76.227]:55951 helo=chinatelecom.cn) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lrh0i-0004G3-E0 for qemu-devel@nongnu.org; Fri, 11 Jun 2021 09:15:51 -0400 HMM_SOURCE_IP: 172.18.0.218:59066.2002918236 HMM_ATTACHE_NUM: 0000 HMM_SOURCE_TYPE: SMTP Received: from clientip-124.205.116.130?logid-38667851938248da99447304c520a18a (unknown [172.18.0.218]) by chinatelecom.cn (HERMES) with SMTP id 394BB280096; Fri, 11 Jun 2021 21:15:34 +0800 (CST) X-189-SAVE-TO-SEND: huangy81@chinatelecom.cn Received: from ([172.18.0.218]) by app0025 with ESMTP id 38667851938248da99447304c520a18a for zhengchuan@huawei.com; Fri Jun 11 21:15:35 2021 X-Transaction-ID: 38667851938248da99447304c520a18a X-filter-score: filter<0> X-Real-From: huangy81@chinatelecom.cn X-Receive-IP: 172.18.0.218 X-MEDUSA-Status: 0 Subject: Re: [PATCH v3 7/7] migration/dirtyrate: implement dirty-ring dirtyrate calculation To: Peter Xu References: From: Hyman Huang Message-ID: <13fb0dec-a16c-1bfa-4cbe-c92063f85049@chinatelecom.cn> Date: Fri, 11 Jun 2021 21:15:29 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=42.123.76.227; envelope-from=huangy81@chinatelecom.cn; helo=chinatelecom.cn X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, NICE_REPLY_A=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Eduardo Habkost , Juan Quintela , qemu-devel@nongnu.org, "Dr. David Alan Gilbert" , Chuan Zheng , Paolo Bonzini Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" 在 2021/6/10 2:17, Peter Xu 写道: > On Mon, Jun 07, 2021 at 09:15:20AM +0800, huangy81@chinatelecom.cn wrote: >> +static void calculate_dirtyrate_vcpu(struct DirtyRateConfig config) >> +{ >> + CPUState *cpu; >> + int64_t msec = 0; >> + int64_t start_time; >> + uint64_t dirtyrate = 0; >> + uint64_t dirtyrate_sum = 0; >> + int nvcpu = 0; >> + int i = 0; >> + >> + CPU_FOREACH(cpu) { >> + nvcpu++; >> + } >> + >> + dirty_pages = g_malloc0(sizeof(*dirty_pages) * nvcpu); >> + >> + dirtyrate_global_dirty_log_start(); >> + >> + CPU_FOREACH(cpu) { >> + record_dirtypages(cpu, true); >> + } >> + >> + DirtyStat.method.vcpu.nvcpu = nvcpu; >> + if (last_method != CALC_DIRTY_RING) { >> + DirtyStat.method.vcpu.rates = >> + g_malloc0(sizeof(DirtyRateVcpu) * nvcpu); >> + } >> + >> + start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); >> + DirtyStat.start_time = start_time / 1000; >> + >> + msec = config.sample_period_seconds * 1000; >> + msec = set_sample_page_period(msec, start_time); >> + DirtyStat.calc_time = msec / 1000; >> + >> + CPU_FOREACH(cpu) { >> + record_dirtypages(cpu, false); >> + } >> + >> + dirtyrate_global_dirty_log_stop(); >> + >> + for (i = 0; i < DirtyStat.method.vcpu.nvcpu; i++) { >> + dirtyrate = do_calculate_dirtyrate_vcpu(i); >> + DirtyStat.method.vcpu.rates[i].id = i; >> + DirtyStat.method.vcpu.rates[i].dirty_rate = dirtyrate; >> + dirtyrate_sum += dirtyrate; >> + } >> + >> + DirtyStat.dirty_rate = dirtyrate_sum / DirtyStat.method.vcpu.nvcpu; > > Why you'd like to divide with nvcpu? Isn't dirtyrate_sum exactly what we want? > As I don't think we care about average per-vcpu dirty rate, but total here. > the initial idea of mine is that the qmp output dirty rate represent the average dirty rate, my mistake.indeed, the vm dirty rate should not be the average of vcpu's, i'll fix it the next version. >> + g_free(dirty_pages); >> +} > > I did a run with 4G mem VM, alloc 1G and dirty it with 500MB/s, then > > - With old way: I got 95MB/s > - With new way: I got 128MB/s > > The new way has the output with: > > Dirty rate: 128 (MB/s) > vcpu[0], Dirty rate: 0 > vcpu[1], Dirty rate: 1 > vcpu[2], Dirty rate: 0 > vcpu[3], Dirty rate: 511 > > I think if without the division, it'll be 512MB/s, which is matching the dirty > workload I initiated. > -- Best regard Hyman Huang(黄勇)