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

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

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

 model name : Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz … flags : 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 

  • AES-NI ускорил шифрование ZFS v31 в Solaris 11
  • Какие проблемы, связанные с UEFI, мне нужно искать при получении компьютера x86 для Linux?
  • Как определить архитектуру ядра Linux?
  • Могу ли я установить kde neon amd64 на архитектуру i686?
  • Предел ACL для x86 sles12 тип файловой системы xfs
  • Debian x86_64 и 4 ГБ оперативной памяти
  • Неожиданный процессор / ядро ​​подсчитывает процессор AMD
  • Невозможно скомпилировать ядро ​​Linux для платы ARM
  • 4 Solutions collect form web for “Что означают флаги в / proc / cpuinfo?”

    x86

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

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

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

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

    Все флаги

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

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

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

    • fpu : fpu FPU (поддержка с плавающей запятой)
    • vme : виртуальные улучшения 8086
    • de : Отладочные расширения ( CR4.DE )
    • pse : расширения размера страницы ( страницы памяти 4 МБ)
    • tsc : счетчик времени (RDTSC)
    • msr : Регистры, специфичные для модели (RDMSR, WRMSR)
    • pae : Расширения физических адресов (поддержка более 4 ГБ ОЗУ)
    • mce : Исключение проверки машины
    • cx8 : инструкция CMPXCHG8 (64-разрядная сравнение и своп )
    • apic : встроенный APIC
    • sep : SYSENTER / SYSEXIT
    • mtrr : mtrr памяти
    • pge : Страница Global Enable (глобальный бит в PDE и PTE)
    • mca : Архитектура проверки машины
    • cmov : инструкции CMOV (условное перемещение) (также FCMOV )
    • pat : таблица атрибутов страницы
    • pse36 : 36-бит PSE (огромные страницы)
    • pn : серийный номер процессора
    • clflush : clflush Cache Line Flush
    • dts : Debug Store (буфер для отладки и профилирования)
    • acpi : ACPI через MSR (контроль температуры и модуляция тактовой частоты)
    • mmx : Мультимедийные расширения
    • fxsr : FXSAVE / FXRSTOR, CR4.OSFXSR
    • sse : векторные инструкции Intel SSE
    • sse2 : SSE2
    • ss : самооценка процессора
    • ht : Hyper-Threading
    • tm : Автоматическое управление тактовой частотой (Thermal Monitor)
    • ia64 : Intel Itanium Architecture 64-разрядная (не путать с 64-разрядной архитектурой Intel x86 с флагом x86-64 или «AMD64», обозначенной флагом lm )
    • pbe : Ожидание pbe ожидания (поддержка PBE # pin)

    AMD-определенные функции процессора, уровень CPUID 0x80000001

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

    • syscall : SYSCALL (быстрый системный вызов) и SYSRET (возврат из быстрого системного вызова)
    • mp : Возможность многопроцессорности .
    • nx : Выполнить отключить
    • mmxext : расширения AMD MMX
    • fxsr_opt : оптимизация FXSAVE / FXRSTOR
    • pdpe1gb : одна страница GB (позволяет hugepagesz=1G страницы hugepagesz=1G )
    • rdtscp : Прочитать счетчик времени и идентификатор процессора
    • lm : Длинный режим ( x86-64 : amd64, также известный как Intel 64, то есть 64-разрядный)
    • 3dnowext : AMD 3DNow! расширения
    • 3dnow : 3DNow! (Векторные инструкции AMD, конкурирующие с SSE1 от Intel)

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

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

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

    • cxmmx : расширения Cyrix MMX
    • k6_mtrr : нестандартные MTRR AMD K6
    • cyrix_arr : cyrix_arr Cyrix (= MTRR)
    • centaur_mcr : Centaur MCRs (= MTRR)
    • constant_tsc : TSC тикает с постоянной скоростью
    • up : ядро ​​SMP работает на UP
    • art : Всегда-Бегущий таймер
    • arch_perfmon : Архитектурный PerfMon от Intel
    • pebs : 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 : восстановление без eagerfpu
    • nonstop_tsc_s3 : TSC не останавливается в состоянии S3
    • mce_recovery : у процессора есть восстановимые проверки машины

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

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

    • pni : SSE-3 (« Прескотт Новые инструкции»)
    • pclmulqdq : выполнить Умножение pclmulqdq умножения инструкции Quadword – ускоритель для GCM )
    • dtes64 : 64-разрядный отладочный магазин
    • monitor : поддержка Monitor / Mwait ( дополнения Intel SSE3 )
    • ds_cpl : CPL Qual. Отладочный магазин
    • vmx : Аппаратная виртуализация: Intel VMX
    • smx : безопасный режим: TXT (поддержка TPM )
    • est : Enhanced SpeedStep
    • tm2 : Тепловой монитор 2
    • ssse3 : Дополнительный SSE-3
    • cid : Идентификатор контекста
    • sdbg : отладка кремния
    • fma : Fused multiply-add
    • cx16 : cx16
    • xtpr : отправить приоритетные сообщения
    • pdcm : Возможности производительности
    • pcid : Идентификаторы контекста процесса
    • dca : прямой доступ к кешу
    • sse4_1 : SSE-4.1
    • sse4_2 : SSE-4.2
    • x2apic : x2APIC
    • movbe : перемещение данных после замены байтов
    • popcnt : Возвращает popcnt количества битов. Устанавливается в 1 инструкцию ( вес Хэмминга , т. е. количество бит)
    • tsc_deadline_timer : таймер таймера tsc_deadline_timer
    • aes / aes-ni : расширенный стандарт шифрования (новые инструкции)
    • xsave : Сохранить расширенные состояния процессора : также предоставляет XGETBY , XRSTOR , XSETBY
    • avx : Расширенные векторные расширения
    • f16c : 16-битные преобразования fp ( CVT16 )
    • rdrand : чтение произвольного номера из команды генератора случайных чисел
    • hypervisor : работа на гипервизоре

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

    • rng : Генератор случайных чисел (xstore)
    • rng_en : включен генератор случайных чисел
    • ace : криптовальный процессор (xcrypt)
    • ace_en : включен криптовация на процессоре
    • ace2 : Advanced Cryptography Engine v2
    • ace2_en : ACE v2 включен
    • phe : Хеш-движок PadLock
    • phe_en : включена поддержка PHE
    • pmm : Множитель PadLock Montgomery
    • pmm_en : включен PMM

    Более расширенные фреймы 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 osvw решение , которое позволяет ОС работать с osvw процессора.
    • ibs : выборка на основе инструкций
    • xop : расширенные инструкции AVX
    • skinit : инструкции SKINIT / STGI
    • wdt : сторожевой таймер
    • lwp : Профилирование легкого веса
    • fma4 : 4 операнда MAC-инструкции
    • tce : расширение кеша перевода
    • nodeid_msr : NodeId MSR
    • tbm : Манипуляция трейлинг-битами
    • topoext : Расширения топологии topoext CPUID
    • perfctr_core : Расширения счетчиков производительности ядра
    • perfctr_nb : NB Расширения счетчиков производительности
    • bpext : расширение точки останова данных
    • ptsc : счетчик времени выполнения
    • perfctr_l2 : Расширения счетчиков производительности L2
    • mwaitx : расширение MONITORX ( MONITORX / MWAITX )

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

    • cpb : Повышение производительности AMD Core
    • epb : поддержка IA32_ENERGY_PERF_BIAS
    • hw_pstate : AMD HW-PState
    • proc_feedback : AMD ProcFeedbackInterface
    • intel_pt : отслеживание процессоров Intel

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

    • tpr_shadow : Intel TPR Shadow
    • vnmi : Intel Virtual NMI
    • flexpriority : Intel FlexPriority
    • ept : таблица расширенной страницы Intel
    • vpid : vpid виртуального процессора Intel
    • vmmcall : предпочитайте VMMCALL для VMCALL

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

    • fsgsbase : {RD / WR} {FS / GS} инструкции BASE
    • tsc_adjust : настройка TSC MSR
    • bmi1 : расширения для обработки бит 1-й группы
    • hle : Hardware Lock Elision
    • avx2 : инструкции AVX2
    • smep : защита режима выполнения супервизора
    • bmi2 : расширения для бит-бит 2-й группы
    • erms : расширенный REP MOVSB ​​/ STOSB
    • invpcid : Invalidate Идентификатор контекста процессора
    • rtm : Ограниченная транзакционная память
    • cqm : мониторинг QoS кэша
    • mpx : расширение защиты памяти
    • avx512f : avx512f AVX-512
    • avx512dq : инструкции AVX-512 Double / Quad
    • rdseed : команда RDSEED
    • adx : инструкции ADCX и ADOX
    • smap : контроль доступа режима Supervisor
    • clflushopt : инструкция CLFLUSHOPT
    • clwb : инструкция CLWB
    • avx512pf : avx512pf AVX-512
    • avx512er : Экспоненциальный и avx512er AVX-512
    • avx512cd : обнаружение конфликтов AVX-512
    • sha_ni : Расширения инструкций SHA1 / SHA256
    • avx512bw : инструкции для байта / слова AVX-512
    • avx512vl : AVX-512 128/256 Расширения векторной длины

    Расширенные функции состояния, уровень 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

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

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

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

    • clzero : инструкция CLZERO
    • irperf : инструкции irperf счетчик производительности

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

    • dtherm (ранее dts ): цифровой термодатчик
    • ida : динамическое ускорение Intel
    • arat : всегда работает таймер APIC
    • pln : Уведомление об ограничении мощности Intel
    • pts : Тепловой статус пакета Intel
    • hwp : Аппаратные P-состояния Intel
    • 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 : AMD SVM блокирует MSR
    • nrip_save : AMD SVM next_rip save
    • tsc_scale : поддержка масштабирования AMD TSC
    • vmcb_clean : поддержка чистых бит AMD VMCB
    • flushbyasid : поддержка AMD flush-by-ASID
    • decodeassists : поддержка AMD Decode помогает
    • pausefilter : перехват pausefilter AMD
    • pfthreshold : порог фильтра приостановки AMD
    • avic : виртуальный контроллер прерываний

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

    • pku : Ключи защиты для пользовательского пространства
    • ospke : Включить ключи защиты ОС

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

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

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

    РУКА

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

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

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

    • swp : инструкция SWP ( атомарное чтение-изменение-запись )
    • half : пол-слова нагрузки и магазины
    • thumb : Thumb (16-битный набор команд)
    • 26 бит: модель «26 бит» (регистр состояния процессора сложен в счетчик программ)
    • fastmult : 32 × 32 → 64-битное умножение
    • fpa : ускоритель с плавающей точкой
    • vfp : VFP (ранние инструкции с плавающей запятой в vfp SIMD )
    • edsp : расширения DSP (вариант «e» процессоров ARM9 и все остальные выше)
    • java : Jazelle (ускоритель байт-кода Java)
    • iwmmxt : инструкции SIMD, подобные Intel MMX
    • crunch : сопроцессор MaverickCrunch (если включена поддержка ядра)
    • thumbee : ThumbEE
    • neon : расширенный SIMD / NEON на AArch32
    • asimd : расширенный SIMD / NEON на AArch64
    • evtstrm : поток событий ядра, используя общий таймер с архитектурой
    • vfpv3 : версия VFP 3
    • vfpv3d16 : версия VFP версии 3 с 16 D-регистрами
    • vfpv4 : версия VFP версии 4 с быстрым переключением контекста
    • vfpd32 : VFP с 32 D-регистрами
    • tls : регистр TLS
    • idiva : аппаратное разделение SDIV и UDIV в режиме ARM
    • idivt : аппаратное разделение SDIV и UDIV в режиме Thumb
    • pmull{2} : 64 × 64 → 128-битное умножение F 2 m

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

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

    x86

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

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

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

     X*32 + Y 

    Например:

     #define X86_FEATURE_FPU ( 0*32+ 0) /* Onboard FPU */ 

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

    • __u32 x86_capability[NCAPINTS + NBUGINTS]; поле
    • struct cpuinfo_x86 boot_cpu_data
    • определен в x86/kernel/setup.c

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

    Где каждый x86_capability массива x86_capability приходит из:

     | index | eax | ecx | output | file | |-------|----------|-----|--------|-------------| | 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 | | | | scattered.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 (дерева уровня 2 с 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 . Кирикс – еще один.

    Выводы:

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

       c->x86_capability[0] = edx; 

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

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

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

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

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

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

       seq_puts(m, "flags\t\t:"); for (i = 0; i < 32*NCAPINTS; i++) if (cpu_has(c, i) && 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, bit) \ (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 : \ test_cpu_cap(c, bit)) 

      Они есть:

      • __builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) : для запуска ядра требуется флаг.

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

         Define minimum CPUID feature set for kernel These bits are checked really early to actually display a visible error message before the kernel dies. Make sure to assign features to the proper mask! 

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

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

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

    Linux и Unix - лучшая ОС в мире.