Некоторые приложения при установке требуют наличие поддержки определенного набора команд процессора и при запуске на системах с устаревшими процессорами могут падать с ошибками.
Что бы избежать мучительной и долго диагностики, наличие наборов команд можно проверить еще на этапе установки, к примеру выводить в виде ошибки или предупреждения в скрипте.
Вся необходимая информация о процессоре находится в /proc/cpuinfo в секции flags
Вывод всех наборов команд процессора
Для вывода всех поддерживаемых наборов можно использовать команду ниже
cat /proc/cpuinfo |grep "flags"| uniq
Пример вывода
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
Проверка поддержки конкретного набора команд
Есть несколько вариантов проверки, самый простой, это поиск через grep
Проверка поддержки SSE 4.2
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 suported"|| echo "SSE 4.2 not supported"
Проверка подержи SSSE 3
grep -q ssse3 /proc/cpuinfo && echo "SSSE 3 suported"|| echo "SSSE 3 not supported"
Но такой способ не позволяет точно проверить поддержку к примеру sse, так как он является частью слов sse2, sse4 и т.д.
Для проверки, можем использовать массив и точное сравнение значений
Проверка поддержки SSE
1 2 3 4 5 6 7 8 9 | flag=sse declare -a flags=( $(cat /proc/cpuinfo |grep "flags"| uniq) ) for i in ${!flags[@]}; do if [ ${flags[$i]} == $flag ]; then echo "$flag suported" fi done |
Немного громоздко, но дает точный результат.