From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on gnuweeb.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NO_DNS_FOR_FROM autolearn=no autolearn_force=no version=3.4.6 Received: from localhost.localdomain (unknown [182.253.183.169]) by gnuweeb.org (Postfix) with ESMTPSA id 99D5E8319A; Sun, 26 Feb 2023 16:03:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1677427398; bh=wfVxdCU0WiYOKtzPo+vOA/+kkGOosWbPqZrRb2tJROM=; h=From:To:Cc:Subject:Date:From; b=Cbwp9hG1ztLu//tbm0WTi431HwgTqf/o6Ow6TTH8vqx4fqBSXmIB2kIZZUPjAgabw ETlx2MqhF+NzRe5c8bb7KfXKbL8522tCQdYTzzjbMhGpZXdCmy0yzsL3QDvfMpQFbf LRYLl2SrLHb9hldByAo0hFw0yc8k9oq5GPWsFxFyAcs8PVDwF6YO8Of49NVShJtr15 MX8He954Co/SrT29kA0TVceGBZ9A+A1iPsg04NnEvBQbZMHE/bKmkafFxJM71fFjf/ 87buMqh/YyudR1WduVho1V7Jb21UQAhSZ2eQ3TWies9fOi/J9flnTRrz4ODQh+kH1A AHmkD8Y2Iw3aQ== From: Ammar Faizi To: Chris Mason , Josef Bacik , David Sterba , Tejun Heo Cc: Ammar Faizi , Lai Jiangshan , Filipe Manana , Linux Btrfs Mailing List , Linux Kernel Mailing List , Linux Fsdevel Mailing List , GNU/Weeb Mailing List Subject: [RFC PATCH v1 0/6] Introducing `wq_cpu_set` mount option for btrfs Date: Sun, 26 Feb 2023 23:02:53 +0700 Message-Id: <20230226160259.18354-1-ammarfaizi2@gnuweeb.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Hi, This is an RFC patchset that introduces the `wq_cpu_set` mount option. This option lets the user specify a CPU set that the Btrfs workqueues will use. Btrfs workqueues can slow sensitive user tasks down because they can use any online CPU to perform heavy workloads on an SMP system. Add a mount option to isolate the Btrfs workqueues to a set of CPUs. It is helpful to avoid sensitive user tasks being preempted by Btrfs heavy workqueues. This option is similar to the taskset bitmask except that the comma separator is replaced with a dot. The reason for this is that the mount option parser uses commas to separate mount options. Figure (the CPU usage when `wq_cpu_set` is used VS when it is not): https://gist.githubusercontent.com/ammarfaizi2/a10f8073e58d1712c1ed49af83ae4ad1/raw/a4f7cbc4eb163db792a669d570ff542495e8c704/wq_cpu_set.png A simple stress testing: 1. Open htop. 2. Open a new terminal. 3. Mount and perform a heavy workload on the mounted Btrfs filesystem. ## Test without wq_cpu_set sudo mount -t btrfs -o rw,compress-force=zstd:15,commit=1500 /dev/sda2 hdd/a; cp -rf /path/folder_with_many_large_files/ hdd/a/test; sync; # See the CPU usage in htop. sudo umount hdd/a; ## Test wq_cpu_set sudo mount -t btrfs -o rw,compress-force=zstd:15,commit=1500,wq_cpu_set=0.4.1.5 /dev/sda2 hdd/a; cp -rf /path/folder_with_many_large_files/ hdd/a/test; sync; # See the CPU usage in htop. sudo umount hdd/a; Signed-off-by: Ammar Faizi --- Ammar Faizi (6): workqueue: Add set_workqueue_cpumask() helper function btrfs: Change `mount_opt` type in `struct btrfs_fs_info` to `u64` btrfs: Create btrfs CPU set struct and helpers btrfs: Add wq_cpu_set=%s mount option btrfs: Adjust the default thread pool size when `wq_cpu_set` option is used btrfs: Add `BTRFS_DEFAULT_MAX_THREAD_POOL_SIZE` macro fs/btrfs/async-thread.c | 51 ++++++++++++++++++++ fs/btrfs/async-thread.h | 3 ++ fs/btrfs/disk-io.c | 6 ++- fs/btrfs/fs.c | 97 +++++++++++++++++++++++++++++++++++++++ fs/btrfs/fs.h | 12 ++++- fs/btrfs/super.c | 83 +++++++++++++++++++++++++++++++++ include/linux/workqueue.h | 3 ++ kernel/workqueue.c | 19 ++++++++ 8 files changed, 271 insertions(+), 3 deletions(-) base-commit: 2fcd07b7ccd5fd10b2120d298363e4e6c53ccf9c -- Ammar Faizi