Перейти к содержимому
Local
bot

MySQL с MyISAM и патчи от Meltdown

Рекомендованные сообщения

Появилось сообщение, о том что наблюдается потеря производительности в 90% после обновления Linux ядра на сервере, которое теперь содержит KPTI (kernel page-table isolation - защита от Meltdown)

 

Такие большие потери связаны с запуском MariaDB на старой версии VMware, которая не пробрасывает PCID и INVPCID чипа гостю. Но в безвиртуальной системе удалось добиться регресса в 40%.

 

Тестовые условия:
----------------------------------
CREATE TABLE t1 (c1 INT PRIMARY KEY AUTO_INCREMENT, c2 INT) ENGINE=MyISAM;
INSERT INTO t1 (c2) VALUES (FLOOR(1000*RAND()));
INSERT INTO t1 (c2) SELECT FLOOR(1000*RAND()) FROM t1;
-- повторять последнее действия пока не станет хотя бы 1024 строки в t1

SELECT COUNT(*) FROM t1 AS a JOIN t1 AS b WHERE b.c1>a.c1 AND b.c2<a.c1;
----------------------------------

 

Теперь смотрим время SELECT с KPTI и без:
----------------------------------
rows    non-KPTI    KPTI         regression
1024    0.40 s        0.64 s        37.5%
2048    1.24 s        1.94 s        36.1%
4096    4.22 s        7.05 s        40.1%
8192    16.10 s      26.92 s      40.2%
----------------------------------

Для 8K строк запрос делает более чем 50млн вызовов Handler_read_rnd_next. Для MyISAM этот вызов возвращается вызовом fget(), который в свою очередь возвращается системным вызовом __fget.

 

Так происходит из-за того, что у движка MyISAM нет кеша строк. В Key Buffer кешируется индекс страниц, а кеша данных строк нету.
Поэтому движок полагается на кеш операционной системы. Это хорошо работает, но, т.к. кеш находится в ядре, то получается, что между MariaDB и и кешем есть системный вызов (syscall).

 

Изоляция табличных страниц, представленная в KPTI, увеличила нагрузку при системном вызове (syscall). Поэтому вышеуказанная схема, где большое количество MyISAM строк перебираются циклом, работает очень медленно. И замедление только увеличивается, если строка уже находится в кеше.

 

Как это побороть? - Никак, т.к. это потребует полного редизайна MyISAM.

 

Хорошая новость заключается в том, что большинство других движков имеют свой кеш строк. У InnoDB это InnoDB Buffer Pool, а у ARIA - ARIA Page Cache.

 

Вот пример выполнения нашего теста для ARIA со стандартным кешем в 128мегабайт:
----------------------------------
rows    non-KPTI         KPTI
1024    0.18 s             0.18 s
2048    0.57 s             0.57 s
4096    1.85 s             1.84 s
8192    6.34 s             6.30 s
----------------------------------

 

Мораль сей басни такова: переезжайте на другой движок и убедитесь, что кеш строк достаточно велик.

 

Источник: mariadb

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

  • Похожие публикации

    • Автор: bot
      Компания Intel опубликовала сведения о новой уязвимости (CVE-2018-3665) в механизме спекулятивного выполнения инструкций, которая получила кодовое название LazyFP. Проблема затрагивает только процессоры линейки Intel Core и проявляется при использовании "ленивого" (lazy) режима переключения контекста FPU, при котором реальное восстановление состояния регистров производится не сразу после переключения контекста, а только при выполнении первой инструкции, которая манипулирует восстанавливаемыми регистрами. На чипах Intel Atom/Knights и CPU AMD проблема не проявляется.

      Уязвимости присвоен средний уровень опасности (CVSS 4.3 из 10) - через проведение атаки по сторонним каналам атакующий может определить значения регистров FPU, MMX, SSE, AVX и AVX-512, используемых другим процессом. Например, в данных регистрах могут содержаться параметры для криптографических вычислений и имеющий доступ к локальной системе злоумышленник может попытаться использовать их для определения ключа шифрования. При использовании систем виртуализации проблема может применяться для определения состояния регистров другой гостевой системы или другого процесса в текущей гостевой системе.

      По своей сути уязвимость LazyFP близка к обнародованной в конце мая проблеме Spectre 3a (CVE-2018-3640, RSRE - Rogue System Register Read). Публикация детального описания атаки отложена до августа по просьбе представителей Intel, чтобы дать пользователям время для установки исправлений. В качестве меры для блокирования уязвимости рекомендуется разработчикам ОС перейти от использования режима Lazy FP к режиму Eager FP через установку соответствующих флагов XSAVE или XCR0. Предложенный метод защиты не оказывает негативного влияния на производительность.

      В ядре Linux защита была реализована ещё в феврале 2016 года, путём применения по умолчанию режима Eager FP (eagerfpu=on) и удаления возможности активации Lazy FP. Уязвимость затрагивает ядра Linux до версии 4.6 или системы с процессорами без поддержки инструкции XSAVE (до Sandy Bridge), в которых по умолчанию применялся режим Lazy FP. В старых ядрах Linux для защиты можно использовать опцию "eagerfpu=on", которая присутствует начиная с ядра 3.7. Обновления пакетов с ядром подготовлены для Debian и ожидаются для Ubuntu, SUSE/openSUSE и RHEL (RHEL 7 подвержен уязвимости частично, так как уже использует по умолчанию режим переключения контекста Eager FP на CPU Intel Sandy Bridge и более новых системах). Патчи с устранением проблемы также приняты в кодовые базы FreeBSD, OpenBSD и DragonflyBSD. Отдельно исправления выпущены для гипервизора Xen.

      https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00145.html

      Источник: Opennet
    • Автор: bot
      Исследователи, в свое время обнаружившие уязвимости Meltdown и Spectre, независимо от своих амстердамских коллег представили свой вариант атаки, получивший название Nethammer. По словам исследователей, Nethammer работает без какого-либо управляемого злоумышленником кода и атакует системы, использующие при обработке сетевых запросов некэшированную память.

      Для того чтобы разъяснить принцип действия Nethammer, необходимо вспомнить, как работает Rowhammer. В результате быстрой записи и перезаписи памяти возникают ошибки, и в результате злоумышленник может манипулировать поврежденными данными с целью получения контроля над атакуемым компьютером. Rowhammer позволяет злоумышленнику повысить свои привилегии до уровня ядра, однако для этого требуется физический доступ к компьютеру.

      Nethammer позволяет атаковать удаленно с помощью памяти, используемой для обработки пакетов (при условии их достаточного количества). «Nethammer отправляет на атакуемое устройство особым образом сконфигурированный поток сетевых пакетов для осуществления одноточечной или односторонней атаки Rowhammer путем эксплуатации используемых на устройстве технологий quality-of-service. Для каждого полученного пакета открывается доступ к нескольким адресам либо в драйвере ядра, либо в приложении в пространстве пользователя», - пишут исследователи.

      При нормальных условиях кэширование существенно усложняет осуществление атаки, однако исследователи разработали метод, позволивший им обойти кэш и атаковать непосредственно DRAM с целью разбиения ячеек памяти, необходимого для атаки Rowhammer.
       
      Источник: securitylab
    • Автор: bot
      Выпущены исправления уязвимостей Meltdown и Spectre для FreeBSD и QEMU. В исправлениях используется новая инструкция IBRS, представленная компанией Intel в обновлении микрокода.

      Разработчики открытой операционной системы FreeBSD выпустили набор исправлений для уязвимостей Meltdown и Spectre. Патчи интегрированы в ветку FreeBSD 11-STABLE.

      Исправления для Meltdown основаны на технике Page Table Isolation (PTI), позволяющей разделять таблицы страниц памяти ядра и пространства пользователя при переключении контекста во время системного вызова. Помимо этого, в исправлениях предусмотрена оптимизация при помощи инструкции PCID, снижающая негативное влияние PTI на производительность компьютера.

      Исправление для второго варианта Spectre использует новую инструкцию Indirect Branch Restricted Speculation (IBRS), представленную компанией Intel в обновлении микрокода. IBRS позволяет в зависимости от ситуации разрешать и запрещать спекулятивное выполнение косвенных переходов. Например, переходы будут запрещены во время обработки прерываний, системных вызовов и переключений контекста. Для применения данной инструкции обязательно наличие обновленного микрокода для процессоров Intel.

      После установки исправлений отключить PTI будет невозможно, однако IRBIS может быть отключен через команду sysctl.

      Помимо этого, защита от Meltdown и Spectre также была реализована в программе для эмуляции аппаратного обеспечения QEMU 2.11.1. Исправления для Meltdown основаны на патчах KPTI, а защита от Spectre разработана с привлечением инструкций IBRS и Indirect Branch Prediction Barriers (IBPB).
       
      Источник: securitylab
    • Автор: mac
      Естественно, ip сети и города - разные, версии Ubilling - одинаковые.
      Собственно, как это сделать максимально просто и безопасно?
       
      То, до чего сам додумался - это использовать "Модуль Миграция 2"
      Для это планирую сделать экспорт нужных полей из базы данных с помощью запроса


      По sql запросу вопрос прежде всего к уважаемому nightfly : оттуда ли (таблицы, поля) я беру значения?
×