2003-09-12 14:41:29

by Dan Behman

[permalink] [raw]
Subject: Hyperthreading: easiest userland method?

Hi,

I have a need to programmatically determine whether or not hyperthreading
is enabled (and in use) for licensing reasons in my application.
Currently, I know of two ways to do this:

1) parse /proc/cpuinfo for "processor id"
2) port Intel's documented method (written for Windows) to directly query
the CPUs

Both methods have drawbacks - 1) relying on specific text that could change
is a bad idea; 2) this doesn't take into account whether or not Linux
and/or the BIOS is making use of the hyperthreading.

>From scouring the archives and the net, it doesn't seem like there's any
API that currently exists, but perhaps I've missed something.
/proc/cpuinfo gathers its information from somewhere - is there a way in
userland to bypass /proc/cpuinfo and directly get this data manually?

I'm interested in both 2.4 and 2.6 implementations and would like to be
personally CC'ed on any repsonses.

Thanks in advance!

Dan Behman.
IBM Canada Ltd.


2003-09-12 14:56:13

by Eric Dumazet

[permalink] [raw]
Subject: Re: Hyperthreading: easiest userland method?

Hi

Have you checked x86info ? http://www.codemonkey.org.uk/projects/x86info/

You may ask Dave Jones to add a single option that could never change, and
returns TRUE or FALSE, depending on HT enabled CPUS.


From: "Dan Behman" <[email protected]>
> Hi,
>
> I have a need to programmatically determine whether or not hyperthreading
> is enabled (and in use) for licensing reasons in my application.
> Currently, I know of two ways to do this:
>
> 1) parse /proc/cpuinfo for "processor id"
> 2) port Intel's documented method (written for Windows) to directly query
> the CPUs
>
> Both methods have drawbacks - 1) relying on specific text that could
change
> is a bad idea; 2) this doesn't take into account whether or not Linux
> and/or the BIOS is making use of the hyperthreading.
>
> >From scouring the archives and the net, it doesn't seem like there's any
> API that currently exists, but perhaps I've missed something.
> /proc/cpuinfo gathers its information from somewhere - is there a way in
> userland to bypass /proc/cpuinfo and directly get this data manually?
>
> I'm interested in both 2.4 and 2.6 implementations and would like to be
> personally CC'ed on any repsonses.
>
> Thanks in advance!
>
> Dan Behman.
> IBM Canada Ltd.

2003-09-12 15:12:08

by Chris Friesen

[permalink] [raw]
Subject: Re: Hyperthreading: easiest userland method?

Dan Behman wrote:
> Hi,
>
> I have a need to programmatically determine whether or not hyperthreading
> is enabled (and in use) for licensing reasons in my application.
> Currently, I know of two ways to do this:


> From scouring the archives and the net, it doesn't seem like there's any
> API that currently exists, but perhaps I've missed something.
> /proc/cpuinfo gathers its information from somewhere - is there a way in
> userland to bypass /proc/cpuinfo and directly get this data manually?

You could probably load a kernel module to check this stuff.

For 2.4, in arch/i386/kernel/setup.c, look for the code that checks for
X86_FEATURE_HT. You should be able to just copy that logic into a
kernel module and export the result via /proc.

Chris

--
Chris Friesen | MailStop: 043/33/F10
Nortel Networks | work: (613) 765-0557
3500 Carling Avenue | fax: (613) 765-2986
Nepean, ON K2H 8E9 Canada | email: [email protected]

2003-09-12 17:01:22

by Nakajima, Jun

[permalink] [raw]
Subject: RE: Hyperthreading: easiest userland method?

For licensing purposes, we recommend the number of the physical
packages, rather than the number of logical processors. We can provide a
tool (with source code) that counts the number of the physical packages
in the system.

Thanks,
Jun

> -----Original Message-----
> From: Dan Behman [mailto:[email protected]]
> Sent: Friday, September 12, 2003 7:41 AM
> To: [email protected]
> Subject: Hyperthreading: easiest userland method?
>
> Hi,
>
> I have a need to programmatically determine whether or not
hyperthreading
> is enabled (and in use) for licensing reasons in my application.
> Currently, I know of two ways to do this:
>
> 1) parse /proc/cpuinfo for "processor id"
> 2) port Intel's documented method (written for Windows) to directly
query
> the CPUs
>
> Both methods have drawbacks - 1) relying on specific text that could
> change
> is a bad idea; 2) this doesn't take into account whether or not Linux
> and/or the BIOS is making use of the hyperthreading.
>
> From scouring the archives and the net, it doesn't seem like there's
any
> API that currently exists, but perhaps I've missed something.
> /proc/cpuinfo gathers its information from somewhere - is there a way
in
> userland to bypass /proc/cpuinfo and directly get this data manually?
>
> I'm interested in both 2.4 and 2.6 implementations and would like to
be
> personally CC'ed on any repsonses.
>
> Thanks in advance!
>
> Dan Behman.
> IBM Canada Ltd.
>
> -
> To unsubscribe from this list: send the line "unsubscribe
linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/