From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2051.outbound.protection.outlook.com [40.107.212.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5384226553 for ; Fri, 20 Dec 2024 21:30:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.212.51 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734730220; cv=fail; b=Y3oGf77UGL/hg8E69iz2ItBy6SRka4QAuFxPmXeSJQBS8seJ7j2UmAwHYAJSLUPnsvGVFR5p/SHMmuNkZEpPeoy6qmxc/V3b4iRHGNJxvFYMAYTPfDYKBqR+ssE6jQ8Jo3/ej4JrpWWkNqr5h8N3s8Dfjd8IR+AMsdutTKZAj/Q= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734730220; c=relaxed/simple; bh=ZG1VBFPlErNYMz2jfx32NdyEtB0RDNVf2Q7rjZZx6Ck=; h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type: Content-Disposition:In-Reply-To:MIME-Version; b=Lg7DhL5FsdM0jvi+RiQ2I0cWrpaU3On/rz67wg/gbgaYNaiX/ke1egUeebRpIL/T30XulkjdL27XftW+g3sxAbzSs6Zej+qjLtn7+RgXnH9w81Cyafl+9v8VJiQTn/KbsLxQafW/avTjmLSqXrvL6VS0stIML/JR1QZkTRsxKNM= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=qEZs7sYI; arc=fail smtp.client-ip=40.107.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="qEZs7sYI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QzoqkNAY/VnRmniKxjwrrbQthoVBAV4UILXifbLJUkfnwUSWygZ5ZJ1FCN9a1HH9jug/bvQZoCJ8dDaXODCzELpVG3SpQqOLnCOMve4PKnJln6G+yrnigKh/KlY5JewJ5yidWStRPgph+3on4exIhcubGG4JkVp6yoGDV9gEeOvyE0QB2mqMFNCMxRrJJ4vBMDNFxtkIPw8zjXUeJeQXjA4Dy+dPeOYTwaFbwNfP+DQRL5w7S3h1i3OjDINkt3VETdfDUQ3DPFfi5m9x39S5IkptuXAZyn1vCS/rsi7uWYL366UYofjXL0hxB68X7tFiuwU00BKEPfpiw6xO2K86Rw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5kFPMNxTOAYFSquc9CqIBbuElL8netY1ZLk/tydJYx4=; b=RsvCJGSOTxQ9QGszq9WOFQ2CTv4UvAt3xtzor7ebhskMz6Bsp2UZMqOCSn3c5LnDEtgj8pqtsPIIfPFZb9w2+aq4bHSzx4zK0LKd987jf6TDZUFGbONxFjUeI7C3N14cqYTwq4IgmqVsg8+ju9e/farVP3RIqid3aY0bHCgRJNTPehWs57VzL/7HsUOqilfDxXZdOSPrvqAbeSzRIPWhZyGP3VoS+3m3hNe0u2Hh2CIGJebjTVGvA6fO613v3z4qrqBQH48oqhOg9CQ2O97bpJTOvKSYQtDBkQk/2P2LL5s6xU9bnrncwni3LPJIh/NuxiqeBhUkL9T/PUVhLfdP4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5kFPMNxTOAYFSquc9CqIBbuElL8netY1ZLk/tydJYx4=; b=qEZs7sYI/AP2nEGpWhW66vacMBy72Rn+PCe+hTkBdK5DfUoFCQT634n33BhiI+sQiIXtMqixPnq8APw1TOk2fIQD6W4g2DU1H7mWnu2sqOrTBVhF9grea1ACMvYJMAkoHzZYrkwLQgB/Y4KpSHeOXFtOJDdd2rYrwT1PNv5AOuQcobaSIfI/zZ8Pwz5+STphXNuqHZxSOHzXN8Vq+V1doM9NNckGSlwxgc9dbW7TnRsQAV7DNuvBq6Po0VP2RGu4yYyKfiSATJrYNzKBe3AiVE7LvN2vro7P+5yX05EZSu/MzkeYRETT2Vgp8qNaYMdKUNmLrfci8zs7WczSfAj9rw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CY5PR12MB6405.namprd12.prod.outlook.com (2603:10b6:930:3e::17) by IA0PR12MB7507.namprd12.prod.outlook.com (2603:10b6:208:441::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8272.14; Fri, 20 Dec 2024 21:30:16 +0000 Received: from CY5PR12MB6405.namprd12.prod.outlook.com ([fe80::2119:c96c:b455:53b5]) by CY5PR12MB6405.namprd12.prod.outlook.com ([fe80::2119:c96c:b455:53b5%3]) with mapi id 15.20.8272.005; Fri, 20 Dec 2024 21:30:15 +0000 Date: Fri, 20 Dec 2024 22:30:07 +0100 From: Andrea Righi To: Changwoo Min Cc: tj@kernel.org, void@manifault.com, mingo@redhat.com, peterz@infradead.org, changwoo@igalia.com, kernel-dev@igalia.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH v6 2/6] sched_ext: Implement scx_bpf_now_ns() Message-ID: References: <20241220062025.27724-1-changwoo@igalia.com> <20241220062025.27724-3-changwoo@igalia.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20241220062025.27724-3-changwoo@igalia.com> X-ClientProxiedBy: FR5P281CA0012.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f2::9) To CY5PR12MB6405.namprd12.prod.outlook.com (2603:10b6:930:3e::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY5PR12MB6405:EE_|IA0PR12MB7507:EE_ X-MS-Office365-Filtering-Correlation-Id: a51ff448-6b65-4477-838c-08dd213d7ea5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?EcnsSuNMAIliub2TAnlVC25jU8iFHuQg9CGNPvsXorOQ7uFgM/dKHHEM7AG5?= =?us-ascii?Q?hscUU0YEis0jRvqmiecHnwKI0H+d1KxrypSBPB28UFSJq8zhRMlqyZ6ZUAMN?= =?us-ascii?Q?K/lAj99di/YYVGxK9/2OVMFQ4UXPT/AX6t38tc66n13KCqV5KJKT9x/ilABh?= =?us-ascii?Q?qIUa1gq4H/UWMF3nnnz3eEPBKcF3NtVycHIh09F/dsurNba8rciMWC3/3OCl?= =?us-ascii?Q?KoHg7EyArS09XnCFECS6ijTa92rzvt/Zag9+pWZS0cx/Hvu0GcS00OnGxB48?= =?us-ascii?Q?C9lTJF2YaFIsMfiys4x9W+ufrvMIyX6oQKyhrM8EFm/CIiq8ImJmX6YaEhw4?= =?us-ascii?Q?Q1ksCldJuT7OkW4cqk0gdZB6my3eE+ZuG4+BFQuknjL+bHNiJxIyJbVCMu2h?= =?us-ascii?Q?NdzWvhQLccUxhs4MBtrz8jWQiJnaHY52HQ7hWckzEFig8q0vJ4FBLjGfMBSd?= =?us-ascii?Q?7q4IZcPFMbZxqEpHSSn8L2I0thmJs7by7DEUeUtAzalDNl57srEnM7Yj5fmh?= =?us-ascii?Q?CWagPSobLIJYpw6JEAhprJUeT1lzkuXfU9sVEuQL7jMLDcBa5nKyn28/MlgX?= =?us-ascii?Q?7HGOiStIglu0QqIpO4sOQgnPT0zuFpANyngbvlad1aF2IckMhInpmxpXWygD?= =?us-ascii?Q?lrfX1f58GsRLD4Tq5PAqLFLjYCSwtpSkRWm0SnZrKG365Pv7EkV72PexphZ8?= =?us-ascii?Q?wvwAV88GlocJr2/0yGwvmsvt9ZUJytoec6Xkffk5BD2pMAN2IxP+SirrYwuF?= =?us-ascii?Q?9mHD/QoYgW3Bs7VeXRRglX/gaXbTYIkG+zWhY0GfpNidMJBw4axHh5nGteAm?= =?us-ascii?Q?47SBEZikeHDYYUejxdTowO7d89t6d2LFhireuj6WiSr+Ct0/YTTOn6dyhKY1?= =?us-ascii?Q?XkFBXaA+ndcJu3qeL+MJc5kykoVJDPC0EPmr1OZUZrmmzZITsdErNRtNaNjV?= =?us-ascii?Q?BO82eu8S0G58xjz5lFT/oRu5/lszGg3/HaMD81cbR/gX5roFZXztrTNMSmpS?= =?us-ascii?Q?c3YoNMXNoe4ZAUIkUnjR8GsZFe+lQfCHtKiX453s/HWM+F79Jz+K09jlHLXF?= =?us-ascii?Q?Vt5XEGiRCO/+RFS3kzJ/A2HDBf3Ci2M3KM4ZxsgwVXCpSaUncnLDSC3GrvWy?= =?us-ascii?Q?m+zHfOdlgQxFwy3jSjz/szKG1eoHQ/dG8dgBNp5x9pLWMoVx8Yk/2IAZRSRb?= =?us-ascii?Q?nJS0JYPsc37MHR9pkb9YANhna68VCibH7DGRt6uORl2EsgQtbqmH0bUiFohU?= =?us-ascii?Q?SLyz+9RT47d9n3WNAVIyOlUQtQZfOSWcV9PNv6Mx4Ry5y/SPoz3YAsjmrDRv?= =?us-ascii?Q?Eigr+ua6fVwSmR6PyMlmkE+xx8tJ2tz2L+n6AVYjfCj1TCXpjRonKce6aXd+?= =?us-ascii?Q?Rhjk/Exr1yMFhhwSfXtmyVx4dsOk?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY5PR12MB6405.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OMQkx5y4AtUCiiKN5mmi2d2o806sY39YoqEDR/nARo1IWOLrMHYtWqfR9vhL?= =?us-ascii?Q?84majCFD8bUC0kikIFnQMAHjV8bvXZYm95lDAMCMeLD86yK3ytBfiZg+7e8U?= =?us-ascii?Q?3FAY9+NZg9cpG9CKzBOnjo4gtUDpyuS/DwbBsP1WXcscx+xjSk/nkf2vJXjm?= =?us-ascii?Q?D9yuDbOJLKbte57YCdIU1AQ23MOYyGsB3tlz6TXZl4MxKYitecMu3ug4P6Zn?= =?us-ascii?Q?mkXExKKZj0t4WTqRAoyttkU4wlxcCmMmZR179nd96qufguXwt3jvSMYeAGKg?= =?us-ascii?Q?Oo5/uzPQ6Rzd9Qx0aFLBK8fS4o8YD01VAd/A9Q6tlOMUq7O4DuBblFSRDb1d?= =?us-ascii?Q?M+DgBQLyY3xI9BvhSkqCpOTzSIeDDy0qD9Pw8G+WeFQDMynOIW/ItRNRm2bH?= =?us-ascii?Q?RLu9OYAqA93FFnBarhfuSxm27KvYv6hI0WqOCohn7l8Rs6N2jc1zy1nQyoRN?= =?us-ascii?Q?4n57pZ4blVxybEjjjjJ+cDOiqkzY/Tj5CFxUMlOn64+7uIeSMDN8qboq61SC?= =?us-ascii?Q?ShUM7Y5y7uyvVD+yc4+bHK3mAqgZ/cue6yCRi5Bt/ZOnvzaKz0FabXcVYNOW?= =?us-ascii?Q?qtjfMrUHHxQFsW5la+I9Y5HNp3JVgqPfQedkznfFGMJUGNzabvggspBIUBVQ?= =?us-ascii?Q?WobC2MdRoezj5pEfh6OPUzupOQIukUfdVefM75Bzr/K+lY+4e6Ja6r61QpWN?= =?us-ascii?Q?NLXVwmFOJjc/u4+ClRS+/L9aiYpsOVHHieCWx+k99LOq9DGQAi4gDuGvYQzB?= =?us-ascii?Q?WWVlET5/eIRpOphGMB6+sleMhspqmyMxpQ4wx4SMbauJo9us7CwLw1U+nq7k?= =?us-ascii?Q?JcRVtHmtDGwPfGAW/gbxlaZHKvW76zHY28xI6AuwJNmSahgwIoyVyJjyWOGW?= =?us-ascii?Q?sOgVOn+w+cpHYV5dhodeTSTk06Ylv8HjXgzhs7iPAg7GPQYAux/nJbmIfNAq?= =?us-ascii?Q?UVsqynAzJhvfVwqOnDMx8Wk6td42ghKLec7n9SV+SOPz4k7UgAaf97xx0XGC?= =?us-ascii?Q?borVpmzolxRKyhzKkHCcBBkIlrZsClfQeN3S8J03p2eMusPH98DUccDso0Wk?= =?us-ascii?Q?avFeZzYYpdUppm0/9YWkVON3JcYCIgR2zOfTx9UcJ1BoqaMqB84y72I/H6XQ?= =?us-ascii?Q?lojlTzqt/Fj3xJwNM1sttUff6OAHo2sC/4LHx6ViQZ8ZkZv6BqMblC7U+6vx?= =?us-ascii?Q?lxDnvAaF1ZAhPyd1xiNsEZkzigPmLjw5FlrK6Yvbm94Fe3bBn3Ek/6CAyJbE?= =?us-ascii?Q?wm+RFs1SA/gSKN87wHUQndoZ6Kf2J+PY9LmmZ5ioNLUb7noNU2F3ymbNHpH3?= =?us-ascii?Q?jfqpUe9/qRYgRTGtRm61H+wzHw4dDaDrOpNrVgpI1ES6r9WxdtEDJ5DsdVUh?= =?us-ascii?Q?hb8hOqWzih5yBhJxUHCTc2jcFWtMn+NabeL7S3wQdGMUk5SebJq63vNY3vk+?= =?us-ascii?Q?L/Tzcy/mNGPmXkMBs0G6pDTi0JK608b9YkBRgZIa8rBfu0zyezDaNsDgjcgx?= =?us-ascii?Q?CpAVP8Mi/fAIbcBUJbWkYOVHsEI2UfdLPXi+0iaq2cnv2n/LnXfILWlLxjKW?= =?us-ascii?Q?Lw1Y7cGFteANNd36vunt22dJjS47naDoTQ4ec6Aw?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a51ff448-6b65-4477-838c-08dd213d7ea5 X-MS-Exchange-CrossTenant-AuthSource: CY5PR12MB6405.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Dec 2024 21:30:15.9004 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RvK2FffKoZn2znh7FY+PrI545ZRyX8QsXrqWFHFvZUIyK5KrQj49vtsd8f2G3bntpqINmLIvbcdqSFqILaBeCg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB7507 Hi Changwoo, On Fri, Dec 20, 2024 at 03:20:21PM +0900, Changwoo Min wrote: ... > +/** > + * scx_bpf_now_ns - Returns a high-performance monotonically non-decreasing > + * clock for the current CPU. The clock returned is in nanoseconds. > + * > + * It provides the following properties: > + * > + * 1) High performance: Many BPF schedulers call bpf_ktime_get_ns() frequently > + * to account for execution time and track tasks' runtime properties. > + * Unfortunately, in some hardware platforms, bpf_ktime_get_ns() -- which > + * eventually reads a hardware timestamp counter -- is neither performant nor > + * scalable. scx_bpf_now_ns() aims to provide a high-performance clock by > + * using the rq clock in the scheduler core whenever possible. > + * > + * 2) High enough resolution for the BPF scheduler use cases: In most BPF > + * scheduler use cases, the required clock resolution is lower than the most > + * accurate hardware clock (e.g., rdtsc in x86). scx_bpf_now_ns() basically > + * uses the rq clock in the scheduler core whenever it is valid. It considers > + * that the rq clock is valid from the time the rq clock is updated > + * (update_rq_clock) until the rq is unlocked (rq_unpin_lock). > + * > + * 3) Monotonically wq X`on-decreasing clock for the same CPU: scx_bpf_now_ns() > + * guarantees the clock never goes backward when comparing them in the same > + * CPU. On the other hand, when comparing clocks in different CPUs, there > + * is no such guarantee -- the clock can go backward. It provides a > + * monotonically *non-decreasing* clock so that it would provide the same > + * clock values in two different scx_bpf_now_ns() calls in the same CPU > + * during the same period of when the rq clock is valid. > + */ > +__bpf_kfunc u64 scx_bpf_now_ns(void) > +{ > + struct rq *rq; > + u64 clock; > + > + preempt_disable(); > + > + /* > + * If the rq clock is valid, use the cached rq clock. > + * Otherwise, return a fresh rq glock. s/glock/clock/ > + * > + * Note that scx_bpf_now_ns() is re-entrant between a process > + * context and an interrupt context (e.g., timer interrupt). > + * However, we don't need to consider the race between them > + * because such race is not observable from a caller. > + */ > + rq = this_rq(); > + clock = READ_ONCE(rq->scx.clock); > + > + if (!(READ_ONCE(rq->scx.flags) & SCX_RQ_CLK_VALID)) { > + clock = sched_clock_cpu(cpu_of(rq)); > + > + /* > + * The rq clock is updated outside of the rq lock. > + * In this case, keep the updated rq clock invalid so the next > + * kfunc call outside the rq lock gets a fresh rq clock. > + */ > + scx_rq_clock_update(rq, clock, false); > + } I was wondering if we could use a special value for clock (like ~0ULL or similar) to mark the clock as invalid. This way, we could get rid of the extra READ_ONCE(rq->scx.flags) logic for checking the clock validity. And if the actual clock happens to match the special value, we'd simply re-read the TSC, which shouldn't be a big issue in theory. That said, I'm not sure if this would yield any real performance benefits, so the current approach is probably fine as it is, therefore feel free to ignore this. -Andrea