Получаване на ID на процесора в Linux

В Microsoft Windows можете да получите ID на процесора (не ID на процеса) чрез WMI, който в този случай (само при придобиване на ID на процесор) се основава на инструкция за CPUID
Има ли подобен метод за получаване на този ID на Linux?


person Community    schedule 01.12.2013    source източник
comment
погледнете тук: [get-CPUID-program][1] Малката c-програма показва как върви. [1]: stackoverflow.com/questions/15368394/   -  person user3054986    schedule 01.12.2013


Отговори (2)


Не знам какво е WMI и MS-Windows "CPUID инструкция", тъй като не знам или използвам MS-Windows (малко потребители тук го знаят). Така че не мога да кажа със сигурност дали това предлага същата информация, но опитайте с cat /proc/cpuinfo. Ако имате нужда от конкретна стойност, можете да grep я изведете лесно.

Ако трябва да направите това от програма, тогава можете да използвате файловите помощни средства, за да прочетете такава информация. Винаги имайте предвид един от най-основните принципи на операционните системи в стил 'unix': всичко е файл.

person arkascha    schedule 01.12.2013
comment
това е набор от информация за wmi WMI И инструкцията за CPUID не е ограничена до Microsoft Windows, това всъщност е инструкция за асемблиране, вижте CPUID - person ; 01.12.2013
comment
Мислите, че не съм се опитал да видя cpuinfo файла? Тъй като не получих резултата, който очаквах, публикувах този въпрос - person ; 01.12.2013
comment
За съжаление не мога да позная дали сте се опитали да прочетете псевдо файловата система на proc. Не сте писали нищо за това, така че предположих, че не сте. От начина, по който питате, предположих, че сте нов в Linux, така че реших, че намек в тази посока може да помогне. Това може да е грешно заключение от моя страна, не го разбирайте погрешно. Но ако не напишете какво вече сте опитали, тогава не можете да очаквате да знаем за това! И тъй като дори сега не сте написали какво все още ви липсва в тази информация, не мога да помогна с това. съжалявам - person arkascha; 01.12.2013
comment
Аз съм този, който трябва да съжалява, че не го написах :) - person ; 01.12.2013

За контекста на въпроса на OP, ProcessorID стойността, върната от WMI, е документирано по следния начин:

Информация за процесора, която описва характеристиките на процесора. За CPU от клас x86 форматът на полето зависи от поддръжката на процесора на инструкцията CPUID. Ако инструкцията се поддържа, свойството съдържа 2 (две) DWORD форматирани стойности. Първото е отместване от 08h-0Bh, което е EAX стойността, която CPUID инструкцията връща с входен EAX, зададен на 1. Второто е отместване от 0Ch-0Fh, което е EDX стойността, която инструкцията връща. Само първите два байта от свойството са значими и съдържат съдържанието на DX регистъра при нулиране на процесора - всички останали са зададени на 0 (нула), а съдържанието е във формат DWORD.

Като пример, в моята система:

C:\>wmic path Win32_Processor get ProcessorId
ProcessorId
BFEBFBFF000206A7

Обърнете внимание, че ProcessorID е просто двоично кодиран формат на информация, обикновено наличен в други формати, по-специално подпис (Family/Model/Stepping/Processor type) и флагове на функции. Ако имате нужда само от информацията, може всъщност да не се нуждаете от този идентификатор -- просто вземете вече декодираната информация от /proc/cpuinfo.

Ако наистина искате тези 8 байта, има няколко начина да получите ProcessorID в Linux.

С root/sudo идентификаторът се съдържа в изхода на dmidecode:

<snip>
Handle 0x0004, DMI type 4, 35 bytes
Processor Information
    Socket Designation: CPU Socket #0
    Type: Central Processor
    Family: Other
    Manufacturer: GenuineIntel
    ID: A7 06 02 00 FF FB EB BF
<snip>

Обърнете внимание, че редът на байтовете е обърнат: Windows връща резултатите в ред на Big-Endian, докато Linux ги връща в ред на Little-Endian.

Ако нямате root разрешения, е почти възможно да възстановите ProcessorID от /proc/cpuinfo чрез двоично кодиране на стойностите, които връща. За „подписа“ (първите четири байта в Windows/последните четири байта в Linux) можете да кодирате двоично идентификацията, извлечена от /proc/cpuinfo, за да съответства на Документация на Intel Фигура 5-2 (други производители я използват за съвместимост).

  • Стъпването е в битове 3-0
  • Моделът е в битове 19-16 и 7-4
  • Семейството е в битове 27-20 и 11-8
  • Типът процесор е в битове 13-12 (/proc/cpuinfo не ви казва това, приемете 0)

По подобен начин можете да попълните останалите четири байта, като итерирате флаговете на функциите (flags ключ в /proc/cpuinfo) и зададете битове, както е подходящо съгласно Таблица 5-5 от документа на Intel, свързан по-горе.

И накрая, можете да инсталирате пакета cpuid (напр. в Ubuntu, sudo apt-get install cpuid). След това, като изпълните командата cpuid -r (сурова), можете да анализирате нейния изход. Бихте комбинирали стойностите от EAX и EDX регистрите за първоначална EAX стойност от 1:

$ cpuid -r
CPU 0:
   0x00000000 0x00: eax=0x0000000d ebx=0x756e6547 ecx=0x6c65746e edx=0x49656e69
   0x00000001 0x00: eax=0x000206a7 ebx=0x00020800 ecx=0x9fba2203 edx=0x1f8bfbff
<snip>
person Daniel Widdis    schedule 04.02.2017