From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wi0-x236.google.com (mail-wi0-x236.google.com [IPv6:2a00:1450:400c:c05::236]) by dpdk.org (Postfix) with ESMTP id 5C9554BFE for ; Wed, 20 Mar 2013 17:08:29 +0100 (CET) Received: by mail-wi0-f182.google.com with SMTP id hi18so2020302wib.9 for ; Wed, 20 Mar 2013 09:07:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:from:to:subject:date:message-id:x-mailer:in-reply-to :references:in-reply-to:references:x-gm-message-state; bh=Y71v780mmKlkbFWX7Hagg8tO5dCP9zmSLO66pH28GUw=; b=WOPmOpDce2HCXanNFArdBllNJHeGq2D28SwwaQOv4/R95ggM2+6Dc49qXXjvT8S2mH h87OO0aOXAQPaRKBJDBo3J0tynv1c05bl1UDRuoR26+3A168v28v7vWlvIL+SEyEC9kT +OxqFnfzmR0t++JFLGvNLSmszesk7UPmfnuDDULYgqp9Ys1DzlI9bjHU/JN1jkiuEOK7 XXGt9sYtbP2ea5UobdatOz8lVkCNDufS9wLdZgmgVg+L+xn1b/0kSHuQACwLQwsW5Adv 7mpEuqd6VfUp8buOTannloxYUwpn2kn7i6qULZM/qTMms7HtmlxyU51hZujYdpBYBoLN 29dA== X-Received: by 10.194.120.169 with SMTP id ld9mr11658545wjb.24.1363795650240; Wed, 20 Mar 2013 09:07:30 -0700 (PDT) Received: from 6wind.com (6wind.net2.nerim.net. [213.41.180.237]) by mx.google.com with ESMTPS id j4sm7680117wiz.10.2013.03.20.09.07.27 (version=TLSv1 cipher=RC4-SHA bits=128/128); Wed, 20 Mar 2013 09:07:29 -0700 (PDT) Received: by 6wind.com (sSMTP sendmail emulation); Wed, 20 Mar 2013 17:07:09 +0100 From: Thomas Monjalon To: dev@dpdk.org Date: Wed, 20 Mar 2013 17:05:05 +0100 Message-Id: X-Mailer: git-send-email 1.7.2.5 In-Reply-To: References: In-Reply-To: References: X-Gm-Message-State: ALoCoQnY9EnfdJ2wxN0I0M69/pN5Y80dgLLnWE90cGilS2mC0gQpUuVgAL431eS8y+rzv2WFvuiP Subject: [dpdk-dev] [PATCH 17/22] timer: get TSC frequency from /proc/cpuinfo X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Mar 2013 16:08:30 -0000 Frequency was guessed by sleeping 1 sec. Now, read frequency from cpuinfo first. Keep sleep method as fallback. Acked-by: Ivan Boule Signed-off-by: Thomas Monjalon --- lib/librte_eal/linuxapp/eal/eal_hpet.c | 47 ++++++++++++++++++++++++++++--- 1 files changed, 42 insertions(+), 5 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_hpet.c b/lib/librte_eal/linuxapp/eal/eal_hpet.c index de05151..d41e857 100644 --- a/lib/librte_eal/linuxapp/eal/eal_hpet.c +++ b/lib/librte_eal/linuxapp/eal/eal_hpet.c @@ -129,14 +129,51 @@ hpet_msb_inc(__attribute__((unused)) void *arg) } } -static inline void -set_rdtsc_freq(void) +static uint64_t +get_tsc_freq_from_cpuinfo(void) { - uint64_t start; + char line[256]; + FILE *stream; + double dmhz; + uint64_t freq = 0; + + stream = fopen("/proc/cpuinfo", "r"); + if (!stream) { + RTE_LOG(WARNING, EAL, "WARNING: Unable to open /proc/cpuinfo\n"); + return 0; + } + + while (fgets(line, sizeof line, stream)) { + if (sscanf(line, "cpu MHz\t: %lf", &dmhz) == 1) { + freq = (uint64_t)(dmhz * 1000000UL); + break; + } + } + + fclose(stream); + return freq; +} - start = rte_rdtsc(); +static uint64_t +get_tsc_freq_from_sleep(void) +{ + uint64_t start = rte_rdtsc(); sleep(1); - eal_hpet_resolution_hz = rte_rdtsc() - start; + return rte_rdtsc() - start; +} + +static inline void +set_rdtsc_freq(void) +{ + uint64_t freq; + freq = get_tsc_freq_from_cpuinfo(); + if (!freq) { + RTE_LOG(WARNING, EAL, "WARNING: Cannot read CPU clock\n"); + freq = get_tsc_freq_from_sleep(); + } + RTE_LOG(INFO, EAL, "TSC clock @ %lu MHz\n", + (unsigned long) (freq / (1000000UL))); + eal_hpet_resolution_hz = freq; eal_hpet_resolution_fs = (uint32_t) ((1.0 / eal_hpet_resolution_hz) / 1e-15); } -- 1.7.2.5