Case Study об использовании подсистемы Linux FS-Cache
Case Study об использовании подсистемы Linux FS-Cache для решения проблемы производительности хранилища
У одного из наших клиентов большой портал, данные которого хранятся на отдельном выделенном NFS сервере. На сегодняшний день — это множество изображений, которые хранятся в одном плоском каталоге и занимают более 3 TB. Даже листинг этого каталога занимает несколько десятков секунд. До недавнего времени все работало более-менее неплохо, но потом движок обновили и случилось чудо, нагрузка на хранилище выросла на порядок. Все наши увещевания, что было хорошо, стало плохо ни к чему не привели, разработчики просто разводят руками.
Одна из самых больших проблем — это плоская структура каталога, в котором хранятся все файлы, таким образом, операции, которым нужен листинг просто превращают хранилище в тыкву и 4x2TB RAID10 никак не справляются. На периоды пиковой нагрузки мы переносили данные клиенты на наше SSD-хранилище, чтобы преодолеть проблему.
Новый виток боли начался недавно — у клиента стало заканчиваться место в хранилище, мы выполнили перенос на временный сервер, но проблема усугубилась — после перемонтирования хранилища NFS IOPS-ы стали зашкаливать, так как сервер приложений выкачивал все данные непосредственно с хранилища, и система просто встала колом. К счастью, на сервере приложений было около 500 GB высокоскоростного пространства на SSD и мы решили попробовать использовать FS-Cache для решения проблемы. Это был первый опыт применения данной технологии, но делать было нечего, все равно ничего не работало.
Проверяем совместимость ядра
Отлично, ядро пересобирать не надо.
Монтируем NFS с нужным параметром FSC
Устанавливаем и настраиваем демон кэширования
В настройках мы изменили только параметр dir. Остальные параметры оставлены по умолчанию. Демон умеет определять доступное место на диске и держать его на заданных уровнях.
Указываем, что демон должен запускаться:
Запускаем сервис
Проверяем работоспособность
Важно, чтобы в колонке FSC было yes. Это означает, что кэширование активировалось.
Теперь смотрим статистику кэша:
Если счетчики двигаются, значит все ОК, настройка завершена.
Заключение
Нам повезло, что нагрузка клиента в основном представляет собой операции чтения, что позволяет использовать FS-Cache совместно с NFS. Если бы проблема была в нагрузке по записи, мы бы не смогли эффективно воспользоваться данной технологией.
billing.netpoint-dc.com/billmgr?func=register&lang=ru
У одного из наших клиентов большой портал, данные которого хранятся на отдельном выделенном NFS сервере. На сегодняшний день — это множество изображений, которые хранятся в одном плоском каталоге и занимают более 3 TB. Даже листинг этого каталога занимает несколько десятков секунд. До недавнего времени все работало более-менее неплохо, но потом движок обновили и случилось чудо, нагрузка на хранилище выросла на порядок. Все наши увещевания, что было хорошо, стало плохо ни к чему не привели, разработчики просто разводят руками.
Одна из самых больших проблем — это плоская структура каталога, в котором хранятся все файлы, таким образом, операции, которым нужен листинг просто превращают хранилище в тыкву и 4x2TB RAID10 никак не справляются. На периоды пиковой нагрузки мы переносили данные клиенты на наше SSD-хранилище, чтобы преодолеть проблему.
Новый виток боли начался недавно — у клиента стало заканчиваться место в хранилище, мы выполнили перенос на временный сервер, но проблема усугубилась — после перемонтирования хранилища NFS IOPS-ы стали зашкаливать, так как сервер приложений выкачивал все данные непосредственно с хранилища, и система просто встала колом. К счастью, на сервере приложений было около 500 GB высокоскоростного пространства на SSD и мы решили попробовать использовать FS-Cache для решения проблемы. Это был первый опыт применения данной технологии, но делать было нечего, все равно ничего не работало.
Проверяем совместимость ядра
# grep CONFIG_NFS_FSCACHE /boot/config-3.13.0-147-generic
CONFIG_NFS_FSCACHE=y
Отлично, ядро пересобирать не надо.
Монтируем NFS с нужным параметром FSC
server://files /mnt/vgslow-data nfs nfsvers=4,async,rw,_netdev,fsc 0 0Обращаем внимание. Перемонтирование через remount не даст эффекта. Необходимо отмонтировать и смонтировать с параметром «fsc».
Устанавливаем и настраиваем демон кэширования
apt-get install cachefilesd
Редактируем настройки
# cat /etc/cachefilesd.conf
###############################################################################
#
# Copyright © 2006,2010 Red Hat, Inc. All Rights Reserved.
# Written by David Howells (dhowells@redhat.com)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version
# 2 of the License, or (at your option) any later version.
#
###############################################################################
dir /var/cache/fscache
tag mycache
brun 10%
bcull 7%
bstop 3%
frun 10%
fcull 7%
fstop 3%
# Assuming you're using SELinux with the default security policy included in
# this package
# secctx system_u:system_r:cachefiles_kernel_t:s0
В настройках мы изменили только параметр dir. Остальные параметры оставлены по умолчанию. Демон умеет определять доступное место на диске и держать его на заданных уровнях.
Указываем, что демон должен запускаться:
# cat /etc/default/cac
cacerts cachefilesd
root@np0121:~# cat /etc/default/cachefilesd
# Defaults for cachefilesd initscript
# sourced by /etc/init.d/cachefilesd
# You must uncomment the run=yes line below for cachefilesd to start.
# Before doing so, please read /usr/share/doc/cachefilesd/howto.txt.gz as
# extended user attributes need to be enabled on the cache filesystem.
RUN=yes
# Additional options that are passed to the Daemon.
DAEMON_OPTS=""
Запускаем сервис
service cachefilesd start
Проверяем работоспособность
# cat /proc/fs/nfsfs/volumes
NV SERVER PORT DEV FSID FSC
v4 b078194a 801 0:35 16f9381700e59eda yes
Важно, чтобы в колонке FSC было yes. Это означает, что кэширование активировалось.
Теперь смотрим статистику кэша:
# cat /proc/fs/fscache/stats
FS-Cache statistics
Cookies: idx=6 dat=1890275 spc=0
Objects: alc=1097490 nal=0 avl=1097490 ded=1016804
ChkAux : non=0 ok=171729 upd=0 obs=0
Pages : mrk=148687337 unc=145492607
Acquire: n=1890281 nul=0 noc=0 ok=1890281 nbf=0 oom=0
Lookups: n=1097490 neg=925761 pos=171729 crt=925761 tmo=0
Invals : n=0 run=0
Updates: n=0 nul=0 run=0
Relinqs: n=1759445 nul=0 wcr=0 rtr=0
AttrChg: n=0 ok=0 nbf=0 oom=0 run=0
Allocs : n=0 ok=0 wt=0 nbf=0 int=0
Allocs : ops=0 owt=0 abt=0
Retrvls: n=2393196 ok=465345 wt=723800 nod=1927851 nbf=0 int=0 oom=0
Retrvls: ops=2393196 owt=662915 abt=0
Stores : n=118288880 ok=118288880 agn=0 nbf=0 oom=0
Stores : ops=2049040 run=120337487 pgs=118288447 rxd=118288880 olm=0
VmScan : nos=145461870 gon=0 bsy=0 can=433 wt=11
Ops : pend=662994 run=4442236 enq=153450538 can=0 rej=0
Ops : dfr=36586 rel=4442236 gc=36586
CacheOp: alo=0 luo=0 luc=0 gro=0
CacheOp: inv=0 upo=0 dro=0 pto=0 atc=0 syn=0
CacheOp: rap=0 ras=0 alp=0 als=0 wrp=0 ucp=0 dsp=0
Если счетчики двигаются, значит все ОК, настройка завершена.
Заключение
Нам повезло, что нагрузка клиента в основном представляет собой операции чтения, что позволяет использовать FS-Cache совместно с NFS. Если бы проблема была в нагрузке по записи, мы бы не смогли эффективно воспользоваться данной технологией.
billing.netpoint-dc.com/billmgr?func=register&lang=ru
Еще быстрее! Переходим на протокол HTTP/2
После успешного тестирования на нашем хостинге протокола HTTP/2, мы будем производить планомерный переход всех наших площадок под новый протокол.
Новый протокол пришел на замену старого HTTP/1.1 еще в 2012 году. Но тогда HTTP/2 не получил широкого распространения, так как его не поддерживало большинство браузеров.
Протокол HTTP/2 существенно ускоряет открытие сайтов за счет следующих особенностей:
- соединения: несколько запросов могут быть отправлены через одно TCP-соединение, и ответы могут быть получены в любом порядке. Отпадает необходимость держать несколько TCP-соединений;
- приоритеты потоков: клиент может задавать серверу приоритеты — какого типа ресурсы для него более важны, чем другие;
- сжатие заголовка: размер заголовка HTTP может быть сокращен;
- push-отправка данных со стороны сервера: сервер может отправлять клиенту данные, которые тот еще не запрашивал, например, на основании данных о том, какую следующую страницу открывают пользователи.
HTTP/2 – это протокол, который, с одной стороны, содержит в себе наследие HTTP/1, а с другой стороны, имеет массу преимуществ по передаче данных, результатом чего стало значительное превосходство новой версии протокола над своим предшественником.
www.provisov.net
Спец предложение: мощный сервер с 60 минутной активацией
Приобретая готовое решение выделенных серверов, вы получает готовый аппаратно-программный комплекс профессионального уровня, размещенный в собственном сертифицированном дата центре в Германии, который в течении нескольких МИНУТ (max. 60) может быть запущен в эксплуатацию
Достоинства решения:
- Быстрая активация (60 минут или мы вернем 50% месячной стоимости);
- Спец цена! — Экономия до 350 евро, и это только при первом платеже!;
- Отсутствие установочного платежа;
- Доступ по IP-KVM для каждого сервера;
- Профессиональное оборудование;
- Сертифицированный дата центр в Германии;
- Гарантии качества услуг (SLA);
- Более 16 Лет успешной работы;
Акционные Тарифы:
все тарифы, вы найдете у нас на сайте: www.keyweb.ru/sales
Сhassis: Supermicro Superserver
- CPU: 2x Intel Xeon E5-2630v2
- RAM: 128 GB DDR3
- HDD:2x 2 TB SATA Enterprise
- SSD: 2x 240 GB
- RAID: Hardware controller (ESXi & Hyper-V Ready)
- LAN: 2x 1 Gbps NIC
- KVM: 24/7 KVM-IPMI
- Backup storage: 1000 GB
- Установка: 0.- €(вместо 299.-)
- Цена: 239.- € / месяц (вместо 299.-)
- Экономия на первом платеже 359 евро, в год более 900 евро!!!
Сhassis: Supermicro Superserver
- CPU: 1x Intel Xeon E5-2630v2
- RAM: 64 GB DDR3
- HDD: 2x 2 TB SATA Enterprise
- SAS: 1x 450 GB SAS 10K RPM
- RAID: Hardware controller (ESXi & Hyper-V Ready)
- LAN: 2x 1 Gbps NIC
- KVM: 24/7 KVM-IPMI
- Backup storage: 500 GB
- Установка: 0.- € (вместо 199.-)
- Цена: 169.- € / месяц (вместо 199.-)
- Экономия на первом платеже 229 евро, в год более 550 евро!!!
Обратите внимание, что под данными акционными серверами подразумеваются готовые конфигурации, отдельные компоненты которых не могут быть изменены. Предложение действет до 31 сентября 2018 года. Быстрая активация подразуемвает, что если оплата производиться в рабоий день с 9:00 до 16:00 не позднее чем через 60 минут после проведения оплаты клиенту отправляются данные доступа к серверу. В случае необходимости сервера индивидуальной конфигурации, просим Вас обратится в отдел продаж удобным для Вас способом: по телефону, через онлайн-чат, систему заявок или по скайпу.
keyweb.ru
Запуск услуг VDS в США
Рады Вам сообщить, что с сегодняшнего дня мы запустили предоставление услуг VDS в США.
Ознакомиться с тарифными планами на VDS в США, Вы можете здесь: www.mgnhost.ru/vds-us.php
Для получения 50% скидки на первый месяц использования VDS, воспользуйтесь промо-кодом: vds50
Скидка не распространяется на дополнительные услуги.
Ознакомиться с тарифными планами на VDS в США, Вы можете здесь: www.mgnhost.ru/vds-us.php
Для получения 50% скидки на первый месяц использования VDS, воспользуйтесь промо-кодом: vds50
Скидка не распространяется на дополнительные услуги.
В связи с расширением наших площадок
В связи с расширением наших площадок, спешим сообщить о появлении в наличии конфигураций:
- Intel Xeon E3-1275v6/32GB DDR4 ECC/2*240GB SSD INTEL EN — 6450 руб./ мес.
- Intel Xeon E3-1275v6/64GB DDR4 ECC/2*480GB SSD INTEL EN — 7140 руб./ мес.
- Порты — 1Gb shared (300 mbit/ sec guaranteed).
- IPv4 /32-адреса — 2 шт. из разных подсетей класса С (Эстонские/ РФ — на выбор).
- Расположение — Таллинн (Эстония, ДЦ Infonet) — наши стойки, наше оборудование, наши серверы.
- Сапорт — 24/7/ 365.
Каждый сервер доступен для бесплатного теста в течение 24 часов.
Будем рады предоставить нашим текущим и будущим клиентам наше новое оборудование.
Обе модели доступны как в единичном объеме, так и партией (несколько штук).
А так же в связи с необходимостью исполнения закона Яровой, с 1 октября 2018 года стоимость одного дополнительного IPv4 /32-адреса увеличивается до 45₽/месяц.
Данное нововведение касается всех текущих и будущих клиентов.
pinspb.ru/category/cod-services/arenda-serverov
Оличная альтернатива хостингу
Каждый вебмастер скажет, что для размещения сайта в сети нужен виртуальный хостинг. И если речь идет об одном небольшом сайте, то это — чистая правда. Но если сайтов несколько или это весьма объемный многостраничный веб-ресурс, то есть отличная альтернатива shared хостингу по сопоставимой стоимости, и это — виртуальный сервер.
Чем VDS сервер лучше виртуального хостинга?
- Нет ограничений по количеству сайтов.
- Гарантированные ресурсы процессора, дисков и оперативной памяти. Ваши. Без «соседей».
- Возможность тонких настроек ОС, установки любого нужного для работы ПО.
Зачем отказывать себе в сервере? Мифы или реальность?
Повод № 1. Стоимость
Виртуальный сервер стоит дороже, чем хостинг. Если смотреть только на цены «от», то хостинг будет дешевле, но при детальном рассмотрении предлагаемых параметров, станет очевидно, что это миф.
Повод № 2. Администрирование
Для управлением сервера нужны знания системного администрирования, а для хостинга — необязательны. И это тоже не 100% истина.
На самом деле, к хостингу полагается панель управления, которая и делает все сложное — простым. Точно такую же панель можно использовать для управления виртуальным сервером.
Более того, администрировать хостинг просто не получится, так как его настройки распространяются на сервер, на котором он и находится. И если Вы захотите установить что-то свое, например, расширение для оптимизации загрузки сервера, то это осуществить не получиться.
Шустрые виртуальные серверы на SSD дисках от 169 рублей!
Что входит в стоимость:
- Сервер на надежной виртуализации KVM
- Безлимитный Интернет 100 Мбит/сек.
- IP-адрес
- Первичная установка ОС
- Базовая защита от DDoS-атак
- Панель ISPmanager 5 Lite в подарок в 1й месяц использования VDS
- Техническая поддержка 24х7
rackstore.ru/virtual-server.html
Discounts Down Under - 50% Off Services
We're back to offer a huge 50% off all Flexible Resources and Fixed Instances at our Australian sites through till 31st October!
Need more reasons to consider Australia as your next site for DediServe services? How about;
- Next-gen cloud delivering industry-leading performance 24x7x365 Support as standard
- Structured, reliable billing available in the local currency (AUD)
- Plethora of up-to-date templates to choose from including Wordpress, cPanel, Plesk, Docker, Joomla and more!
- In-country multi-site capabilities
- Get the skinny on our latest Australian sites here. Then join us in the land down under!
https://manage.dediserve.com/cart/&step=0&cat_id=25
Сборка сервера: от заказа комплектующих до тестирования
Что происходит, когда наш клиент заказывает сервер произвольной конфигурации? Насколько надежны серверы, собранные по индивидуальному заказу? Эти и другие вопросы мы сегодня подробно обсудим в новой статье.
Заказ сервера
Несмотря на то, что в разделе доступных для заказа серверов присутствует несколько десятков различных конфигураций, некоторым клиентам требуются серверы специальной конфигурации. Чаще всего такое необходимо для создания сервера с очень высокой производительностью либо с большим количеством дисковых накопителей.
Чтобы удовлетворить такую потребность, была предусмотрена услуга «Выделенный сервер произвольной конфигурации». Конфигуратор на сайте позволяет за пару минут самостоятельно создать сервер любой сложности и арендовать его. Однако мало кто задумывается, как именно собираются эти серверы.
После того как клиент определился с нужной конфигурацией, сделал заказ и оплатил его, система автоматически создает тикет в панели управления. Такой тикет поступает в отдел сборки, и специалисты приступают к проверке заказа и, собственно, самой сборке сервера.
Процесс сборки
Проверка заказа
Конфигуратор на сайте чаще всего выбирает «правильный» вариант комплектующих, но в некоторых случаях клиенты могут выбрать не самый оптимальный вариант сочетания аппаратных компонентов. Например, RAID-контроллер, который не сможет выдать максимальную производительность в такой конфигурации, или нечетное количество планок оперативной памяти в многопроцессорных системах. Поэтому инженеры вначале проверяют заказ и в случае выявления потенциальных проблем обязательно предупреждают клиента в тикете.
В случае, если клиент согласен, что конфигурация не оптимальна, можно без проблем аннулировать заказ и создать новый. Денежные средства при аннулировании возвращаются на баланс панели управления в полном объеме. После того, как заказ проверен, мы приступаем к подготовке комплектующих и сборке сервера.
Комплектующие
Каждый сервер состоит из следующих комплектующих:
- корпус (идет сразу с блоком питания);
- материнская плата;
- оперативная память;
- процессоры;
- накопители;
- дисковые контроллеры (если есть в заказе);
- видеокарты (если есть в заказе).
Подготовка корпуса
Мы обычно используем корпусы Supermicrо, которые следует подготовить к установке материнской платы с помощью идущих в комплекте метизов. В разных моделях материнских плат разные точки крепления, поэтому следует определить количество метизов и болтов для каждой конкретной сборки.
Пока количество заказов было небольшим, мы просто брали предназначенный для корпуса комплект крепежа, а неиспользованный крепеж откладывали. В определенный момент стало ясно, что тратится очень большое время на поиск нужного болта и мы решили расфасовать весь крепеж, имеющийся на складе.
После того как последний пакет с крепежом был расфасован, стало ясно, что мы не зря проделали эту работу. Теперь каждый болт и каждый метиз лежит в строго отведенном для этого месте и это экономит огромное количество времени.
Для того, чтобы контакты материнской платы не соприкасались с металлическим корпусом и не произошло короткого замыкания, используется специальная пластиковая прослойка. Без нее сборка запрещена. Помимо этого, необходимо аккуратно выломать (да-да, это предусмотрено производителем) отверстия для портов в заглушке с задней части сервера. Выполняется элементарно с помощью плоской отвертки.
После этого на корпус наносятся наклейки с идентификатором заказа, а также серийный номер будущего сервера. Для удобства работы помимо буквенно-числового идентификатора на наклейках содержатся штрих-коды, позволяющие оперативно считать информацию с помощью сканера.
Установка материнской платы
Непосредственно перед установкой материнской платы инженеры выполняют некоторые подготовительные действия:
- надевают тонкие перчатки;
- надевают заземляющий браслет.
После того как материнскую плату поставили на место, закручиваются крепежные болты. При этом следует помнить, что текстолит достаточно хрупок, и не прилагать излишних усилий. Для экономии времени инженеры используют аккумуляторные отвертки.
Теперь к материнской плате подключаются кабели питания, а также вентиляторы системы охлаждения. Здесь важно то, что порой длина кабелей больше, чем необходимо, поэтому их аккуратно стягивают при помощи тонких нейлоновых стяжек. При отсутствии возможности закрепить стяжки к корпусу, производитель поставляет удобные крепежные площадки на двустороннем скотче. Концы аккуратно откусывают бокорезами.
Затем выполняется подключение лицевой панели и бэкплейна с помощью соответствующих кабелей. Теперь можно приступать к установке процессоров и прочих элементов.
Установка процессоров
Эта операция, пожалуй, самая тонкая и требующая внимательности. Еще 10 лет назад процессоры имели удобные «ножки», а сокеты представляли собой пластиковую матрицу с отверстиями. Благодаря этому достаточно было всего лишь аккуратно вставить процессор в сокет и закрыть защелку. Начиная с сокета LGA 775 процессоры лишились «ножек», остались только ровные контактные площадки. Сокеты, наоборот, теперь имеют контакты, однако они настолько маленькие и хрупкие, что любая операция с установкой процессора должна быть максимально точной.
Современный сокет FCLGA3647
Процессор линейки Intel Xeon Scalable
После того, как процессоры установлены на свои места приходит черед установки радиаторов охлаждения. Как правило, используются пассивные радиаторы, однако перед этим наносится термопаста — слой теплопроводящего материала, разделяющий процессор и радиатор. Чаще всего для этого используют кремнийорганическую пасту, такую как КПТ-8.
Здесь следует помнить, что основная задача термопасты — закрыть микроскопические дефекты как на поверхности процессора, так и на поверхности радиатора, обеспечивая максимально большую площадь соприкосновения. Поэтому ее наносят очень тонким и ровным слоем. Для этого используют либо специальную лопаточку, либо по старинке ненужную пластиковую карточку. Излишки убираются с помощью ватных палочек.
Установка оперативной памяти
Каждый производитель материнских плат самостоятельно определяет верный порядок установки модулей оперативной памяти, в зависимости от ее типа и скорости. Для Supermicro этот порядок установки прописан в инструкциях к каждой модели материнской платы. Тем не менее есть несколько достаточно универсальных правил, которые работают в большинстве случаев:
- нежелательно использовать нечетное количество планок (актуально для процессоров Intel® Xeon® линейки E5);
- следует поканально распределять память, чтобы система могла задействовать все возможные режимы механизмов управления;
- в одном сервере желательно использовать память с одинаковым значением задержки (latency), напряжения и частоты, в диапазоне, который поддерживает материнская плата.
Установка накопителей
Тут все просто. Дисковые накопители закрепляются в штатных салазках, после чего вставляются в сервер. Если были заказаны дисковые контроллеры или дополнительные сетевые карты, то они устанавливаются в соответствующие PCI-E слоты и закрепляются винтами. После того, как все установлено на свои места, инженер отдела сборки еще раз проверяет соответствие всех комплектующих заказу и отправляет сервер на стенд для прошивки и тестирования.
Укладка кабелей
Коснемся такой темы, как укладка кабелей внутри сервера. Тут тоже есть свои нюансы, главным из которых является ограниченность пространства. Большинство серверов спроектированы таким образом, чтобы занимать минимум места в стойке. Высота одного монтажного юнита составляет 43,7 мм. Из-за этого места для кабелей после установки материнской платы и прочей периферии остается достаточно мало.
Забавный факт: один монтажный юнит по высоте в точности равен одному вершку (древнерусская единица длины).
Всегда следует учитывать, что сквозь сервер воздух должен проходить беспрепятственно для эффективного охлаждения компонентов. Любые препятствия на его пути будут ухудшать отвод тепла, а следовательно, увеличивать расход электроэнергии из-за увеличенной нагрузки на систему охлаждения. Это особенно важно для серверов с несколькими GPU, температура которых под нагрузкой доходит до 80 градусов.
Воздушный поток разделяется поровну между всеми GPU
Поэтому все кабели укладываются таким образом, чтобы не перекрывать путь прохождения воздуха. Излишки при помощи стяжек закрепляются к штатным проушинам, а в случае их отсутствия к пластиковым площадкам с двусторонним скотчем.
Так выглядит сервер с аккуратно уложенными кабелями, которые не мешают прохождению воздушного потока
Прошивка комплектующих
Для начала ответим на достаточно часто задаваемый вопрос — зачем же это нужно? Ответ прост — эта процедура необходима для того, чтобы все компоненты сервера работали без ошибок, а также, чтобы повысить уровень безопасности.
Большинство компонентов сервера построены с расчетом на то, чтобы их можно было перепрограммировать. После выхода с конвеера в процессе тестирования и эксплуатации в большинстве случаев обнаруживаются ошибки и уязвимости программного обеспечения. Если бы возможности перепрограммирования компонентов не было предусмотрено, то для ликвидации этих программных проблем пришлось бы отзывать всю продукцию. Гораздо дешевле было создать возможность замены микропрограммы.
Перепрошивка IPMI
Модуль удаленного управления (IPMI / iLO / iDrac) — один из важнейших элементов сервера. Он представляет из себя независимый микрокомпьютер, работающий всегда, когда на материнской плате присутствует рабочее напряжение.
Даже когда в сервере нет комплектующих, этот микрокомпьютер работает, выполняя задачу интерпретации и корректировки данных с датчиков сервера. Модуль тесно связан со всеми подсистемами управления питанием и позволяет выполнять практически любые операции удаленно. Поэтому вопрос безопасности при доступе к такому устройству стоит очень остро. Своевременное обновление прошивки позволяет уберечь модуль от взлома.
Установка прошивки обычно производится непосредственно из веб-интерфейса, однако в некоторых случаях ее можно произвести по сети, отправив на модуль прошивку с соответствующим программным обеспечением.
Перепрошивка BIOS
Базовая система ввода-вывода помимо уже перечисленной причины безопасности требует обновления еще для одного важного момента. В прошивке BIOS имеются микрокоды процессоров, поддерживаемых материнской платой, а также микрокоды сетевых интерфейсов и чипсетов. Когда выходит новая версия процессора, производители материнских плат выпускают новые версии прошивок, которые содержат требуемый микрокод. Без этого новый процессор просто не сможет запуститься. Вместе с прошивкой BIOS зачастую обновляются и связанные модули, например, Intel® ME (Management Engine).
Помимо этого, выпуск новых прошивок предотвращает конфликты, возникающие при взаимодействии различных комплектующих (как встроенных в материнскую плату, так и сторонних устройств).
Дабы не быть голословными, приведем пример. Возьмем материнские платы Supermicro X10SRi/X10DRi/X10DRW, которые поддерживают процессоры Intel® Xeon® E5-XXXXv3. Если поставить туда процессор следующей версии E5-XXXXv4 плата стартует, однако будет выдавать странные ошибки сбоя оперативной памяти «Failing DIMM» в разных слотах. И проблема тут вовсе не в памяти, а в том, что контроллер памяти находится в процессоре. Следовательно, неверное опознавание процессора материнской платой ведет к тому, что возникают подобные проблемы. Перепрошивка с помощью поддерживаемого процессора полностью решает эту ситуацию.
В некоторых случаях производители оборудования искусственно прекращают поддержку новыми моделями материнских плат более старого оборудования. Ярким примером может служить материнская плата Supermicro X11DPi, которая с любой версией прошивки BIOS не будет работать с HBA-контроллерами Adaptec 7-ой серии. Дисковый контроллер просто не инициализируется, вызывая полное зависание сервера. И на данный момент эта проблема не имеет решения.
Перепрошивка дисковых контроллеров
Ошибки в программном обеспечении таких важных устройств, как дисковые контроллеры могут не просто доставить неприятности, но и стать источником очень крупных проблем. В большинстве случаев процесс очень простой, перепрошивка происходит с помощью родной утилиты, встроенной непосредственно в сам контроллер.
Следует помнить, что старая прошивка дискового контроллера может не только исправлять ошибки, но и кардинально менять способ хранения метаданных. Чтобы избежать неприятных ситуаций и сохранить данные в целости, перед выполнением перепрошивки следует обязательно прочитать список внесенных изменений в функционал. Эта информация всегда присутствует на сайте производителя оборудования и чаще всего дублируется в архиве с самой прошивкой.
Перепрошивка сетевых карт
Не менее серьезные проблемы, крайне сложные в диагностике, могут доставить сетевые карты с ошибками на уровне встроенного программного обеспечения. Помимо устранения ошибок, программное обеспечение сетевых карт напрямую может влиять на производительность. Так что это еще один обязательный пункт для инженеров, выполняющих сборку серверов.
Важно
Хотелось бы отдельно отметить, что все операции по перепрошивке компонентов потенциально опасны для оборудования, поэтому их допустимо производить только квалифицированным специалистам. Если вы уже являетесь нашим клиентом и обнаружили необходимость перепрошить какой-либо компонент сервера, то ни в коем случае не пытайтесь это делать самостоятельно. Просто напишите нам в тикете, какой компонент следует перепрошить, и это будет выполнено со всеми мерами предосторожности.
Тестирование
Покончив с обновлением программного обеспечения, инженер сборки приступает к нагрузочному тестированию собранного сервера. Такое тестирование позволяет выявить большинство проблем еще до того, как сервер будет сдан клиенту.
Тест оперативной памяти
Для того, чтобы проверить работоспособность всех установленных в сервер модулей оперативной памяти, запускается весьма популярный инструмент под названием memtester. Непосредственно перед выполнением тестирования, инженер сборки проверяет, чтобы все установленные в сервер модули памяти корректно отображались в BIOS.
При запуске тестирования происходит процесс чтения и записи данных в оперативную память, используя разную последовательность данных и порядок заполнения ячеек. Скорость выполнения всех тестов напрямую зависит от объема. Наши минимальные требования — это один полный цикл проверки.
Если в процессе тестирования выявлены ошибки, то мы ищем сбойный модуль оперативной памяти и исключаем его из конфигурации, заменяя на аналогичный. Затем процесс тестирования повторяется целиком. Только когда все итерации тестов будут пройдены без ошибок, сервер отправляется на стресс-тестирование.
Тест процессора и дисков
Нагрузочный тест имитирует максимальную нагрузку на сервер в течение минимум 6 часов для сервера с магнитными накопителями. В случае с твердотельными накопителями столь длительное тестирование может резко увеличить износ накопителя, поэтому для них проводится аналогичное тестирование с меньшим временем исполнения.
Нагрузочное тестирование для процессоров Intel проводится с помощью оригинальной утилиты Intel IPDT (Processor Diagnostic Tool). Этот процесс вызывает повышение температуры процессора до максимально допустимой эксплуатационной температуры, и система охлаждения должна эффективно отводить все это тепло. Инженеры сборочной постоянно следят за тем, чтобы сервер прошел это испытание, и температура всех компонентов не превышала заявленных эксплуатационных пределов.
После завершения тестирования проверяются параметры S.M.A.R.T. всех установленных дисков. Если хотя бы один параметр, заявленный производителем как повод для замены накопителя, имеет ненулевое значение, диск заменяется на другой и также тестируется для исключения вероятности возникновения проблем в «боевом режиме».
Заключение
Каждый сервер произвольной конфигурации, сдаваемый нами в аренду, множество раз проверяется и тестируется, поэтому их можно смело использовать для любых проектов сразу, не тратя время на повторные тестирования и проверки. На каждом заказанном сервере будет самая актуальная версия микропрограммного обеспечения каждого компонента, что дает хорошую защиту от существующих уязвимостей и ошибок.
Foreshadow: предвестник неприятностей?
Текущий 2018 год интересен тем, что чуть ли не каждый месяц появляется информация о новых аппаратных уязвимостях: Spectre и Meltdown. Совсем недавно — 2 недели назад! — были опубликованы громкие новости об уязвимостях Foreshadow и L1Terminal Fault, которые, как сообщается, могут обойти даже механизм SGX (Sofware Guard Extensions), которые ранее считался практически невзламываемым. Насколько опасны эти уязвимости? Можно ли от них защититься и если можно, то как? Обо всём этом мы поговорим ниже.
Краткая справка
Foreshadow, или L1TF — это целая группа уязвимостей, в которую входят:
- CVE-2018-3615 — для обхода SGX;
- CVE-2018-3620 — для атаки на ядро операционной системы, а также на режим SMM (System Management Mode);
- CVE-2018-3646 — для атаки на виртуальные машины.
Что такое SGX и как его можно обойти
Аббревиатура SGX означает Software Guard Extensions. Так называется набор инструкций процессоров Intel, используемых для выделения приватных областей кода и данных. В 2015 году один из создателей SGX Мэттью Хойкстра (Matthew Hoeskstra) опубликовал статью (см. также русский перевод), в которой выделил следующие цели создания этой технологии:
- дать разработчикам приложений возможность защитить критически важные данные от несанкционированного доступа или изменения со стороны зловредного ПО, запущенного с более высокими привилегиями;
- позволить приложениям обеспечивать целостность и конфиденциальность чувствительных данных и кода, не вмешиваясь в работу системы привилегий и не мешая ей планировать и контролировать ресурсы платформы;
- сделать так, чтобы платформа измеряла доверенный код и производила с помощью приложения подписанный аттестат и прочие сертификаты, удостоверяющие, что код был корректно инициализирован в доверенной среде;
- дать пользователям возможность держать над приложениями контроль, не ограничивая в то же время свободы устанавливать и удалять приложения и сервисы;
- позволить разработчикам создавать доверенные приложения с использованием известных им средств и процессов;
- обеспечить рост производительности доверенных приложений;
- позволить приложениям определять доверенные области кода и данных даже в случае, когда злоумышленник физически контролирует платформу и может осуществлять прямые атаки на память (см. один пример здесь).
В процитированной статье маркетинга гораздо больше, чем технических подробностей. В ней рассказано в общих чертах о том, ЧТО позволяет делать технология SGX, но нет ни слова о том, КАК это делается. Об этом мы подробно расскажем ниже. В своём изложении мы будем в первую очередь опираться на подробную статью, опубликованную Международной организацией исследований в области криптологии (IACR, International Association for Cryptologic Research).
SGX создаёт в памяти защищённый регион — PRM (Processor Reserved Memory), который также называют анклавом. Процессор защищает анклав от любых попыток доступа, в том числе и со стороны ядра, гипервизора и SMM (System Management Mode), а также от попыток доступа со стороны периферийных устройств.
У PRM есть специальный кэш, так называемый EPC (Enclave Page Cache), который состоит из четырёхкилобайтных страниц, хранящих код анклава и данные. При вызове доверенной функции приложение «видит» только данные анклава; любой внешний доступ, в том числе и со стороны ОС, запрещён.
При любой попытке доступа к анклаву происходит процедура так называемой аттестации. Анклав запрашивает аппаратно подписанный отчёт, содержащий в том числе и сведения о его ценности. Этот отчёт отправляется на сервер аттестации. Анклаву высылается открытая часть ключа приложения; далее генерируется приватный ключ, зависящий от анклава и платформы. Ключ шифруется подписывающим ключом и сохраняется для дальнейшего использования.
Как отмечено в официальных публикациях Intel, SGX может защищать от разного рода атак на данные и код: как со стороны системного и пользовательского ПО, так и со стороны загрузчика. А вот от так называемых side-channel-атак SGX защитить не может. Обойти SGX не могут и пресловутые Spectre и Meltdown.
Однако в последнее время появились атаки (собственно, ещё до Foreshadow — см., например, здесь), которые позволяют обходить защиту SGX. Причём Foreshadow — это всего лишь самая громкая и нашумевшая из них.
В документации к SGX отмечено, что «из анклавов невозможно читать и в них невозможно ничего записывать вне зависимости от наличия привилегий любого уровня». Однако на самом деле всё обстоит далеко не так.
Ещё весной этого года появилась информация об атаке под названием SGX Spectre, с помощью которой можно извлекать данные из анклавов. Как показали исследователи из университета штата Огайо (см., например, здесь), это возможно благодаря «дырам» в SDK, с помощью которых разработчики могут интегрировать поддержку SGX в свои приложения. В числе затронутых SDK оказались Intel SGX SDK, Rust-SGX и Graphene-SGX. С детальным разбором этой атаки можно ознакомиться в этой статье; на Youtube также было опубликовано видео с наглядной демонстрацией примера.
Видео, конечно, неубедительное: сам факт проникновения в анклав не означает, что важные данные могут быть украдены. Тем не менее, нужно констатировать: целостность и конфиденциальность механизма SGX нарушены.
Foreshadow нарушает изоляцию, используя так называемую атаку по стороннему каналу (side-channel attack).
Как и в пресловутых Spectre и Meltdown, уязвимость использует механизм спекулятивного исполнения команд. В её основе лежит следующий момент: при доступе к памяти по виртуальному адресу, приводящему к исключению (terminal page fault) из-за отсутствия флага Present в таблице PTE (Page Table Entries), процессоры Intel® спекулятивно рассчитывают физический адрес и загружают данные, если они имеются в L1-кэше. Спекулятивные расчёты осуществляются до проверки наличия данных в физической памяти и до проверки доступности этих данных для чтения. Если флага Present в PTE нет, то операция отбрасывается; но данные при этом «оседают» в кэше и могут быть из него извлечены. Данные могут быть извлечены абсолютно по любому физическому адресу; это открывает обширные возможности для злоумышленников и позволяет, например, извлечь данные на хосте из гостевой машины. Видео с демонстрациями уже появились:
Впрочем, видео выглядит, прямо скажем, не очень убедительно и напоминает многочисленные демонстрации работы уязвимостей Spectre и Meltdown, что гуляли по Интернету в начале этого года: вроде бы и удалось преодолеть защиту — но что дальше? Конечно, обход SGX — прецедент явно не очень хороший
Чего бояться?
В отличие от нашумевших Spectre и Meltdown, Foreshadow угрожает только процессорам Intel. В описаниях отмечается, что с помощью этой атаки можно извлечь из анклава не просто конфиденциальные данные, но и приватный ключ аттестации, что подрывает доверие ко всей SGX-экосистеме.
Различные вариации Foreshadow угрожают так называемому System Management Mode (SMM), ядру операционной системы гипервизоров. Некоторые эксперты отмечают, что с помощью Foreshadow можно воровать данные из виртуальных машин в стороннем облаке. Есть публикации, где отмечается, что новая атака даже позволяет обойти патчи, вычисленные ранее для защиты от атак Spectre и Meltdown.
Однако — как и в случае со Spectre и Meltdown — ко всем громким заявлениям следует относиться крайне осторожно. Ни одного случая кражи значимых и конфиденциальных данных с помощью нашумевших атак пока что зафиксировано не было. Опубликованные прототипы эксплойтов (как и предупреждают сами их авторы) представляют собой не более чем экспериментальные образцы, оторванные от реальной практики, и будут работать далеко не всегда и не у всех, особенно если речь идёт о виртуальных машинах. Поэтому паниковать пока что рано: чтобы не просто проникнуть в пределы анклава, а извлечь из него действительно важную информацию, нужно очень и очень постараться.
На текущий момент действительно серьёзных атак зафиксировано не было.
Патчи и производительность
Тема патчей, защищающих от аппаратных уязвимостей (а если не защищающих, то нивелирующих их последствия), тоже очень актуальна. Вспомним недавнюю историю со Spectre и Meltdown: многие меры были приняты в пожарном порядке, что привело к не самым лучшим последствиям: внезапные перезагрузки системы, резкое падение производительности и т.п. Компании Microsoft пришлось даже выпустить обновления, отключающие патчи Intel. За первые три месяца текущего года только против Intel было подано 32 судебных иска.
На публикацию информации об уязвимости Foreshadow крупные компании отреагировали оперативно: с соответствующими заявлениями выступили Intel, Red Hat, SUSE, VMware, Oracle. Не менее оперативно были выпущены обновления для продукции Cisco и для ядра Linux.
Не обошлось и без казусов: компания Intel быстро выпустила обновления микрокода, но при этом без странных казусов: неожиданно был провозглашен запрет на публикацию результатов тестирования производительности до и после обновления (потом, правда, запрет был отменён). Что это было — сказать сложно. А тема влияния патчей на производительность несомненно заслуживает отдельного исследования и отдельной статьи. И не исключено, что такую статью мы в ближайшем будущем опубликуем.
Заключение
В этой статье мы привели краткий обзор уязвимостей класса Foreshadow. Естественно, в рамках одной статьи рассказать обо всех аспектах уязвимостей группы Foreshadow невозможно. Поэтому приводим подборку полезных ссылок для желающих узнать больше:
- разъяснение устройства приложений с использованием SGX (см. также русский перевод);
- разбор особеннностей механизма SGX (в том числе и его слабых мест);
- специальный сайт, посвящённый уязвимостям из группы Foreshadow;
- обзор техник атаки на SGX.