Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp4976203iob; Mon, 9 May 2022 06:09:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw3l5jhAQyhC/DURNrgi+M0+wHaHohpXcQBciJPODr51sle+NFTuE4nMaC8NhBD4NVRRuvA X-Received: by 2002:a17:902:9a4c:b0:158:b6f0:4aa2 with SMTP id x12-20020a1709029a4c00b00158b6f04aa2mr16061283plv.163.1652101750252; Mon, 09 May 2022 06:09:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652101750; cv=none; d=google.com; s=arc-20160816; b=behqDUPt5THBH85Tn/4P//q3KZa9HzMUZa+5VCvOpP+j6PgUVFawV4dg+ks3dn5otv pPBEyByakZMTV/8oxyHg/Bz+sJvDZsVCvg35Y4FI017ZtXz2Ex3e6Sq3tRVUW5GVAVty DenAvenCw+4ZU/718maNM5KGrrMPV4Ih/Z+CTScNf7tQ87xhDQHpGrekwvA4FuO3v6iz GPpKkHDBj8OBCnCW6GngJJer0fe5OYheFaGRpqwIGiESR4qsBVT6eVSwHnZmb3D52uZ0 bYYQ+6pt+8tymi+xAxtGJDc70fc+xT2Rw0aeEB9ciu0DHGwHqJSzVBLP9+CGHauAP5JM K6gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=MbbINQT1Ncb1ZkKYya4HvR4itSgv8811QRxRP0F0+Zk=; b=gpvwN8cswN3ypQUoS48PE0XN2qHpZ1BEKivvzLwnGRh3lUEx2baKvW7FdGDnv9gO0O 18BhNDZLn3PHph3SjUP2ARTlAp7rMPnfbJ25ttSsngEWsGVmGDrxatA7x1SMHExQJHlT YRGI/yxX1sx2mdHtJM9bPkDPOx3c01KDqmnY+A77tBfvAlKBp13Pux75mmn7PHIwN734 /wy8ngsU78q1xtSMT2revrtVzWszM5oi0Kj5Jh5iP78qjI3FrjuutqGCemXlJ2wNJg5v DlWDw7obD7LNSTPchizXzElbz4rqTcL/2w6WKzmszODRpBZ4jxS4TjAZpWpbkki1cvNp n3pQ== ARC-Authentication-Results: i=1; mx.google.com; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id b124-20020a636782000000b003c177b5f338si6883299pgc.375.2022.05.09.06.09.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 May 2022 06:09:10 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 2E9E92532C4; Mon, 9 May 2022 06:08:31 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235146AbiEINMP (ORCPT + 99 others); Mon, 9 May 2022 09:12:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44774 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235080AbiEINMO (ORCPT ); Mon, 9 May 2022 09:12:14 -0400 Received: from outbound-smtp55.blacknight.com (outbound-smtp55.blacknight.com [46.22.136.239]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 776E923F3A1 for ; Mon, 9 May 2022 06:08:18 -0700 (PDT) Received: from mail.blacknight.com (pemlinmail06.blacknight.ie [81.17.255.152]) by outbound-smtp55.blacknight.com (Postfix) with ESMTPS id ED95DFA78E for ; Mon, 9 May 2022 14:08:16 +0100 (IST) Received: (qmail 17402 invoked from network); 9 May 2022 13:08:16 -0000 Received: from unknown (HELO morpheus.112glenside.lan) (mgorman@techsingularity.net@[84.203.198.246]) by 81.17.254.9 with ESMTPA; 9 May 2022 13:08:16 -0000 From: Mel Gorman To: Nicolas Saenz Julienne Cc: Marcelo Tosatti , Vlastimil Babka , Michal Hocko , LKML , Linux-MM , Mel Gorman Subject: [RFC PATCH 0/6] Drain remote per-cpu directly v2 Date: Mon, 9 May 2022 14:07:59 +0100 Message-Id: <20220509130805.20335-1-mgorman@techsingularity.net> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RDNS_NONE, SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no 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 Changelog since v1 o Fix unsafe RT locking scheme o Use spin_trylock on UP PREEMPT_RT This series has the same intent as Nicolas' series "mm/page_alloc: Remote per-cpu lists drain support" -- avoid interference of a high priority task due to a workqueue item draining per-cpu page lists. While many workloads can tolerate a brief interruption, it may be cause a real-time task runnning on a NOHZ_FULL CPU to miss a deadline and at minimum, the draining in non-deterministic. Currently an IRQ-safe local_lock protects the page allocator per-cpu lists. The local_lock on its own prevents migration and the IRQ disabling protects from corruption due to an interrupt arriving while a page allocation is in progress. The locking is inherently unsafe for remote access unless the CPU is hot-removed. This series adjusts the locking. A spinlock is added to struct per_cpu_pages to protect the list contents while local_lock_irq continues to prevent migration and IRQ reentry. This allows a remote CPU to safely drain a remote per-cpu list. This series is a partial series. Follow-on work should allow the local_irq_save to be converted to a local_irq to avoid IRQs being disabled/enabled in most cases. Consequently, there are some TODO comments highlighting the places that would change if local_irq was used. However, there are enough corner cases that it deserves a series on its own separated by one kernel release and the priority right now is to avoid interference of high priority tasks. Patch 1 is a cosmetic patch to clarify when page->lru is storing buddy pages and when it is storing per-cpu pages. Patch 2 shrinks per_cpu_pages to make room for a spin lock. Strictly speaking this is not necessary but it avoids per_cpu_pages consuming another cache line. Patch 3 is a preparation patch to avoid code duplication. Patch 4 is a simple micro-optimisation that improves code flow necessary for a later patch to avoid code duplication. Patch 5 uses a spin_lock to protect the per_cpu_pages contents while still relying on local_lock to prevent migration, stabilise the pcp lookup and prevent IRQ reentrancy. Patch 6 remote drains per-cpu pages directly instead of using a workqueue. include/linux/mm_types.h | 5 + include/linux/mmzone.h | 12 +- mm/page_alloc.c | 342 +++++++++++++++++++++++++-------------- 3 files changed, 230 insertions(+), 129 deletions(-) -- 2.34.1