From owner-freebsd-questions@FreeBSD.ORG Sun Sep 9 22:18:15 2007 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3D2BB16A41A for ; Sun, 9 Sep 2007 22:18:15 +0000 (UTC) (envelope-from fbsd.questions@rachie.is-a-geek.net) Received: from snoogles.rachie.is-a-geek.net (66-230-99-27-cdsl-rb1.nwc.acsalaska.net [66.230.99.27]) by mx1.freebsd.org (Postfix) with ESMTP id E4C0813C45D for ; Sun, 9 Sep 2007 22:18:14 +0000 (UTC) (envelope-from fbsd.questions@rachie.is-a-geek.net) Received: from localhost (localhost [127.0.0.1]) by snoogles.rachie.is-a-geek.net (Postfix) with ESMTP id 2F79A1CCA6 for ; Sun, 9 Sep 2007 14:18:14 -0800 (AKDT) From: Mel To: freebsd-questions@freebsd.org Date: Mon, 10 Sep 2007 00:18:12 +0200 User-Agent: KMail/1.9.7 References: <20070909205025.GA40102@glitch.rwxrwxrwx.net> <20070909205759.GA35519@owl.midgard.homeip.net> <20070909220445.GA40462@glitch.rwxrwxrwx.net> In-Reply-To: <20070909220445.GA40462@glitch.rwxrwxrwx.net> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200709100018.12989.fbsd.questions@rachie.is-a-geek.net> Subject: Re: Getting the CPU frequency in C X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Sep 2007 22:18:15 -0000 On Monday 10 September 2007 00:04:45 Martin Tournoij wrote: > On Sun 09 Sep 2007 22:09, Erik Trulsson wrote: > > On Sun, Sep 09, 2007 at 10:50:25PM +0200, Martin Tournoij wrote: > > > I'm trying to get the CPU frequency in C: > > > > > > #include > > > #include > > > #include > > > #include > > > #include > > > #include > > > > > > int main() > > > { > > > int mib[2]; > > > size_t size; > > > struct clockinfo clockrate; > > > > > > mib[0] = CTL_KERN; > > > mib[1] = KERN_CLOCKRATE; > > > size = sizeof clockrate; > > > sysctl(mib, 2, &clockrate, &size, NULL, 0); > > > > > > fprintf(stdout, "hz: %i\n", clockrate.hz); > > > fprintf(stdout, "tick: %i\n", clockrate.tick); > > > fprintf(stdout, "spare: %i\n", clockrate.spare); > > > fprintf(stdout, "stathz: %i\n", clockrate.stathz); > > > fprintf(stdout, "profhz: %i\n", clockrate.profhz); > > > > > > return 0; > > > } > > > > > > I tried to run this on two machines (one machine with hw.clockrate: > > > 1378 and the other 797) and it outputs the same on both: > > > hz: 1000 > > > tick: 1000 > > > spare: 0 > > > stathz: 133 > > > profhz: 666 > > > > > > The profhz value suggest the devil is at work :D although it's probably > > > a some stupid mistake on my part :/ Can anyone help? > > > > None of the kern.clockrate entries has any particular relationship with > > the CPU clock frequency, so it is not unexpected that you would get the > > same output from both machines. > > > > I think looking at hw.clockrate is the most portable you can get. > > If your CPU is using Cool'n'Quiet or the Intel equivalent you can also > > look at dev.cpu.N.freq for the current frequency. > > I got confused because they both have the same name ... do'h > > hw.clockrate doesn't seem to available through C(?), exec-ing sysctl > hw.clockrate would work, but that's not very elegant... int main() { const char mib[] = "hw.clockrate"; size_t size = sizeof(int); int clockrate; sysctlbyname(mib, (void *)&clockrate, &size, NULL, 0); fprintf(stdout, "clockrate: %i\n", clockrate); return 0; } -- Mel