From patchwork Fri Feb 10 14:09:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frederic Weisbecker X-Patchwork-Id: 55414 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp976197wrn; Fri, 10 Feb 2023 06:17:40 -0800 (PST) X-Google-Smtp-Source: AK7set8QeBHFu9hNP9VlHGau+gewMjV9cEU1BTM1IUZa4IWv1jkoQGiCf9f9IgFEojBxHlf42Z98 X-Received: by 2002:a17:907:8810:b0:8a9:e031:c4ae with SMTP id ro16-20020a170907881000b008a9e031c4aemr16968014ejc.2.1676038660110; Fri, 10 Feb 2023 06:17:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676038660; cv=none; d=google.com; s=arc-20160816; b=l2hKRJNC7iSkmLUa0CgdggH7IH4tMxH7F/cEJ23AdUs7fkSIQ3V4PVNgjqIt8jaA1F rodfLGhEQrroD84Eq/QuyyLpZKpufhnG4lyqdfqgINRFz0e2YWbjj6YYDnbgtFsEo0cd D2iE3u+JdYvO4Z1xAb8Bvs1nVaoOefJy/BQOCRdrHA6TdvRNSjl3hS+URAsWTieMJ/qk xYwavsKKgBHTbMrXkfuDcXhJngQlrBc4JPORDdT348RMDO8mlH6v8L4zq+LTgLi56eO+ dOTeejKsl2uo5wlQe7NW3yYV4lo0ercIGaCNGs2WcFHU+oN6DawcKkr5iDdsnkxuHKSg klMw== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=jIysAK2gsHywpDPJToTwx5ZYxE7w+TcG3IV0GL9jlQI=; b=XbHuleslNaQY2HFWXuBODYf6YxeAYgbvpzUKo5vo4U0EdJD6c6ljYlrbcdx12VgiJV zttR6I3xg2oZD6TVXP5COfWj5VddrNZZp6/FVPAjJG+8DoqSnGnS2EsgIDHw4j4r+ylN d4+N7opo0vJdCgQ1tpM0SgD1Brikq9HK3dE+/5mJjedyZ7miYHU1GrnVH7/hfmo6AuGc YAQg0pO8Ntx5pE5WXguv8Wvyp3gen98G6j06D5CG9Oy1ilpn0mo9rHPVQ1ECrACITIJV MeIsIsVHKjOXCjksfLDIqPLL8jNlWOmIgm5i26H1hPbbOech0fA0zskwjyVqwIDnfx0d ho8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=UELP+A9o; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 9-20020a170906020900b0089dcdd2c208si5204358ejd.921.2023.02.10.06.17.16; Fri, 10 Feb 2023 06:17:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=UELP+A9o; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232253AbjBJOJd (ORCPT + 99 others); Fri, 10 Feb 2023 09:09:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49894 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232429AbjBJOJ3 (ORCPT ); Fri, 10 Feb 2023 09:09:29 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E73E72195A for ; Fri, 10 Feb 2023 06:09:27 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 5991A61DCC for ; Fri, 10 Feb 2023 14:09:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9B65CC433D2; Fri, 10 Feb 2023 14:09:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1676038166; bh=FaVCj67P0RIyRZ9SOpAzVW9SW/d7Prf5e3bxlBOh2/o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UELP+A9oXEuDHgvQT4Xnlimx8oOHWewth4dIVn8V4qqePtaa/ZXu7V3shqHKtChaS RzaZ/LWoUWrmNvH9XjuWU3BFP2HVX6vy5Do9A3v1HMm9H4E92OnlPKxM1Jj3i31MTb G82c6Kbqsmnei+EGq7X+vI54fzZIh6jrl1VhmQbVdF8eZajz8ohT3SSa99OAEmbB88 gJcolUJZfUK9wK41WSZAHigUU7EduSYF/haH/a5/xH/o717V6rkk0RHGcOdmxvzXTF ZjlVx60HL42E0JxO5SXuYWjdAnRqHAvRzKIAk1zccJOYNCd82gQUTpn2aNdg/WFoSQ 5US2UPnpqtYdg== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Alexey Dobriyan , Peter Zijlstra , Wei Li , Mirsad Goran Todorovac , Thomas Gleixner , Yu Liao , Hillf Danton , Ingo Molnar Subject: [PATCH 1/6] timers/nohz: Restructure and reshuffle struct tick_sched Date: Fri, 10 Feb 2023 15:09:12 +0100 Message-Id: <20230210140917.279062-2-frederic@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230210140917.279062-1-frederic@kernel.org> References: <20230210140917.279062-1-frederic@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1757453913535083339?= X-GMAIL-MSGID: =?utf-8?q?1757453913535083339?= Restructure and group fields by access in order to optimize cache layout. While at it, also add missing kernel doc for two fields: @last_jiffies and @idle_expires. Reported-by: Thomas Gleixner Cc: Hillf Danton Cc: Yu Liao Cc: Ingo Molnar Cc: Wei Li Cc: Alexey Dobriyan Cc: Mirsad Goran Todorovac Cc: Peter Zijlstra Signed-off-by: Frederic Weisbecker --- kernel/time/tick-sched.h | 66 +++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/kernel/time/tick-sched.h b/kernel/time/tick-sched.h index 504649513399..c6663254d17d 100644 --- a/kernel/time/tick-sched.h +++ b/kernel/time/tick-sched.h @@ -22,65 +22,81 @@ enum tick_nohz_mode { /** * struct tick_sched - sched tick emulation and no idle tick control/stats - * @sched_timer: hrtimer to schedule the periodic tick in high - * resolution mode - * @check_clocks: Notification mechanism about clocksource changes - * @nohz_mode: Mode - one state of tick_nohz_mode + * * @inidle: Indicator that the CPU is in the tick idle mode * @tick_stopped: Indicator that the idle tick has been stopped * @idle_active: Indicator that the CPU is actively in the tick idle mode; * it is reset during irq handling phases. - * @do_timer_lst: CPU was the last one doing do_timer before going idle + * @do_timer_last: CPU was the last one doing do_timer before going idle * @got_idle_tick: Tick timer function has run with @inidle set + * @stalled_jiffies: Number of stalled jiffies detected across ticks + * @last_tick_jiffies: Value of jiffies seen on last tick + * @sched_timer: hrtimer to schedule the periodic tick in high + * resolution mode * @last_tick: Store the last tick expiry time when the tick * timer is modified for nohz sleeps. This is necessary * to resume the tick timer operation in the timeline * when the CPU returns from nohz sleep. * @next_tick: Next tick to be fired when in dynticks mode. * @idle_jiffies: jiffies at the entry to idle for idle time accounting + * @idle_waketime: Time when the idle was interrupted + * @idle_entrytime: Time when the idle call was entered + * @nohz_mode: Mode - one state of tick_nohz_mode + * @last_jiffies: Base jiffies snapshot when next event was last computed + * @timer_expires_base: Base time clock monotonic for @timer_expires + * @timer_expires: Anticipated timer expiration time (in case sched tick is stopped) + * @next_timer: Expiry time of next expiring timer for debugging purpose only + * @idle_expires: Next tick in idle, for debugging purpose only * @idle_calls: Total number of idle calls * @idle_sleeps: Number of idle calls, where the sched tick was stopped - * @idle_entrytime: Time when the idle call was entered - * @idle_waketime: Time when the idle was interrupted * @idle_exittime: Time when the idle state was left * @idle_sleeptime: Sum of the time slept in idle with sched tick stopped * @iowait_sleeptime: Sum of the time slept in idle with sched tick stopped, with IO outstanding - * @timer_expires: Anticipated timer expiration time (in case sched tick is stopped) - * @timer_expires_base: Base time clock monotonic for @timer_expires - * @next_timer: Expiry time of next expiring timer for debugging purpose only * @tick_dep_mask: Tick dependency mask - is set, if someone needs the tick - * @last_tick_jiffies: Value of jiffies seen on last tick - * @stalled_jiffies: Number of stalled jiffies detected across ticks + * @check_clocks: Notification mechanism about clocksource changes */ struct tick_sched { - struct hrtimer sched_timer; - unsigned long check_clocks; - enum tick_nohz_mode nohz_mode; - + /* Common flags */ unsigned int inidle : 1; unsigned int tick_stopped : 1; unsigned int idle_active : 1; unsigned int do_timer_last : 1; unsigned int got_idle_tick : 1; + /* Tick handling: jiffies stall check */ + unsigned int stalled_jiffies; + unsigned long last_tick_jiffies; + + /* Tick handling */ + struct hrtimer sched_timer; ktime_t last_tick; ktime_t next_tick; unsigned long idle_jiffies; - unsigned long idle_calls; - unsigned long idle_sleeps; - ktime_t idle_entrytime; ktime_t idle_waketime; - ktime_t idle_exittime; - ktime_t idle_sleeptime; - ktime_t iowait_sleeptime; + + /* Idle entry */ + ktime_t idle_entrytime; + + /* Tick stop */ + enum tick_nohz_mode nohz_mode; unsigned long last_jiffies; - u64 timer_expires; u64 timer_expires_base; + u64 timer_expires; u64 next_timer; ktime_t idle_expires; + unsigned long idle_calls; + unsigned long idle_sleeps; + + /* Idle exit */ + ktime_t idle_exittime; + ktime_t idle_sleeptime; + ktime_t iowait_sleeptime; + + /* Full dynticks handling */ atomic_t tick_dep_mask; - unsigned long last_tick_jiffies; - unsigned int stalled_jiffies; + + /* Clocksource changes */ + unsigned long check_clocks; }; extern struct tick_sched *tick_get_tick_sched(int cpu);