Две уязвимости Meltdown и Spectre, которые грянули, как гром среди ясного неба в январе 2018, вынудили латать их на стороне операционных систем. Пла́той за разделение памяти ядра от пользовательского пространства стало падение производительности. Различные проекты по-разному оценивали падение, но чаще всего мелькали цифры о 5-30%. Беда больнее всего ударила по системам виртуализации, так как дыры Meltdown и Spectre позволяют читать информацию одной виртуальной машины из другой или выудить информацию у хоста-гипервизора. Проект Proxmox VE, который стоит на плечах Debian GNU/Linux и, естественно, использует гипервизор KVM + Qemu, предлагает смягчить падение производительности за счёт Process-context identifier (PCID).
Статья устарела и носит исторический характер, описывая, как в разработчики программно сглаживали аппаратную проблему-уязвимость. В современных дистрибутивах нужно добавить параметр ядра mitigations=off. В мире Debian откройте файл sudo -e /etc/default/grub
, добавьте GRUB_CMDLINE_LINUX="mitigations=off". Выполните sudo update-grub
Напомню вам, что в ядре Linux технология разделения памяти ядра от пользовательского пространства именуется Kernel Page-Table Isolation (KPTI) (рабочие названия KAISER, UASS, FUCKWIT).
Для управления поведением KPTI введены два параметра к ядру Linux.
nopti [X86-64] Disable kernel page table isolation
И pti=значение
pti= [X86_64] Control user/kernel address space isolation: on - enable off - disable auto - default setting
Если вам совсем не страшно, то можно отказаться от защиты KPTI и вернуть себе потерянную производительность - nopti или pti=off. Но мне кажется, что мир уже безвозвратно изменился и дальше многие вещи будут делаться под углом "таблицы ядра и пользователя разделены". Итак, специалисты говорят, что процессоры с Processor-Context ID позволяют не так упасть производительности и не нужно напрасно жертвовать безопасностью.
Если вы используете Proxmox VE, как систему виртуализации, то вначале подверьтесь на ваших серверах - grep pcid /proc/cpuinfo
Если вывод не пустой, то всё отлично! Выключите все виртуальные машины, штатно обновите все сервера Proxmox VE и перезагрузитесь. Ваши версии должны быть не ниже.
pveversion
pve-manager/5.1-42/724a6cb3 (running kernel: 4.13.13-5-pve)
Если виртуальная машина с 64 битной операционной системой использует процессор типа host, то есть вы его отдали "как есть" - без эмуляции, то делать больше ничего не нужно. Если вы используете эмуляцию типа kvm64, то выставьте галочку PCID. Можете вызвать в данном месте справку и найти по PCID Flag детальную информацию на английском языке.
Теперь включите виртуальную машину и обновите её штатно. В ситуации с Linux серверами вам нужно получить последние ядра линукс, в которых появилась защита KPTI. Проверьте вашего 64 битного виртуального гостя - grep -q "cpu_insecure\|cpu_meltdown\|kaiser" /proc/cpuinfo && echo "patched :)" || echo "unpatched :("
Для админов Ubuntu 16.04 Server LTS - sudo apt update && sudo apt upgrade
, а для админов Ubuntu 14.04 Server LTS, чья поддержка будет до 2019, настоятельно рекомендую задействовать классную фичу LTS Enablement Stacks и получить новые ядра, оставаясь в рамках релиза 14.04 - sudo apt-get install --install-recommends linux-generic-lts-xenial
Теперь вы в безопасности и не сильно потеряли в быстродействии. Тестов "до-после" не делал, но если поделитесь - буду благодарен. Если вы ещё не перешли на современную ветку, то настоятельно рекомендую - много вкусного!