Detecting Power7 in C
Jason Bacon
bacon4000 at gmail.com
Thu Jun 9 18:43:52 UTC 2016
On 06/09/16 10:47, Justin Hibbits wrote:
> On Jun 9, 2016, at 9:09 AM, Jason Bacon wrote:
>
>>
>> I'm porting the SLURM task/affinity plugin to FreeBSD and wondering
>> what's the best way to detect whether we're running on a power7
>> processor.
>>
>> The Linux code is below. I could do something similar with
>> dmesg.boot on FreeBSD, but hoping there's a more elegant way within a
>> C program.
>>
>> If I have to use dmesg.boot, what string would I be looking for? I
>> don't have a power7 installation at the moment.
>>
>> Thanks,
>>
>> Jason
>>
>> FILE *cpu_info_file;
>>
>> char buffer[128];
>> char* _cpuinfo_path = "/proc/cpuinfo";
>> cpu_info_file = fopen(_cpuinfo_path, "r");
>> if (cpu_info_file == NULL) {
>> error("_get_is_power: error %d opening %s",
>> errno,
>> _cpuinfo_path);
>> return false; /* assume not power processor */
>> }
>>
>> is_power = 0;
>> while (fgets(buffer, sizeof(buffer), cpu_info_file) !=
>> NULL) {
>> if (strstr(buffer, "POWER7")) {
>> is_power = 1;
>> break;
>> }
>> }
>> fclose(cpu_info_file);
>
> You can use the hw.model sysctl. For POWER7, the string you would
> receive is "POWER7". For all the model strings you can get, see the
> strings in the models[] table in sys/powerpc/powerpc/cpu.c .
>
> - Justin
Very nice. Confirmed with the test driver below...
Thanks,
Jason
#include <stdio.h>
#include <sysexits.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#define BUFFLEN 128
int main(int argc,char *argv[])
{
char buff[BUFFLEN+1];
size_t len = BUFFLEN;
sysctlbyname("hw.model", buff, &len, NULL, 0);
puts(buff);
return EX_OK;
}
--
All wars are civil wars, because all men are brothers ... Each one owes
infinitely more to the human race than to the particular country in
which he was born.
-- Francois Fenelon
More information about the freebsd-ppc
mailing list