Что означают флаги в / proc / cpuinfo?

Как я могу узнать, имеет ли у моего процессора определенную функцию? (64-разрядный набор команд, аппаратная виртуализация, криптографические ускорители и т. Д.) Я знаю, что файл /proc /cpuinfo содержит эту информацию в строке flags но что означают все эти критические сокращения?

Например, учитывая следующий отрыв из /proc /cpuinfo , у меня есть 64-разрядный процессор? Есть ли у меня аппаратная виртуализация?

  название модели: Intel (R) Core (TM) 2 Duo CPU E8400 @ 3,00 ГГц
â € |
флаги: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm tpr_shadow vnmi flexpriority
 
186 голосов | спросил Gilles 20 J000000Friday12 2012, 02:52:26

4 ответа


249

x86

(32-бит a.k.a. i386 - i686 и 64-бит a.k.a. amd64. Другими словами, ваша рабочая станция, ноутбук или сервер.)

FAQ: У меня есть ...

  • 64-разрядный (x86_64 /AMD64 /Intel64)? <Сильный> лм
  • Аппаратная виртуализация (VMX /AMD-V)? vmx (Intel), svm (AMD)
  • Ускоренный AES (AES-NI)? <Сильный> АЕС
  • TXT (TPM)? <Сильный> SMX
  • гипервизор (объявленный как таковой)? <Сильный> гипервизор

Большинство других функций представляют интерес только для авторов компилятора или ядра.

Все флаги

Полный список находится в источнике ядра, в файле arch /x86 /include /asm /cpufeatures.h .

Intel-определенные функции процессора, уровень CPUID 0x00000001 (edx)

См. также Википедия и таблица 2-27 в Справочное руководство по расширенным расширенным векторным расширениям Intel

Характеристики процессора AMD, уровень CPUID 0x80000001

См. также Википедия и таблица 2-23 в Справочное руководство по расширенным расширенным векторным расширениям Intel

Функции CPU, определенные в Transmeta, уровень CPUID 0x80860001

  • recovery : CPU в режиме восстановления
  • longrun : управление мощностью Longrun
  • lrti : интерфейс таблицы LongRun

Другие функции, ориентированное на Linux сопоставление

  • cxmmx : расширения Cyrix MMX
  • k6_mtrr : нестандартные MTRR AMD K6
  • cyrix_arr : Cyrix ARR (= MTRR)
  • centaur_mcr : Centaur MCRs (= MTRR)
  • constant_tsc : TSC тикает с постоянной скоростью
  • up : Ядро SMP работает на UP
  • art : Always-Running Timer
  • arch_perfmon : Архитектурный PerfMon от Intel
  • pebs : выборка на основе точного события
  • bts : магазин трассировки филиала
  • rep_good : rep микрокод работает хорошо
  • acc_power : механизм накопления мощности AMD
  • nopl : инструкции NOPL (0F 1F)
  • xtopology : cpu topology enum extensions
  • tsc_reliable : TSC известен как надежный
  • nonstop_tsc : TSC не останавливается в состояниях C
  • extd_apicid : имеет расширенный APICID (8 бит)
  • amd_dcm : многоузловой процессор
  • aperfmperf : APERFMPERF
  • eagerfpu : не ленивый FPUвосстановления
  • nonstop_tsc_s3 : TSC не останавливается в состоянии S3
  • >
  • mce_recovery : у процессора есть восстановимые машинные проверки.

Intel-определенные функции процессора, уровень CPUID 0x00000001 (ecx)

См. также Википедия и таблица 2-26 в Справочное руководство по расширенным расширенным векторным расширениям Intel

Функции процессора VIA /Cyrix /Centaur, уровень CPUID 0xC0000001

Более расширенные флагов AMD: уровень CPUID 0x80000001, ecx

  • lahf_lm : загрузить AH из флагов (LAHF) и сохранить AH во флаги (SAHF) в длинном режиме
  • cmp_legacy : если да HyperThreading недействительно
  • svm : «Обеспечить виртуальную машину»: AMD-V
  • extapic : расширенное пространство APIC
  • cr8_legacy : CR8 в 32-битном режиме
  • abm : Расширенное манипулирование битами
  • sse4a : SSE-4A
  • misalignsse : указывает, генерируется ли исключение общей защиты (#GP), когда некоторые устаревшие инструкции SSE работают с неизмененными данными. Также зависит от CR0 и бит проверки выравнивания.
  • 3dnowprefetch : инструкции по предварительной выборке 3DNow
  • osvw : указывает OS Visible Обходное решение , что позволяет ОС работать с ошибками процессора.
  • ibs : выборка на основе инструкций
  • xop : расширенные инструкции AVX
  • skinit : инструкции SKINIT /STGI
  • wdt : Watchdog timer
  • lwp : Профилирование легкого профиля
  • fma4 : 4 операнда MAC-инструкции
  • tce : расширение кеша трансляции
  • nodeid_msr : NodeId MSR
  • tbm : Манипуляция трассировкой бит
  • topoext : Расширения топологии Листы CPUID
  • perfctr_core : расширения счетчиков производительности ядра
  • perfctr_nb : NB Расширения счетчиков производительности
  • bpext : расширение точки останова данных
  • ptsc : счетчик времени выполнения производительности
  • perfctr_l2 : Расширения счетчика производительности L2
  • mwaitx : Расширение MWAIT ( MONITORX / MWAITX )

Вспомогательные флаги: Linux определен - для функций, разбросанных по различным уровням CPUID

  • ring3mwait : Ring 3 MONITOR /MWAIT
  • cpuid_fault : ошибка Intel CPUID
  • cpb : повышение производительности ядра AMD
  • epb : поддержка IA32_ENERGY_PERF_BIAS
  • cat_l3 : технология выделения кэша L3
  • cat_l2 : технология выделения кэша L2
  • cdp_l3 : Приоритет кода и данных L3
  • invpcid_single : эффективно invpcid и CR4.PCIDE = 1
  • hw_pstate : AMD HW-PState
  • proc_feedback : AMD ProcFeedbackInterface
  • sme : шифрование защищенной памяти AMD
  • pti : Изоляция страницы таблицы ядра (Kaiser)
  • retpoline : Retpoline для Призрак вариант 2 (косвенные ветви)
  • retpoline_amd : Снижение отдачи от AMD
  • intel_ppin : номер инвентаря процессора Intel
  • avx512_4vnniw : Инструкции по нейронной сети AVX-512
  • avx512_4fmaps : AVX-512 Умножение накопления Одиночная точность
  • mba : Распределение полосы пропускания памяти
  • rsb_ctxsw : Заполните RSB в контекстных коммутаторах.

Флаги виртуализации: Linux определен

  • tpr_shadow : Intel TPR Shadow
  • vnmi : Intel Virtual NMI
  • flexpriority : Intel FlexPriority
  • ept : таблица расширенных страниц Intel
  • vpid : Intel Virtual Processor ID
  • vmmcall : выберите VMMCALL в VMCALL

Intel-определенные функции процессора, уровень CPUID 0x00000007: 0 (ebx)

Расширенные функции состояния, уровень CPUID 0x0000000d: 1 (eax)

  • xsaveopt : оптимизированный XSAVE
  • xsavec : XSAVEC
  • xgetbv1 : XGETBV с ECX = 1
  • xsaves : XSAVES / XRSTORS

Под-лист процессора QoS, определяемый Intel, уровень CPUID 0x0000000F: 0 (edx)

  • cqm_llc : LLC QoS

Под-лист процессора QoS, определяемый Intel, уровень CPUID 0x0000000F: 1 (edx)

  • cqm_occup_llc : мониторинг занятости пользователей
  • cqm_mbm_total : общий мониторинг MBM LLC
  • cqm_mbm_local : локальный мониторинг MBM LLC

Характеристики процессора AMD, уровень CPUID 0x80000008 (ebx)

  • clzero : инструкция CLZERO
  • irperf : инструкции, вышедшие на пенсию, счетчик производительности
  • xsaveerptr : всегда сохранять /восстанавливать указатели ошибок FP

Лист управления температурой и питанием, уровень CPUID 0x00000006 (eax)

  • dtherm (ранее dts ): цифровой термодатчик
  • ida : Intel Dynamic Acceleration
  • arat : всегда работает APICТаймер
  • pln : Уведомление об ограничении мощности Intel.
  • pts : Тепловой статус пакета Intel
  • hwp : P-состояния Intel Hardware
  • hwp_notify : уведомление HWP
  • hwp_act_window : Окно активности HWP
  • hwp_epp : Предпочтение эффективности использования HWP
  • hwp_pkg_req : запрос на уровне пакета HWP

Идентификация функции AMD SVM, уровень CPUID 0x8000000a (edx)

  • npt : поддержка таблицы вложенных страниц AMD
  • lbrv : поддержка виртуализации AMD LBR
  • svm_lock : блокировка MSM для AMD SVM
  • nrip_save : AMD SVM next_rip save
  • tsc_scale : поддержка масштабирования AMD TSC
  • vmcb_clean : чистая поддержка чипов AMD VMCB
  • flushbyasid : поддержка AMD flush-by-ASID
  • decodeassists : поддержка AMD Decode помогает
  • pausefilter : перехват прерываний AMD отфильтрован
  • pfthreshold : порог фильтра приостановки AMD
  • avic : Виртуальный контроллер прерываний
  • vmsave_vmload : виртуальный VMSAVE VMLOAD
  • `` vgif`: Виртуальный GIF

Intel-определенные функции процессора, уровень CPUID 0x00000007: 0 (ecx)

  • avx512vbmi : инструкции по управлению векторным битом AVX512
  • umip : защита пользовательских режимов.
  • pku : Ключи защиты для пользовательского пространства
  • ospke : Включить ключи защиты ОС
  • avx512_vbmi2 : Дополнительные инструкции по управлению векторным битом AVX512
  • gfni : Новые инструкции Galois Field
  • vaes : Vector AES
  • vpclmulqdq : Двойной двустворчатый перевод с меньшим удвоением.
  • avx512_vnni : Инструкции по векторной нейронной сети
  • avx512_bitalg : инструкции VPOPCNT [B, W] и VPSHUF-BITQMB
  • avx512_vpopcntdq : POPCNT для векторов DW /QW
  • la57 : 5-уровневые таблицы страниц
  • rdpid : команда RDPID

Характеристики процессора AMD, уровень CPUID 0x80000007 (ebx)

  • overflow_recov : поддержка восстановления переполнения MCA.
  • succor : исправление ошибок и исправление ошибок
  • smca : Масштабируемый MCA

Обнаруженные ошибки ЦП (определенные Linux)

  • f00f : Intel F00F
  • fdiv : CPU FDIV
  • coma : Cyrix 6x86 coma
  • amd_tlb_mmatch : tlb_mmatch AMD Erratum 383
  • amd_apic_c1e : apic_c1e AMD Erratum 400
  • 11ap : Плохой локальный APIC aka 11AP
  • fxsave_leak : утечка FXSAVE FOP /FIP /FOP
  • clflush_monitor : AAI65, CLFLUSH требуется до MONITOR
  • sysret_ss_attrs : SYSRET не исправляет SS attrs
  • espfix : "" IRET для 16-разрядных SS искажает высокие бит ESP /RSP
  • null_seg : Отбрасывание селектора сохраняет базу
  • swapgs_fence : SWAPGS без ввода на GS
  • monitor : IPI, необходимый для пробуждения удаленного процессора.
  • amd_e400 : CPU находится под воздействием Erratum 400
  • cpu_meltdown : на процессор влияет атака на крикет и потребности изолированность таблицы страниц ядра.
  • spectre_v1 : на процессор влияет Призрак вариант 1 атака с условными ветвями
  • spectre_v2 : на процессор влияет Призрак варианта 2 с косвенными ветвями
  • spec_store_bypass : на процессор влияет уязвимость Обнаружение спекулятивного хранилища (Spectre вариант 4).

P.S. Этот список был получен из arch /x86 /include /asm /cpufeatures.h в исходном коде ядра. Флаги перечислены в том же порядке, что и исходный код. Пожалуйста, помогите, добавив ссылки на описания функций, когда они отсутствуют, написав краткое описание функций, которые имеют невыразительные имена, и обновив список для новых версий ядра. Текущий список от Linux 4.15 плюс некоторые последующие дополнения.

ответил Alexx Roche 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 20 Sep 2016 23:33:12 +0300 2016, 23:33:12
67

ARM

В процессорах ARM в функциях упоминаются несколько функций: . Здесь упоминаются только функции, напрямую связанные с архитектурой ARM, а не функции, характерные для производителя кремния или системы на кристалле.

Функции получены при поиске идентификатора CPU с помощью read_cpuid () и поискать его в определения типа процессора , известные во время компиляции, когда функции выражаются в виде маски HWCAP_xxx . Соответствующие строки находятся в hwcap_str и т. д. в setup.c .

В приведенном ниже списке ARMv6 вводит инструкции SIMD и типы данных. ARMv7 предоставил расширенные инструкции SIMD и типы данных. На 32-битных ARM-машинах сигналы neon Advanced SIMD; в то время как asimd сигнализирует Advanced SIMD на 64-битных машинах для рук.

Кроме того, строка Hardware: указывает модель процессора. В зависимости от модели может быть другая информация в других файлах в /proc или /sys или в сообщениях журнала загрузки ядра. К сожалению, у каждого производителя процессора ARM есть свой собственный метод для представления функций процессора, если таковые имеются.

ответил Alexx Roche 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 20 Sep 2016 23:33:12 +0300 2016, 23:33:12
9

Или, альтернативно, вы можете использовать программу cpuid , она должна находиться в репозитории debian. Он сбрасывает каждую возможную информацию о вашем процессоре с некоторыми пояснениями, поэтому вы не получаете эти неясные флаги.

ответил hurufu 22 Maypm14 2014, 17:19:29
9

x86

Найти его в 4.1.3 x86 и руководстве Intel

arch /x86 /include /asm /cpufeature.h содержит полный список.

Значения define имеют тип:

  X * 32 + Y
 

например:.

  #define X86_FEATURE_FPU (0 * 32 + 0) /* Встроенный FPU * /
 

Флаги функций, извлеченные из CPUID, хранятся внутри:

  • __ u32 x86_capability [NCAPINTS + NBUGINTS]; поле
  • of struct cpuinfo_x86 boot_cpu_data
  • определяется в x86 /kernel /setup.c

, который инициализируется через функции __ init .

Где каждый элемент массива x86_capability исходит из:

  | индекс | eax | ecx | выход | файл |
| ------- | ---------- | ----- | -------- | ------------- |
| 0 | 1 | 0 | edx | common.c |
| 1 | 80000001 | | edx | common.c |
| 2 | 80860001 | | edx | transmeta.c |
| 3 | | | | |
| 4 | 1 | 0 | ecx | common.c |
| 5 | C0000001 | | edx | centaur.c |
| 6 | 80000001 | | ecx | common.c |
| 7 | | | | Разбросанные .c |
| 8 | | | | |
| 9 | 7 | 0 | ebx | common.c |
| 10 | D | 1 | eax | common.c |
| 11 | F | 0 | edx | common.c |
| 12 | F | 1 | edx | common.c |
 

Примечания:

  • пустые записи означают: «из разных мест» или «недоступно»
  • index : это индекс x86_capability , например. x86_capability [0]
  • eax и exc : входные значения для CPUID в шестнадцатеричном формате. Входы, которые используют exc , которые меньше, назовите его subleaf (из дерева с двумя уровнями с eax в корневом каталоге).
  • output : это регистр, из которого выполнен вывод CPUID
  • file : это файл, в котором эти поля определены. Пути относятся к arch /x86 /kernel /cpu /.
  • transmeta : было имя поставщика ЦП https://en.wikipedia.org /wiki /Transmeta , который был приобретен Novafora https://www.crunchbase.com/organization/novafora
  • centaur : было имя поставщика ЦП https://en.wikipedia.org /wiki /Centaur_Technology , который был получен VIA https://en.wikipedia.org/wiki/VIA_Technologies . Cyrix - еще один.

Выводы:

  • большинство записей поступают непосредственно из регистров вывода CPUID и устанавливаются в common.c следующим образом:

      c-> x86_capability [0] = edx;
     

    Это легко найти в пакете в руководстве Intel для CPUID.

  • остальные разбросаны по всему источнику и устанавливаются поэтапно с помощью set_cpu_cap .

    Чтобы найти их, используйте git grep X86_FEATURE_XXX внутри arch /x86 .

    Обычно вы можете определить, какой бит CPUID они соответствуют из окружающего кода.

Другие интересные факты

  • Флаги на самом деле печатаются в arch /x86 /kernel /cpu /proc.c с кодом:

      seq_puts (m, "flags \ t \ t:");
    для (i = 0; i <32 * NCAPINTS; i ++)
        if (cpu_has (c, i) & amp; x86_cap_flags [i]! = NULL)
            seq_printf (m, "% s", x86_cap_flags [i]);
     

    Где:

    • cpu_has выполняет основную проверку функции.
    • x86_cap_flags [i] содержит строки, соответствующие каждому флагу.

    Это передается как обратный вызов системы proc . Точка входа находится в fs /proc /cpuinfo.c .

  • Строки

    x86_cap_flags генерируются с помощью arch /x86 /kernel /cpu /mkcapflags.h непосредственно из arch /x86 /include /asm /cpufeature.h путем «разбора» его с помощью sed ...

    Выход идет в arch /x86 /kernel /cpu /capflags.c каталога сборки, и полученный массив выглядит так:

      const char * const x86_cap_flags [NCAPINTS * 32] = {
        [X86_FEATURE_FPU] = "fpu",
        [X86_FEATURE_VME] = "vme",
     

    , так например X86_FEATURE_FPU соответствует строке "fpu" и т. д.

  • cpu_has разбивается на два случая с кодом:

      #define cpu_has (c, бит)\
        (__builtin_constant_p (бит) & amp; & REQUIRED_MASK_BIT_SET (бит)? 1: \
        test_cpu_cap (c, бит))
     

    Это:

    • __ builtin_constant_p (бит) & amp; & amp; & amp; REQUIRED_MASK_BIT_SET (бит) : для запуска ядра требуется флаг.

      Это определяется данными внутри required-features.h , которые комментируют:

        Определить минимальный набор функций CPUID для ядра Эти биты проверены
      на самом деле очень рано отображать видимое сообщение об ошибке до
      ядра умирают. Обязательно назначьте функции соответствующей маске!
       

      Поскольку те, которые известны во время компиляции (требования к ядру), уже были проверены при запуске, проверка может быть разрешена во время компиляции, если во время компиляции известно bit .

      Таким образом, __ builtin_constant_p (бит) , который проверяет, является ли бит константой времени компиляции.

    • test_cpu_cap : это использует данные CPUID из struct cpuinfo_x86 boot_cpu_data global

ответил Ciro Santilli 新疆改造中心 六四事件 法轮功 1 PM000000110000001931 2015, 23:57:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132