Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp4623821pxb; Tue, 25 Jan 2022 14:49:07 -0800 (PST) X-Google-Smtp-Source: ABdhPJypDgAgKLs3fGyvNSAJxgYtfa+HrvPamBR1xZr3pRO/WRYyCsfPrhTjPmXPYH5d3SP2wJba X-Received: by 2002:a63:8c07:: with SMTP id m7mr16780940pgd.496.1643150947326; Tue, 25 Jan 2022 14:49:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643150947; cv=none; d=google.com; s=arc-20160816; b=iXguEqtGMifPmBRXODqDgLutBGUhN8R5EUc9sPI8vGvjmm2rdDVqAcusrV2gy4RSkJ mRu4yhAJB6yDEsPFA7/lc4I5u+QXvCd7u5ViF2z7cEvyeJjw0FFmRLOFRIsZsr+wj9oa CC3mQ013NOwSu9i+MjLDZLFu/MUhtZPInosNJoo+7L8w54Jfgnbmm3UQfcwN3AqTjDj7 8TxB7NoQYUAbYteaLFDyiYchkOeFvyqzksq9Jrz6iyD/lkzBhvfWEnB25q5UrkBKi/N/ ktJMMH0nWPAsmVMZrjW7xrq69Ft7KjKqqJG6XDUC0TeiIPVPb57Noor6YvFp+2IOBbG/ l+Ug== 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:dkim-signature:dkim-signature:from; bh=W/WvrXWAOiUd/il6zz5aedxI9lPYVnntFYe85PGF5Oo=; b=Qmu9fwwJi2jYIA1bjnJ1hNVfkW6fThp2KRkC7e1OQaCRiX8LvsU2X9AnDwC0ZmzmiR qCx+2RuelTmUqXq0emO9KUsrH2+iNaeX7BsMcAWD9CXuoYCZ3NVrXzGL5JxkGQZP8bQT gEja8xtDKSSLv/jSsnO+llM+wrRjbb8NorLx1Btonw4YnLWOQLkmrJ6f4gOAH7YHQjLY pg3jiAUz5CJrALEjfY4VSPDhPrdGvU9OMIjq6q8vbEJsl1AYMiq8o2P3pJrPgiawsj2R 596geIn8RKEy3fJdbAhgSKFVWvq/VbnpeuOe2tArRGYx/dP5ADimRRlT1flvUeVcxa8j 6lqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=TehafuZQ; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e header.b=ySGzEscX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d9si15164156pla.578.2022.01.25.14.48.55; Tue, 25 Jan 2022 14:49:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=TehafuZQ; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e header.b=ySGzEscX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242378AbiAYPba (ORCPT + 99 others); Tue, 25 Jan 2022 10:31:30 -0500 Received: from Galois.linutronix.de ([193.142.43.55]:50014 "EHLO galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345304AbiAYP1N (ORCPT ); Tue, 25 Jan 2022 10:27:13 -0500 From: Sebastian Andrzej Siewior DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1643124418; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=W/WvrXWAOiUd/il6zz5aedxI9lPYVnntFYe85PGF5Oo=; b=TehafuZQ7DfVbwv20uSr5uBa7E+wmWo7Eoqiq1nwpKakG30LII2YHsLXCCvXLjj7Gx7Uj8 uX5TW1FWee4i0D/sVnYRZsynJjGxCbZCIP5uQI8B9/0VKztKg1PfEB5KApBvLFQ6gip7dL EOsOJCIDASXsPP7tFe4vBnAFnvZROFbpCNiJZVOie2fgB2GwsVs3WzQzXDpaAL++WO8CSw 2h4bumRVzShRObpN8VUiviwzHXZ+6tEoJxzWKyExf4EvZixskHg02ELZmeHK2E1aMoe/kP hLYoV81YUuHNovzceRYyja08oERrnybgVM2kennT9q7CHtsHRliDjdg0HgV+Aw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1643124418; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=W/WvrXWAOiUd/il6zz5aedxI9lPYVnntFYe85PGF5Oo=; b=ySGzEscXiSjsrymjBso2WTz3RdrST3peLqs5g+AAX+ReHxK8vSUhHOs7JazKesZ5fnAm9X Mt5QCgUwxMm3mzDw== To: linux-kernel@vger.kernel.org, linux-ia64@vger.kernel.org Cc: Andy Lutomirski , Ben Segall , Daniel Bristot de Oliveira , Dietmar Eggemann , Ingo Molnar , Juri Lelli , Peter Zijlstra , Steven Rostedt , Thomas Gleixner , Vincent Guittot Subject: [PATCH REPOST 0/8] kernel/fork: Move thread stack free otu of the scheduler path. Date: Tue, 25 Jan 2022 16:26:44 +0100 Message-Id: <20220125152652.1963111-1-bigeasy@linutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ This is a repost of https://lkml.kernel.org/r/20211118143452.136421-1-big= easy@linutronix.de ] This is a follup-up on the patch sched: Delay task stack freeing on RT=20 https://lkml.kernel.org/r/20210928122411.593486363@linutronix.de It addresses the review feedback: - Decouple stack accounting from its free invocation. The accounting happens in do_exit(), the final free call happens later. - Add put_task_stack_sched() to finish_task_switch(). Here the VMAP stack is cached only. If it fails, or in the !VMAP case then the final free happens in delayed_put_task_struct(). This is also an oportunity to cache the stack. From testing I observe the following: | bash-1715 [006] ..... 124.901510: copy_process: allocC ff= ffc90007e70000 | sh-cmds.sh-1746 [007] ..... 124.907389: copy_process: allocC ff= ffc90007dc4000 | -0 [019] ...1. 124.918126: free_thread_stack: cach= e ffffc90007dc4000 | sh-cmds.sh-1746 [007] ..... 124.918279: copy_process: allocC ff= ffc90007de8000 | -0 [004] ...1. 124.920121: free_thread_stack: dela= y ffffc90007de8001 | -0 [007] ...1. 124.920299: free_thread_stack: cach= e ffffc90007e70000 | -0 [007] ..s1. 124.945433: free_thread_stack: cach= e ffffc90007de8000 TS 124.901510, bash started sh-cmds.sh, obtained stack from cache. TS 124.907389, script invokes its first command, obtained stacak from cache. As you can see bash was running on CPU6 but its child was moved CPU7.=20 TS 124.918126, the first command is done, stack is ached on CPU19. TS 124.918279, script's second command, ache from stack. TS 124.920121, the command is done. The stack cache on CPU4 is full. TS 124.920299, the script is done, caches stack on CPU7. TS 124.945433, the RCU-callback of last command is now happening. On CPU7, which is where the command was invoked (but not running). Instead of freeing the stack, it was cached since CPU7 had an empty slot. If I pin the script to CPU5 and run it with multiple commands then it works as expected: | bash-1799 [005] ..... 993.608131: copy_process: allocC ff= ffc90007fa0000 | sh-cmds.sh-1827 [005] ..... 993.608888: copy_process: allocC ff= ffc90007fa8000 | sh-cmds.sh-1827 [005] ..... 993.610734: copy_process: allocV ff= ffc90007ff4000 | sh-cmds.sh-1829 [005] ...1. 993.610757: free_thread_stack: cach= e ffffc90007fa8000 | sh-cmds.sh-1827 [005] ..... 993.612401: copy_process: allocC ff= ffc90007fa8000 | <...>-1830 [005] ...1. 993.612416: free_thread_stack: cach= e ffffc90007ff4000 | sh-cmds.sh-1827 [005] ..... 993.613707: copy_process: allocC ff= ffc90007ff4000 | sh-cmds.sh-1831 [005] ...1. 993.613723: free_thread_stack: cach= e ffffc90007fa8000 | sh-cmds.sh-1827 [005] ..... 993.615024: copy_process: allocC ff= ffc90007fa8000 | <...>-1832 [005] ...1. 993.615040: free_thread_stack: cach= e ffffc90007ff4000 | sh-cmds.sh-1827 [005] ..... 993.616380: copy_process: allocC ff= ffc90007ff4000 | <...>-1833 [005] ...1. 993.616397: free_thread_stack: cach= e ffffc90007fa8000 | bash-1799 [005] ...1. 993.617759: free_thread_stack: cach= e ffffc90007fa0000 | -0 [005] ...1. 993.617871: free_thread_stack: dela= y ffffc90007ff4001 | -0 [005] ..s1. 993.638311: free_thread_stack: free= ffffc90007ff4000 and no new is allocated during its runtime and a cached stack is used. Sebastian