Task to busy one CPU 100% for a period of time?
William A. Mahaffey III
wam at hiwaay.net
Sun Jan 10 16:49:28 UTC 2016
On 01/10/16 10:03, Ian Smith wrote:
> Hi crew, hopefully refreshed and sharp as tacks from a holiday!
> I've been doing extensive testing of load average reporting using
> different eventtimers (HPET and LAPIC) on stable/9 on a Lenovo X200,
> 2.4GHz Core2Duo, at idle and with one, two and four fully CPU-bound
> processes that are configured to run for ~15.5 minutes on my system.
> When load averages are being correctly accounted, this produces results
> for one-minute averages of 0.00 at idle, 0.99-1.00 with one such task
> running, 1.99-2.00 for two and 3.99-4.00 for four, as expected. 5 and
> 15 minute LAs respectively take longer to get up toward the same points,
> and correspondingly much longer to sink back to 0.00, also as expected.
> When not being correctly accounted, in otherwise the same environment,
> this method provides good clues to the extent of errors over this range.
> For this I've been using a program of mine that I know only does a very
> large number of fixed and floating point operations, and beyond reading
> a config file and around 7 1/2 KB records, uses no I/O nor other system
> calls at all in its main loop, when configured with 'nowrite' - or each
> instance would generate a 2.4GB 72-minute 96kHz 24-bit stereo .wav file!
> However it's a large Pascal program, not ready for release nor in a form
> that others could readily use to reproduce my results, and I'm at the
> point where I need to be able to post a method of doing just that.
> So I'm looking for some utility, preferably in the base system but a
> port/pkg could do, that can just burn one CPU (ie is single-threaded)
> for a specified number of iterations. And not for a specified time -
> which would use system time to query time - nor in any interpreted
> (syscall-rich) language.
> A little pre- and/or post-loop reporting is not a problem.
> I'm likely missing something quite obvious; suggestions welcome.
> cheers, Ian (please cc me, I'm subscribed to the daily digest)
> freebsd-questions at freebsd.org mailing list
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe at freebsd.org"
Well, this (benchmarking) really strikes a chord w/ me, I have done
*extensive* benchmarking of compiled code (simple benchmarking code &
full-up analysis codes) under different compiler/OS combos over 25-ish
years. FWIW most compilers I am familiar with have an option to compile
single-core/thread/CPU code, which might serve your needs. Also most
recent (last 15-ish years) pay attention to environment variables such
as OMP_NUM_THREADS & kin, even if they don't use OpenMP
coding/directives. This can be used to make 1 process use a specified
number of threads/cores/CPU's, up to a compiled-in/hardwired limit.
William A. Mahaffey III
"The M1 Garand is without doubt the finest implement of war
ever devised by man."
-- Gen. George S. Patton Jr.
More information about the freebsd-questions