Date: Fri, 11 Sep 2009 11:05:57 -0400 From: Pierre-Luc Drouin <pldrouin@pldrouin.net> To: freebsd-stable@freebsd.org Subject: Re: How to enable CPU turbo mode on FreeBSD? Message-ID: <4AAA6755.7070502@pldrouin.net> In-Reply-To: <20090911074123.00006179@unknown> References: <4AA9A07C.4050200@pldrouin.net> <20090911074123.00006179@unknown>
next in thread | previous in thread | raw e-mail | index | archive | help
Bruce Cran wrote: > On Thu, 10 Sep 2009 20:57:32 -0400 > Pierre-Luc Drouin <pldrouin@pldrouin.net> wrote: > > >> Hi, >> >> I have an overclocked i7 920 CPU for which I have enabled Turbo Mode >> in the BIOS (21x multiplier). The base clock is set at 190 MHz, so >> the CPU frequency with Turbo mode activated should be 3990 MHz. >> However the maximum value FreeBSD amd64 shows for the CPU frequency >> in dmesg and sysctl is 3790 MHz. How can I enable the Turbo Mode? >> >> CPU: Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz (3790.52-MHz >> K8-class CPU) >> >> machdep.acpi_timer_freq: 3579545 >> machdep.tsc_freq: 3790522507 >> machdep.i8254_freq: 1193182 >> dev.cpu.0.freq: 349 >> dev.cpu.0.freq_levels: 2793/130000 2443/113750 2094/97500 1745/81250 >> 1396/65000 1047/48750 698/32500 349/16250 >> > > You may be able to use the cpuctl kernel module with sysutils/x86info > to see when the CPUs are using Turbo mode. I haven't had any success > yet but I know in Windows the System control panel reported the 2.66GHz > CPU running at 2.83GHz without me doing anything, so I guess FreeBSD > should be doing the same. > > So I managed to test that the Turbo Mode is working. Here is how I tested it, if it can be useful for other people in the future: I wrote this very dumb program in C (compiled using gcc -lpthread -o test test.c): #include <stdlib.h> #include <pthread.h> #include <stdio.h> int main(int nargs, char* args[]); void* floop(void* args); long long int niters; int main(int nargs, char* args[]) { int nthrs; int i; pthread_t *threads; --nargs; ++args; if(nargs!=2) { fprintf(stderr,"Usage: loop nthreads niters\n"); return 1; } sscanf(args[0],"%i",&nthrs); sscanf(args[1],"%lli",&niters); printf("Number of threads: %i\n",nthrs); printf("Number of iterations: %lli\n",niters); threads=(pthread_t*)malloc(nthrs*sizeof(pthread_t)); for(i=nthrs-1; i>=0; --i) pthread_create(threads+i,NULL,floop,NULL); for(i=nthrs-1; i>=0; --i) pthread_join(threads[i],NULL); free(threads); return 0; } void* floop(void* args){ long long int i; for(i=niters-1; i>=0; --i); return NULL; } I ran it with 8 threads and 150 000 000 000 iterations/threads using time ./test 8 150000000000 I got a user time of 1827.24 sec with turbo and 1908.69 sec without, a 4.5% speed difference, which is pretty close to the expected 5% (1-21/20 where 21/20 is the ratio of CPU multipliers with and without turbo for my i7 920 CPU)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4AAA6755.7070502>