Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp2646123rwd; Fri, 2 Jun 2023 12:24:50 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6b3aVIrD70oT4R9Zn9HHzkU+cvQSRi592pGwWjbs1iZ43+Vp/zd9KKLhqvabluCZBwoZKG X-Received: by 2002:a17:903:2343:b0:1b1:93f9:4305 with SMTP id c3-20020a170903234300b001b193f94305mr897355plh.60.1685733890613; Fri, 02 Jun 2023 12:24:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685733890; cv=none; d=google.com; s=arc-20160816; b=Ox+ch0yRlkB1B0d175T6IYNZr3ubfJPYsqjjOG2bvAD+XslHyoZdaV4hPKl/ZHrzMb KdaFbnqpAEmqXzUHAhn+hquhLZwoEgKsEaU+tzOUfksZ3TzQLCkdud0MYKOIng9ENASh T53fzaUso529sAG7WMaRIbGbG6OQKG2isDISCtIm5eK6580edicNw4D5MgDYRrEbrlvm 8Nx/aCstvnyQ4UdxjwV4zwQmD7cDt+yYRiSOws345komhoqm55FktS2Af1IWT5wiC3R5 9FljtfgBTN16gyzRGlEOH6A0d80u2Kh15TOF62D52J3R6NE7okE+yPeDlgduYa6IsGgw D9eg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id:dkim-signature; bh=QJoQ4NIFYgqvZuzmyQS3JO7Z0w/EGIPt/606uSPKQ0E=; b=edxz/aqQ/59RmhB75XiiF4G5ljdlsFq8Y2AgFhYiVCHqlIDDIwMBrAzlE2hNqWmkal +t7T617j9pd4ISjLAjuCCBMUXHWsrwFJ23Cbmf+dY9Tf7bQUOcGZHDf9Rhj55vGRDHRr ttc61Rue4X0g/aRlIQtAWFf33UI65s+56pfOK0t6WVxR1nk7UqIJ6dfHOALbM9a2Lq06 xCxYfMvGGTE1fGxuMq4NgllhbDRC3Rm2Fmdi/dZF9Jk/0+NRHRCHgeH9VKWqM8poZEPh tSW8giFBP5U4T2OK89GiFf5v1970fmD/cwIyHJz17JHet7hsh0D2O3O6h+0i4WFmQL/Z RwTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Ods2WV5H; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v9-20020a170902b7c900b001b0450241d1si1291816plz.283.2023.06.02.12.24.35; Fri, 02 Jun 2023 12:24:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Ods2WV5H; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237119AbjFBTFD (ORCPT + 99 others); Fri, 2 Jun 2023 15:05:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237121AbjFBTFA (ORCPT ); Fri, 2 Jun 2023 15:05:00 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B8A121B5 for ; Fri, 2 Jun 2023 12:04:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1685732655; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=QJoQ4NIFYgqvZuzmyQS3JO7Z0w/EGIPt/606uSPKQ0E=; b=Ods2WV5Ha0G3gUcvNOhEpTp2ivI6GXJayzevmgWD58kYDObLEf4dsqlzXvXYXG4yFb7Muw cjjyYUP7GSEnTXE13DFI59rHjFJMiFpp9pFivV2b8O3BfpZaSMQsBua44NDiNaE5t2Owrh TLHbsrOJUjiTDMhvBQWyLi352aukFOc= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-304-peNUCNUlOFqfgKiEXAwsmw-1; Fri, 02 Jun 2023 15:04:09 -0400 X-MC-Unique: peNUCNUlOFqfgKiEXAwsmw-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6EB4B3800EAB; Fri, 2 Jun 2023 19:04:06 +0000 (UTC) Received: from tpad.localdomain (ovpn-112-2.gru2.redhat.com [10.97.112.2]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3859D492B00; Fri, 2 Jun 2023 19:04:06 +0000 (UTC) Received: by tpad.localdomain (Postfix, from userid 1000) id 1437B403BF03A; Fri, 2 Jun 2023 16:03:42 -0300 (-03) Message-ID: <20230602190115.521067386@redhat.com> User-Agent: quilt/0.67 Date: Fri, 02 Jun 2023 15:57:59 -0300 From: Marcelo Tosatti To: Christoph Lameter Cc: Aaron Tomlin , Frederic Weisbecker , Andrew Morton , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Vlastimil Babka , Michal Hocko , Marcelo Tosatti Subject: [PATCH v2 2/3] vmstat: skip periodic vmstat update for nohz full CPUs References: <20230602185757.110910188@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The interruption caused by vmstat_update is undesirable for certain aplications: oslat 1094.456862: sys_mlock(start: 7f7ed0000b60, len: 1000) oslat 1094.456971: workqueue_queue_work: ... function=vmstat_update ... oslat 1094.456974: sched_switch: prev_comm=oslat ... ==> next_comm=kworker/5:1 ... kworker 1094.456978: sched_switch: prev_comm=kworker/5:1 ==> next_comm=oslat ... The example above shows an additional 7us for the oslat -> kworker -> oslat switches. In the case of a virtualized CPU, and the vmstat_update interruption in the host (of a qemu-kvm vcpu), the latency penalty observed in the guest is higher than 50us, violating the acceptable latency threshold. Skip periodic updates for nohz full CPUs. Any callers who need precise values should use a snapshot of the per-CPU counters, or use the global counters with measures to handle errors up to thresholds (see calculate_normal_threshold). Suggested by Michal Hocko. Signed-off-by: Marcelo Tosatti --- v2: use cpu_is_isolated (Michal Hocko) Index: linux-vmstat-remote/mm/vmstat.c =================================================================== --- linux-vmstat-remote.orig/mm/vmstat.c +++ linux-vmstat-remote/mm/vmstat.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "internal.h" @@ -2022,6 +2023,16 @@ static void vmstat_shepherd(struct work_ for_each_online_cpu(cpu) { struct delayed_work *dw = &per_cpu(vmstat_work, cpu); + /* + * Skip periodic updates for isolated CPUs. + * Any callers who need precise values should use + * a snapshot of the per-CPU counters, or use the global + * counters with measures to handle errors up to + * thresholds (see calculate_normal_threshold). + */ + if (cpu_is_isolated(cpu)) + continue; + if (!delayed_work_pending(dw) && need_update(cpu)) queue_delayed_work_on(cpu, mm_percpu_wq, dw, 0);