Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 9 Jun 2016 13:43:50 -0500
From:      Jason Bacon <bacon4000@gmail.com>
To:        Justin Hibbits <chmeeedalf@gmail.com>
Cc:        "freebsd-ppc@freebsd.org" <freebsd-ppc@freebsd.org>
Subject:   Re: Detecting Power7 in C
Message-ID:  <b182ab99-1446-1426-defe-b56c9e21bf9a@gmail.com>
In-Reply-To: <3FD85BCC-4304-4DBA-8B72-5A6A79C120A6@gmail.com>
References:  <765d3292-78ae-8b02-8a5b-43bafc68d9e8@gmail.com> <3FD85BCC-4304-4DBA-8B72-5A6A79C120A6@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?b182ab99-1446-1426-defe-b56c9e21bf9a>