From patchwork Thu Feb 6 16:44:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateusz Guzik X-Patchwork-Id: 13963322 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 D0647C02194 for ; Thu, 6 Feb 2025 16:44:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 42A766B0082; Thu, 6 Feb 2025 11:44:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3DAD46B0083; Thu, 6 Feb 2025 11:44:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2A2BB6B0085; Thu, 6 Feb 2025 11:44:31 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 0D57E6B0082 for ; Thu, 6 Feb 2025 11:44:31 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 90C611A125B for ; Thu, 6 Feb 2025 16:44:30 +0000 (UTC) X-FDA: 83090093100.18.5735786 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) by imf22.hostedemail.com (Postfix) with ESMTP id B9DE5C000E for ; Thu, 6 Feb 2025 16:44:28 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=QIjNTc6k; spf=pass (imf22.hostedemail.com: domain of mjguzik@gmail.com designates 209.85.218.50 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=1738860268; 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=0EllTp5Ggd6l+rFMCueF6sxgOPRMQ4MSYiTvpxQSXeg=; b=Gy9PIEzeTdETmIgiiPFwGwktux2cBQLnQA/KUGjSyD3T+C2jUXGp4wI1W0ArEL3xrfABN4 av0BwpLVDNE9AJ7J7WvlTMBWxMMhXBWiEgNe1c6AuFRct8cOuGovCclG5zPzRpnQ+II5kc yhQydW6NOmXcLCQFdwx7j4zmRpgtzRk= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=QIjNTc6k; spf=pass (imf22.hostedemail.com: domain of mjguzik@gmail.com designates 209.85.218.50 as permitted sender) smtp.mailfrom=mjguzik@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738860268; a=rsa-sha256; cv=none; b=cUZJ40f8aFazGYc2JSXd40saf86NHlePTY7hZsHu9ih5IQUQMYiQK2S+9dbpEyKwCSIgGk hD0nl3ljOUmPdlxlyIRR/D/54/q7IVPXO1gKUY/44MveqEH4zh/iMBKRzZTAGqsyML/RKu UZlox9Tfr30VIBv7FDdY8s/KmrjdTXY= Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-ab76aa0e6fcso150945266b.3 for ; Thu, 06 Feb 2025 08:44:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738860267; x=1739465067; 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=0EllTp5Ggd6l+rFMCueF6sxgOPRMQ4MSYiTvpxQSXeg=; b=QIjNTc6ksRnVO81kRykpHlDCKWomcrDDfVrlZHvCL9xvvO/yKIEaR+xO23tvytp8et Khk2op7QyEBO4YSvsUMvZd15aNScKU4zMJh0gUH2rlbuORiP+Ea0uB/F082GDCuQwz9L S18PnUlGKQf2p7e1B8P5ufpixZlLkCf3T45zO5/42h/kxPVeYu73dOytweqdFlXGF9Y9 F2cSYjnAMcq4JRbPNnseQEcMvRLcbU3EJ8AgO+MvdFMf450YobromPR1cciW81O8nRqL bBnezUL4NMacLnh5s2H2FylL4sIG8Ivtt9NLfiRSPemxfx43a8q4bN2thrAURLi8t0ei Z2Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738860267; x=1739465067; 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=0EllTp5Ggd6l+rFMCueF6sxgOPRMQ4MSYiTvpxQSXeg=; b=k9MuiaOZlj7igVz3QouXKv0X8QG7FKQCfQ4oUvQkMpjb6x0+e2N9Mv7PA3uZPN00oy 87KayuPCNJe7ZLppWyk0XNUjReeKk/u9bPQhgz99AXXG62niMUu5VkeplwJ3T41uw7UE Qmvaciyn5K/OTkLctLWg7Iqu4+Pc8e/suaZdvjcp3EcBb2uS8qJbKXTEgVwAzzaS9Vsp 4yEoLIKHc8Dw5Vz3tVkUtL0eQMs8oUyn1FtKEvyQGpvj4UQI/Dl73KybY4IKQbZqKJar mQ7qnII3TGKxnPpbjyuV1Jjp2PkrEkMgcRQVE+XXFBffu5A9XouDiNVSwfT5Z4pNhevd V03Q== X-Forwarded-Encrypted: i=1; AJvYcCWtzMI5kjE7DnZlMQBdPtx+0ATgGK91JmhFPe1IDIRmGnU9yibGSR7hsTq8oJXr+OCJQkrHsnsHyw==@kvack.org X-Gm-Message-State: AOJu0YwChVS+dK4U/68ge9aC2ShuD8y0tdAb8th3I9Xqf81WOWke1pIS QMArUTw3QmF0lxyl2cwU1FIZxkP9Py+vM+VinSOL4Lm1HUi5ly1t X-Gm-Gg: ASbGnct6wEDWLlI5h6N7/wlaCFNuq1gWq6qTvfRwsiVc21s0NsS38+o/hLNCMGgjwwc Ehg8pqC0/3c/+9s9Azxe1UBNfzD+QkqREwXO3xgDbPP/Z36CU9y9qrgZrVQUcujVX4+ViZD3fW9 Ty3SqOPxuvMf6iYPkRuKqgRrlgxULCzaQ7MXP1zGdwY31Jmj2Qe0OUDSVMeP6nfhifDHhEMUYIZ jbsQCiT1Jzvzhm7kOx3xD0SpzYzmvTWdnA1sJLMFOoomlN8vel6KGChYOygUc6oLIzZ3gQnPmD4 YKEUxEozhPthskHDh3cT0NxMAGkxQk4= X-Google-Smtp-Source: AGHT+IH+BC/Z6o2ah+DA33f+3PYYjeMCHrsgwMN7KLraZaUZojg8F2PpcU6CidjgE/MAP3+bmEZ3RA== X-Received: by 2002:a05:6402:4606:b0:5d9:ae5:8318 with SMTP id 4fb4d7f45d1cf-5de450706dbmr178442a12.20.1738860266858; Thu, 06 Feb 2025 08:44:26 -0800 (PST) Received: from f.. (cst-prg-95-94.cust.vodafone.cz. [46.135.95.94]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dcf9f6fa69sm1121849a12.73.2025.02.06.08.44.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 08:44:25 -0800 (PST) From: Mateusz Guzik To: ebiederm@xmission.com, oleg@redhat.com Cc: brauner@kernel.org, akpm@linux-foundation.org, Liam.Howlett@oracle.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mateusz Guzik Subject: [PATCH v6 0/5] reduce tasklist_lock hold time on exit and do some pid cleanup Date: Thu, 6 Feb 2025 17:44:09 +0100 Message-ID: <20250206164415.450051-1-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Rspamd-Queue-Id: B9DE5C000E X-Stat-Signature: ie7usm4idemkmubd4azqtabge4irsmct X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1738860268-10866 X-HE-Meta: U2FsdGVkX18OdunkP8Rxwjprzjn9zx64euMKWIvkjQ78AJNJrUg+xCKQBoy2EOXMyoB34b4AKRFodUYqEQ/ARyFp8pHScuyvE/iMhL1/EtNSOLv+K34GzD7TQUYWkx+zCw2S+/DuCyh9vPrJC6S6lw9XVmAAQW/9F6iSwVVNU0ukr2k4/ShnhmH9EqTjWg7i7dsMPyEg1PabPlqZBN6d/kD4QW2pvnhZoyVriM2fdPXZ0U1M1I+B0f2kavsx6WJVRPnW7YcvhUrm+1wLvM2+IkTgwMMIDvgz05hcYLPgfyF4fqN9KqT55x+zPX54yFNcA4KB5YbHBc1VG7LBsGdRkN0hHkqjUDqW8oI6z+hyNdzAc9RlliJRnE6WMRcP08LeOcCwop1FoHZqc0/24pNV5kSzEE+bcCgP1Hi28wrw9ZgfcUP7oNfbs/z828DLLQew6ICN35DO8UNY6mc2xdrXQDxnGTW5p4i3iEALUJiRjw205pz+xV/NkAefgbj4HHvh7DVtvvFjlOh74mnFvtwYZKDZlZcwF0kzRmeu+3REAiHSyU3x2FK80BNUWUEmxAr7nmzy+VWlduoZGUOUXliHbOEFO6dcXQPsVYkBGNhRjxwYcBuPzVuqkBm6HIyzXYT+XsKwor9JcsDCUBCyXGrEy6rNQHrJV/Xsp5bAaxK5ANOboQb1YopsEuoITTXwLCTGlb8bw7bTrgSXb8+6z+zSjKYRnUS5+iu5oA6/STgDycZ0wXbHwq//J+AJ3sjRegRi6I0OBLb4USYUceR9Lx2wxX5D7n1/hac954+CqQjKpIwoWTO9uXBJlHSZRCAeeoja65ryApQOQ2pHfXxLihpP3FBapfdsOemGuJiuW1roaWc8yQ5kuTTqS1ykoFn6YfYQb/i0A7NQarkH2E+EfAtqZyWIdFZGW5ym4Ryxt97Yr1a/OI2TI9rf5jfp7N1I6H382PsyxZKE+COTfuy9MLe ONKJ9IBD /mGGKPPSvDfpruUNEOM4HitTBEqWYlZoyoFGQKChmA4aQEIXlW2a2uDrM+Pl/aNj7ExJdoOf02E32u2EDuDYt80e0XTANTNtefLkbxwNX864kpfE1TaXtE4X8LMAlOAseZPJBzuMguyCBu4kwi67FMdAKPaI4XnOeO/uuYGGxmiw6q9nyShPHsbUQn4o6pvpIES0+N7AnOrW+CRmfqbXdWfDDeVByJqRZ9/OIq4gp5qhOzubqEHU7Z8MjWwn/QOmC+gddN70Y+gU/t4fK0DQPKo9rjh3fHxaa+LE/qq678MzS8/+6998nMI/CYlSo/PD2lDJoljz/ekkMP3H62SZTPUSSHjmsj7b+ZPwMkb2z4ioigFs3kAG/HfZ0QJvkwpeLo1q9mNhnbSX5JI4= X-Bogosity: Ham, tests=bogofilter, spamicity=0.003058, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: I fixed fat-fingering and touchedup some commit messages. git diff between the old and new branch does not show any code changes. hopefully we will be done here after this iteration 8-> old cover letter: 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%. The new bottleneck is pidmap_lock itself, with the biggest problem being the allocation itself taking the lock *twice*. 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)++; } } v6: - expand on the commit message in 3/5 pid: sprinkle tasklist_lock asserts - move fat-fingered free_pids call to the right patch v5: - whack scripts/selinux/genheaders/genheaders which accidentally got in - rebased on next-20250205 v4: - justify moving get_pid in the commit message with a one-liner - drop the tty unref patch -- it is completely optional and Oleg has his own variant - add the ACK by Oleg 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 (5): exit: perform add_device_randomness() without tasklist_lock exit: hoist get_pid() in release_task() outside of tasklist_lock 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 | 36 +++++++++++++------- kernel/pid.c | 82 +++++++++++++++++++++++++-------------------- kernel/sys.c | 14 +++++--- 4 files changed, 82 insertions(+), 57 deletions(-) Acked-by: Liam R. Howlett