From patchwork Wed Mar 26 18:50:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 14030489 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D81C1C36008 for ; Wed, 26 Mar 2025 18:51:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0FE8E28009F; Wed, 26 Mar 2025 14:51:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 085B228008D; Wed, 26 Mar 2025 14:51:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E424D28009F; Wed, 26 Mar 2025 14:51:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id C43B328008D for ; Wed, 26 Mar 2025 14:51:08 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 8EAFA1CC8EF for ; Wed, 26 Mar 2025 18:51:09 +0000 (UTC) X-FDA: 83264594658.29.F149D06 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf06.hostedemail.com (Postfix) with ESMTP id 1D9CF180017 for ; Wed, 26 Mar 2025 18:51:06 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=TOBgnsZW; spf=none (imf06.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743015067; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=EswWmpH0jdfJkjx/smz0IWtj6k3xpAbWXDFWCIq3/Gg=; b=XK8QqDD5ZwPOU23f9L6wOuPTeSJ707mwTkvzeYhQm6HoncyC0zPInUzC7NCjWQFXvBD26s JCO9UXU/LIaZLlu/f/a7yTlgyliP4ACRtprBz+rjchNNW4l+FBoH2WTPAM9MS7nK1QrsMh v5g78ziBdcpJCfhAt6pHPZ9re7lK8Yo= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=TOBgnsZW; spf=none (imf06.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743015067; a=rsa-sha256; cv=none; b=sMTPl2UGCXEVEB3ylsIXoxpIvOaF5kZrzCa95hp7KLOoCFfDanNsFfKYxvOLsD9MmUZ6BG 4TFURW18EEqg3HW2EgBSHGdHHHi/nQ0/E9EoYwmEq4N/MxGAKXQlDGngC+YXUo6PEeik+D x1txLzc8NmvNCP+CoQKBQfhw2iGfG+A= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: Content-Type:MIME-Version:Message-ID:Date:Subject:Cc:To:From:Reply-To: Content-ID:Content-Description:In-Reply-To:References; bh=EswWmpH0jdfJkjx/smz0IWtj6k3xpAbWXDFWCIq3/Gg=; b=TOBgnsZWngiPWkGP2A/P6PFSAV +3FwAaUROryqiOu0PfRDntjMVa6xc4IrMYNiHVnUrsPG0hLVfTD7nKG8TMpCfn28VblSkvYIT4XJI 6EnZDerlzJs7NBPzqnFpuKDLiiRXEjlesv0gx48NJlzzfLQguRByX+Q6Gt1Jg1nRf6q5uona+f31M 5+HFbZKkjrUAthOJHQ0S91cQY1jwLxJAujFB69R+ptvPAvN46B3kClH2RVOzosnl0hqx6YJV+nQGX ZAOZt9zT8dXd32D1q6iBSHjMimi3Wj/Mmb+tgVkC2Y1QwlXBk2eHdQYkeenD3qtThfu0fgP1CXvk7 aEO/DiEA==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.98.1 #2 (Red Hat Linux)) id 1txVqB-00000009O28-1Nuk; Wed, 26 Mar 2025 18:51:03 +0000 From: Luis Chamberlain To: patches@lists.linux.dev, fstests@vger.kernel.org, linux-mm@kvack.org Cc: linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, oliver.sang@intel.com, hannes@cmpxchg.org, willy@infradead.org, jack@suse.cz, apopple@nvidia.com, brauner@kernel.org, hare@suse.de, oe-lkp@lists.linux.dev, lkp@intel.com, john.g.garry@oracle.com, p.raghav@samsung.com, da.gomez@samsung.com, dave@stgolabs.net, riel@surriel.com, krisman@suse.de, boris@bur.io, jackmanb@google.com, gost.dev@samsung.com, mcgrof@kernel.org Subject: [PATCH] generic/764: fsstress + migrate_pages() test Date: Wed, 26 Mar 2025 11:50:55 -0700 Message-ID: <20250326185101.2237319-1-mcgrof@kernel.org> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspamd-Queue-Id: 1D9CF180017 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: 9tmuuuyqdzntts5rrm8ew5b8oeorxep3 X-Rspam: Yes X-HE-Tag: 1743015066-217161 X-HE-Meta: U2FsdGVkX1+VAhWa4lrf/P9B7xCTsBUsEGrohfFsssbwHRFe9TLNIY1e77YRI5NLqhVeON2Jyl67Br8u+LWqnJimsi2PW7RiWL+4iR9SHMZFE+uKqRYoCCD6atN8xzcNZBn7h8fe/c9U4fgOCcGiHwzssSVRHZBBrr2ae/y0A3ci53V0Pt2monp9GGRkqvu8oWMOAhUifW73ZJnxhJjFVIUMi3ndqHqGB+wHSsTIs+mdmRSQun4djhQRf5jxzcGp4JXpEmUnKsqMiUU2HTV2mjy9gv1tN/CclPlbBIH3YUpQlRGndLpzcrK7uMna6vLlWPlysjeDAxgY25o09/82hykKk+DmpOPeFRSiQvntMgZrG8G8SLbCjuB6sH5MvY8Eq+f0UPtdMCTCYoIij19c2Ye8YY8ls6DgAlfkkJu8iWaqk4XwsyKhgvc34OE0IJKJOrBjBOXoDIUy73t4I2BByawnCnCEVEsJYbICuDfoun7ffuP8egvkmjVd6QrcrejfXPAEslvVs+7lMAPOUIjC9vopus/Qy2L7UfSw5KF9yTDF9DqUoBQSxN8vE6GcfJd03fMSihGrzKc1VQ+k4F8CKzOyebOfHimCJeBUJVY8I6Q5duzYxZsBAynUd0a0HcEQiWdrWMMuSqQg9fhvAPiRwMoxXNzUB1PVdKP/qeOlaRlinpPATHvyuUL11DPwF2hJyDvHeJNCV1wdMsVtGTyWKskPmrJy29Jxsq+0YJPAJiUvIFjjABcWbTeSYsVgnd3w4akyAP519MFOObKcFrqabFoKA6rmM8tBFDA8GYFdnSTXsmmwNjUzuvYxxc11vzF0hXS+VzusMyxljQ3AfvM+5MPfJYsVjegH1dAsPanNEnPpWk/6Sd5SwH+CPa9/Sim7JelGjOLXTaSlw/TLJVTiREuKir5JUDkALjAxoQXdG09cQlZ41BOtOTkAmTFPBSpt0WteyNQy1RhQmzNk2A/ pDtVxoPc ZArBCzwZ+JxGDm0kG5BRkeWVN3L7+YrKTcmXGiw0d+ggbp5OBqJj9cFhfE9Wfl5Z6t6bWu2xgxw0ogKiHi10Xj3Vi83TG9Sq0OvU254FoSC6wEwh1bZYKT5JaKJeK+g3GB5yCw//KB+uFy3M0CUcLIq/JILBFQyLqpYQTmm41/+LpUM3/LT4JsBg4DkrMFO/HINyta77eLayCVLykhV2td6hrtPcaWXlk7hCtLrK/g/NZUkFbo3BdqFO/zShDf3NA1wsWnWnoQlvB/YNvh+S4ilHXOdqDnGMAwDgLbHCgKAa9YvM3Pza1agN6KpIJFyjyB4xASy2XmKluyoODg34qFwy0ItLb5x+Xz9X/3V18dhHjTP6g2lMp/F03H2nZ/oQXjgwufLAWpUPn/CKgjWiQMzXhuzXjAd2LCLdSXZe6eTFaSNMlYhwvUlg7E98ehu08Cjkrecnsi1AeEnRTuHKPdi9PhCytGl3XZzpf35vey6Csb/GOeg4VMV+me5t2OuVe7P3nZOiBMkzL6WrgTKlDd3C24uKZZc2uaNSfD4iYQL/cNzjK8b5zrnKxUA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000089, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 0-day reported a page migration kernel warning with folios which happen to be buffer-heads [0]. I'm having a terribly hard time reproducing the bug and so I wrote this test to force page migration filesystems. It turns out we have have no tests for page migration on fstests or ltp, and its no surprise, other than compaction covered by generic/750 there is no easy way to trigger page migration right now unless you have a numa system. We should evaluate if we want to help stress test page migration artificially by later implementing a way to do page migration on simple systems to an artificial target. So far, this doesn't trigger any kernel splats, not even warnings for me. Reported-by: kernel test robot Link: https://lore.kernel.org/r/202503101536.27099c77-lkp@intel.com # [0] Signed-off-by: Luis Chamberlain --- common/config | 2 + common/rc | 8 ++++ tests/generic/764 | 94 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/764.out | 2 + 4 files changed, 106 insertions(+) create mode 100755 tests/generic/764 create mode 100644 tests/generic/764.out diff --git a/common/config b/common/config index 2afbda141746..93b50f113b44 100644 --- a/common/config +++ b/common/config @@ -239,6 +239,8 @@ export BTRFS_MAP_LOGICAL_PROG=$(type -P btrfs-map-logical) export PARTED_PROG="$(type -P parted)" export XFS_PROPERTY_PROG="$(type -P xfs_property)" export FSCRYPTCTL_PROG="$(type -P fscryptctl)" +export NUMACTL_PROG="$(type -P numactl)" +export MIGRATEPAGES_PROG="$(type -P migratepages)" # udev wait functions. # diff --git a/common/rc b/common/rc index e51686389a78..ed9613a9bf28 100644 --- a/common/rc +++ b/common/rc @@ -281,6 +281,14 @@ _require_vm_compaction() fi } +_require_numa_nodes() +{ + readarray -t QUEUE < <($NUMACTL_PROG --show | awk '/^membind:/ {for (i=2; i<=NF; i++) print $i}') + if (( ${#QUEUE[@]} < 2 )); then + _notrun "You need a system with at least two numa nodes to run this test" + fi +} + # Requires CONFIG_DEBUGFS and truncation knobs _require_split_huge_pages_knob() { diff --git a/tests/generic/764 b/tests/generic/764 new file mode 100755 index 000000000000..91d9fb7e08da --- /dev/null +++ b/tests/generic/764 @@ -0,0 +1,94 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2024 Luis Chamberlain. All Rights Reserved. +# +# FS QA Test 764 +# +# fsstress + migrate_pages() test +# +. ./common/preamble +_begin_fstest auto rw long_rw stress soak smoketest + +_cleanup() +{ + cd / + rm -f $runfile + rm -f $tmp.* + kill -9 $run_migration_pid > /dev/null 2>&1 + kill -9 $stress_pid > /dev/null 2>&1 + + wait > /dev/null 2>&1 +} + +_require_scratch +_require_command "$NUMACTL_PROG" "numactl" +_require_command "$MIGRATEPAGES_PROG" "migratepages" +_require_numa_nodes + +readarray -t QUEUE < <($NUMACTL_PROG --show | awk '/^membind:/ {for (i=2; i<=NF; i++) print $i}') +if (( ${#QUEUE[@]} < 2 )); then + echo "Not enough NUMA nodes to pick two different ones." + exit 1 +fi + +echo "Silence is golden" + +_scratch_mkfs > $seqres.full 2>&1 +_scratch_mount >> $seqres.full 2>&1 + +nr_cpus=$((LOAD_FACTOR * 4)) +nr_ops=$((25000 * nr_cpus * TIME_FACTOR)) +fsstress_args=(-w -d $SCRATCH_MNT -n $nr_ops -p $nr_cpus) +test -n "$SOAK_DURATION" && fsstress_args+=(--duration="$SOAK_DURATION") + +runfile="$tmp.migratepages" +pidfile="$tmp.stress.pid" + +run_stress_fs() +{ + $FSSTRESS_PROG $FSSTRESS_AVOID "${fsstress_args[@]}" & + stress_pid=$! + echo $stress_pid > $pidfile + wait $stress_pid + rm -f $runfile + rm -f $pidfile +} + +run_stress_fs & +touch $runfile + +stress_pid=$(cat $pidfile) + +while [ -e $runfile ]; do + readarray -t QUEUE < <(numactl --show | awk '/^membind:/ {for (i=2; i<=NF; i++) print $i}') + # Proper Fisher–Yates shuffle + for ((i=${#QUEUE[@]} - 1; i > 0; i--)); do + j=$((RANDOM % (i + 1))) + var=${QUEUE[i]} + QUEUE[i]=${QUEUE[j]} + QUEUE[j]=$var + done + + RANDOM_NODE_1=${QUEUE[0]} + RANDOM_NODE_2=${QUEUE[1]} + + if [[ -f $pidfile ]]; then + echo "migrating parent fsstress process:" >> $seqres.full + echo -en "\t$MIGRATEPAGES_PROG $pid $RANDOM_NODE_1 $RANDOM_NODE_2 ..." >> $seqres.full + $MIGRATEPAGES_PROG $stress_pid $RANDOM_NODE_1 $RANDOM_NODE_2 + echo " $?" >> $seqres.full + echo "migrating child fsstress processes ..." >> $seqres.full + for pid in $(ps --ppid "$stress_pid" -o pid=); do + echo -en "\tmigratepages $pid $RANDOM_NODE_1 $RANDOM_NODE_2 ..." >> $seqres.full + $MIGRATEPAGES_PROG $pid $RANDOM_NODE_1 $RANDOM_NODE_2 + echo " $?" >> $seqres.full + done + fi + sleep 2 +done & +run_migration_pid=$! + +wait > /dev/null 2>&1 + +status=0 +exit diff --git a/tests/generic/764.out b/tests/generic/764.out new file mode 100644 index 000000000000..bb58e5b8957f --- /dev/null +++ b/tests/generic/764.out @@ -0,0 +1,2 @@ +QA output created by 764 +Silence is golden