From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pdm-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id B4A081FF18C for <inbox@lore.proxmox.com>; Mon, 12 May 2025 15:37:51 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 4554E62EF; Mon, 12 May 2025 15:38:13 +0200 (CEST) From: Lukas Wagner <l.wagner@proxmox.com> To: pdm-devel@lists.proxmox.com Date: Mon, 12 May 2025 15:37:24 +0200 Message-Id: <20250512133725.262263-26-l.wagner@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250512133725.262263-1-l.wagner@proxmox.com> References: <20250512133725.262263-1-l.wagner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.018 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_SHORT 0.001 Use of a URL Shortener for very short URL SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pdm-devel] [PATCH proxmox-datacenter-manager v4 25/26] metric collection: skip missed timer ticks X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion <pdm-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pdm-devel/> List-Post: <mailto:pdm-devel@lists.proxmox.com> List-Help: <mailto:pdm-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Datacenter Manager development discussion <pdm-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" <pdm-devel-bounces@lists.proxmox.com> The default behavior of `tokio::time::Interval` when a tick is missed is 'burst', which is to shorten the timer intervals until the original alignment is restored, while keeping the *number of ticks* the same the same as expected. Example from the official tokio docs [1] for burst mode: Expected: | 1 | 2 | 3 | 4 | 5 | 6 | Actual: | work ---| delay |work|work|work-|work-----| For metric collection, we do not really gain anything from bursting missed ticks. For us, 'skip' is fine. There, the alignment is immediately restored by skipping any ticks that have been missed: Expected: | 1 | 2 | 3 | 4 | 5 | 6 | Actual: | work ---| delay |work---| work----| work----| https://docs.rs/tokio/latest/tokio/time/enum.MissedTickBehavior.html Signed-off-by: Lukas Wagner <l.wagner@proxmox.com> Reviewed-by: Maximiliano Sandoval <m.sandoval@proxmox.com> --- Notes: New in v2. server/src/metric_collection/collection_task.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/server/src/metric_collection/collection_task.rs b/server/src/metric_collection/collection_task.rs index 39cba7fb..44b9ac02 100644 --- a/server/src/metric_collection/collection_task.rs +++ b/server/src/metric_collection/collection_task.rs @@ -9,7 +9,7 @@ use tokio::{ mpsc::{Receiver, Sender}, oneshot, OwnedSemaphorePermit, Semaphore, }, - time::Interval, + time::{Interval, MissedTickBehavior}, }; use proxmox_section_config::typed::SectionConfigData; @@ -211,6 +211,13 @@ impl MetricCollectionTask { fn setup_timer(interval: u64) -> (Interval, Instant) { log::debug!("setting metric collection interval timer to {interval} seconds.",); let mut timer = tokio::time::interval(Duration::from_secs(interval)); + + // If we miss a tick because a previous collection run took too long, we want to + // tick as soon as possible, but we do not need to repeat missing ticks. + // We do want to stay aligned, though. + // https://docs.rs/tokio/latest/tokio/time/enum.MissedTickBehavior.html#variant.Skip + timer.set_missed_tick_behavior(MissedTickBehavior::Skip); + let first_run = task_utils::next_aligned_instant(interval); timer.reset_at(first_run.into()); -- 2.39.5 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel