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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 743D1C0218A for ; Sat, 1 Feb 2025 16:31:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EC70A6B0083; Sat, 1 Feb 2025 11:31:23 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E76B26B0085; Sat, 1 Feb 2025 11:31:23 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D3FAB6B0088; Sat, 1 Feb 2025 11:31:23 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id B35226B0083 for ; Sat, 1 Feb 2025 11:31:23 -0500 (EST) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 3ED10141905 for ; Sat, 1 Feb 2025 16:31:23 +0000 (UTC) X-FDA: 83071916046.20.545673B Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) by imf14.hostedemail.com (Postfix) with ESMTP id 5A646100013 for ; Sat, 1 Feb 2025 16:31:21 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=MG1fPS87; spf=pass (imf14.hostedemail.com: domain of mjguzik@gmail.com designates 209.85.208.53 as permitted sender) smtp.mailfrom=mjguzik@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738427481; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=3jrnKgDyAKbnWY+eGuVyIsm/8uEB+2OWbdoknaGGjkA=; b=Ns4GlxisKu00zohQp8DRz135vuZ3Hg99VdPI8xnwivIvFMzFzZB6o56cLMxbpfRYuBZdbR aMQ4YDcI/qOv2eSjZ34woIQJp69kg/stBSDIkd0O4xbxTssD7qP29A0roCeonvsm7s48yQ 0g+vt9H1YaK8obl5S0Y0E1aIJFp2IzU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738427481; a=rsa-sha256; cv=none; b=fxwnpj8CnXCsAST89/5KufgYNdfiV4Cw2AUctHOJIhswnmQ2laj8x2MfvhYAcIqYWWUbNu EFjSBZHWhZbfPWDVLE7hFrQwIbLgQpe2L7BzAJWf+Z2Q3hnimOwb9TWJwC1ioIlztJLsvS br3ZXn2qOLKH0blScT6x7zdEZWik49g= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=MG1fPS87; spf=pass (imf14.hostedemail.com: domain of mjguzik@gmail.com designates 209.85.208.53 as permitted sender) smtp.mailfrom=mjguzik@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-5d0d32cd31aso4176170a12.0 for ; Sat, 01 Feb 2025 08:31:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738427480; x=1739032280; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=3jrnKgDyAKbnWY+eGuVyIsm/8uEB+2OWbdoknaGGjkA=; b=MG1fPS87mxWmDWk2USmocXUrFmBfdBKrbaJMMMwLyUQ3p67cg6bT3D7ZjiHQmdiz8W hHXnvhk2Zl28wIsMotoIcxnBF5pxrSTZ3ZWebMYezZJQ6rwH4R1t8fX+Y30tqDSdzItT cTBzxdUNFqETi2pu+gaJ4PsQxaFaV9FXvE0par6svJoXV92Tr6NpvTufTSvQ15ZfYU2L stMVdNbjFW04W0Xj31rFuq0GPoz2d25keRujCnsN9I7YuAP9JMa0CpyeYcfR/OmYunJt WHfFoZQG6ufxmLGfggzl2HSmig6w4ciJVRkwKduCKUOYEqrd0zWLvIJV2m6aYnvB4lyi 8jCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738427480; x=1739032280; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=3jrnKgDyAKbnWY+eGuVyIsm/8uEB+2OWbdoknaGGjkA=; b=L6qKttlrGhTy8qGZSVPY7Nu+iqQQN+wg/YlJuXDQ5YAJEnKnKwFuzeR1pEdVfCe4vA xKk8MsddqMYrLNBDr41JsmHn43d0NGs76bozf2gh5G38TCVvZb8UXt3XGb3Ehz9UUGxG 1Zn/eTqBoNZ1rf9HG5eHauVyixHW0vvM8C8mEDPOxHMro4lpfs/XeGC7yZdrQ8IWp3wG GAdF/IyiPgvSbL3WGzYH/kaEvTI4tMugdAEkGaRuekTxQz7PG1dKfPNa0HdWilDmLa2i FrRRWeygyZ5gtW61ibvkjrDAnO2hmWd/515Rji6W+uZ0e5DYXZYLQEXVZozrdFaXUo0y mU/w== X-Forwarded-Encrypted: i=1; AJvYcCVJQcS33APH4jtRp9TSv0y4foulRW4VDJVLN4AnT/v47JRvC/FWnPB7GFjzfCW9ZbaJHixc1RCDKA==@kvack.org X-Gm-Message-State: AOJu0Yz0zRHhs9DQ9I1St5o5QqHB2E2mLkUZNdk0idRr+9QNx65e5XHh gokMJkrScxgWQxW+GZW05/Yke6z+sB3c/ObKTt67xam1jKxYjjPC X-Gm-Gg: ASbGncsU11uvTch61CeNhjCWIGshewwams/dYZZ3ftigpA7Y9y6z6GU1yggvIAgsvNy 4nOQ5SnhXcvi2CJdTDNOKPx60V4iIkUmmcqlItbJCSFnwPktS5o909dtPLegUds1LL0fZ8gbrww h60HHoZW7ubEEQwPTL8HnuV28jiQtmE7YKw09QwyUUGfBHFcimgN99XsZlv6fkFq+GE/ro7XEcy rPjQCvmPwYjfCqiZBS+zXW4MhGZKlhvrhJWUxS0drb1bNVFuwpzgZGxs8aKoM27uNxdsGDKjz1S SlJ0kw3F861TkOnoyBhePnxipNzZIjR+Jg== X-Google-Smtp-Source: AGHT+IGjUXyqp/vJ3+g7LQWf+U0oyQzi7TNZUhg4i+bNx7Fgw7YdSJtVvGJ6QCfmYSZFLhiSYwgxkw== X-Received: by 2002:a05:6402:380e:b0:5dc:893d:6df3 with SMTP id 4fb4d7f45d1cf-5dc893d702dmr14273771a12.0.1738427479382; Sat, 01 Feb 2025 08:31:19 -0800 (PST) Received: from f.. (cst-prg-25-223.cust.vodafone.cz. [46.135.25.223]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dc723cff72sm4636959a12.15.2025.02.01.08.31.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Feb 2025 08:31:18 -0800 (PST) From: Mateusz Guzik To: ebiederm@xmission.com, oleg@redhat.com Cc: brauner@kernel.org, akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mateusz Guzik Subject: [PATCH v3 0/6] reduce tasklist_lock hold time on exit and do some Date: Sat, 1 Feb 2025 17:31:00 +0100 Message-ID: <20250201163106.28912-1-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: 8sbswg7etz4ij5i45q7ww179s8dsh3wg X-Rspam-User: X-Rspamd-Queue-Id: 5A646100013 X-Rspamd-Server: rspam03 X-HE-Tag: 1738427481-293216 X-HE-Meta: U2FsdGVkX1/PvbmBut6zSK9QRY0yyDWP0jp7++p9gEyl//sljtGDSYJtBbT0lB/b44UfOonDyX372NI/I+yKyNQI27M3ecw1clpYRY7lfyQb7o3w+owcdFTCN8I+2aeY4W+8KdJzKIglx5BAKh2GiSoh8E7T87kNFcD4D+hfeMzMRZ0bfhhVZQrEJgKHn0BYiLYZ88rVRg6MDy0g4JtFWcC2BB4+Ixz+JdCXcAgV1Uhm8klsMlaPDmT0gKd4ThQvzwj8WXI/f7lwBGfLNyECykvHwQNkej7CYvB7fr0scp/lN1p3fV8nybkJwsM/RkGE0BZMSkcU2Paqq5ag3Tekgix8l7ZohuNalyLNXHP7HgwJfKrKFKbOzMKSi7sbAaFJ3NTs/EzeosGHrI0LE5Qd6I9ntWgswM9yv6e2UyLpZb5+jmd6DXw77QZSZQ8AKkc237z3rUliCAgtheEmEI7NmkVxq1HZjEVKKIpkJpXHO0nHhWk4laa/LgP5iFAWM+P0BieTVkeDWZ7Ds7iIFJIKAT3cXF469ZDfQeZuUlwwoHj6fPvoyxLAUR8i9K3gIT3JqBttrJFjd45/fqaPfdWRYy4BKUFhW4C7CaPjxXV1AJxCybs1D44qwop4HXgznf+VCfZYpZW4BlA3fU3C6XoZP0WCRSYkq0FFeGwv/HgZNhJa65NIVhAd86d76O9DxhDHoQn1ErXXLt5cFuqI4YGeddexy9BkcUarjRWeZouWC/a9mu/ShPQkHE1z/xk1iQrLWctull5IAU/D5PmMCpMoxXabSNY3EWtEMItffpk1SpzXo3+cT5pUyCiHkUZCIny6enPfJVKhVBoJ2FpTZNiTTpHLiwcbOd9Hvy2ZnHaNuvc1G5Wk1qQrXOGY1T1JvFymQbO7thJruq9FQnvN5HRMNfJOLwbYeEvE0aX+sXAFZcM1bB0gRVSfrWONlnoqW6gF9YaOJ2HCwtQHyz9SJ75 LwfeRUWz Zw1Gh5rKwNw28yzpYgFF8ZNdwP7Fuj5/uC5kLJ3jj9b6TNI8VDjB5nMgtOOsMkNhOCbY6ES9COQFtmYnw9Tent5nUOAFI0yn6Pz3vSpEwzUXIOvDfPqd2cBdDOAe8FmpxZ9v+9XqGb2HF2NOtdhg6ez6y5KZVhBnwA0L2TaDaAnQv97kkB3/nUiBWe/rH5y/9coU+o/Fp9QtFdUhNFPks+uqST0dCaSErmrCkEY5S5bhhn0QSi9P0AiwoLQKH2bbX4NbYxDx3/6A13AvKRfqdfENvQlayEJy/zaJdvzWyfs6xjPaKIAeMSjPQIiUFMHKEDaT3fFOWJQtYEs/ViObDdBVS23GpI3f7Xe836pUcgjpsk4gJQoxq3kT64USxXxX4RWm+6lzXWR1PoyE= X-Bogosity: Ham, tests=bogofilter, spamicity=0.189531, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: The clone side contends against exit side in a way which avoidably exacerbates the problem by the latter waiting on locks held by the former while holding the tasklist_lock. Whacking this for both add_device_randomness and pids allocation gives me a 15% speed up for thread creation/destruction in a 24-core vm. The random patch is worth about 4%. nothing blew up with lockdep, lightly tested so far Bench (plop into will-it-scale): $ cat tests/threadspawn1.c char *testcase_description = "Thread creation and teardown"; static void *worker(void *arg) { return (NULL); } void testcase(unsigned long long *iterations, unsigned long nr) { pthread_t thread; int error; while (1) { error = pthread_create(&thread, NULL, worker, NULL); assert(error == 0); error = pthread_join(thread, NULL); assert(error == 0); (*iterations)++; } } v3: - keep procfs flush where it was, instead hoist get_pid outside of the lock - make detach_pid et al accept an array argument of pids to populate - sprinkle asserts - drop irq trips around pidmap_lock - move tty unref outside of tasklist_lock Mateusz Guzik (6): exit: perform add_device_randomness() without tasklist_lock exit: hoist get_pid() in release_task() outside of tasklist_lock exit: postpone tty_kref_put() until after tasklist_lock is dropped pid: sprinkle tasklist_lock asserts pid: perform free_pid() calls outside of tasklist_lock pid: drop irq disablement around pidmap_lock include/linux/pid.h | 7 ++-- kernel/exit.c | 45 +++++++++++++++---------- kernel/pid.c | 82 +++++++++++++++++++++++++-------------------- kernel/sys.c | 14 +++++--- 4 files changed, 86 insertions(+), 62 deletions(-) -- 2.43.0