How can I determine the number of CPUs on an OpenBSD system, using either system tools or C code?

The technique I know of to count CPUs on other BSD platforms -- checking /var/run/dmesg.boot for certain strings, doesn't always seem to work.

More context: Unfortunately, I don't have an OpenBSD system available to play around with. I am trying to address the OpenBSD-specific test failures for a Perl module.


4 Answers 4


On OpenBSD you have:

sysctl hw.ncpu


sysctl hw.ncpufound

As explained in sysctl(3), ncpu is the number of CPU used by system and ncpufound is the number of CPU found by the system.

By the way, devio.us provides free shell account on OpenBSD servers.

  • Thanks for the great tip about devio.us! That will make it easier to answer all my other OpenBSD questions.
    – mob
    Nov 23, 2010 at 21:46

On FreeBSD, it's

sysctl -n hw.ncpu

and on Darwin

sysctl -n hw.availcpu

So perhaps it's similar? There is a system call, I think, but I'd poke around with the command line first.


The internet tells me to try this

dmesg | grep -i CPU


sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu'

is cpuinfo available?? I know you can have it on BSD variants..


In 6.4 ncpuonline was added and as of 7.0 sysctl(2) states:

HW_NCPU (hw.ncpu)
    The number of CPUs configured.
HW_NCPUFOUND (hw.ncpufound)
    The number of CPUs found.
HW_NCPUONLINE (hw.ncpuonline)
    The number of CPUs online.

Further information on ncpuonline is available in revision (openbsd-cvs).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.