Turbo per core limit control что это
Если вам нужен максимальный контроль процесса оверклокинга, вам нужно использовать для этого настройки BIOS. Это руководство расскажет вам о выполнении эталонных тестов, изменении параметров, мониторинге вашей системы и не только 1 2 .
Если вам нужен максимальный контроль процесса оверклокинга, вам нужно использовать для этого настройки BIOS. Это руководство расскажет вам о выполнении эталонных тестов, изменении параметров, мониторинге вашей системы и не только 1 2 .
BIOS (базовая система ввода-вывода) — это программное обеспечение системной платы, которое загружается до операционной системы. В нем имеется графический интерфейс для настройки аппаратного обеспечения системной платы. С помощью BIOS можно изменить такие параметры как напряжение и частота, и поэтому BIOS можно использовать для разгона центрального процессора с целью достичь более высокой тактовой частоты и потенциально более высокой производительности.
В этой статье предполагается, что вы понимаете сущность и принципы оверклокинга. Если вы незнакомы с оверклокингом и хотите лучше изучить основы, посмотрите этот обзор оверклокинга, чтобы войти в курс дела.
Также убедитесь, что вы используете подходящее программное обеспечение.
Прежде чем пытаться использовать BIOS для оверклокинга, стоит взглянуть на программное обеспечение, которое может упростить этот процесс. Например, утилита Intel® Extreme Tuning Utility (Intel® XTU) может стать удобным решением для тех, кто незнаком с оверклокингом. Еще более простой автоматизированный инструмент Intel® Performance Maximizer (Intel® PM) предназначен для новейших процессоров Intel® Core™, и все подробности о нем вы можете узнать здесь.
Утилита BIOS обеспечивает наиболее полный доступ ко всем доступным настройкам производительности системы, что делает ее полезнее для целей разгона. Если вы хотите вручную настраивать все параметры системы и контролировать все аспекты оверклокинга, вам следует использовать BIOS.
Прежде чем начать, обязательно обновите BIOS до последней версии. Это позволит вам использовать все новые возможности и исправления, выпущенные производителем системной платы. Поищите свою системную плату в интернете или проконсультируйтесь с документацией, чтобы найти правильную процедуру обновления BIOS.
Внешний вид графического интерфейса BIOS зависит от производителя системной платы. Для доступа к BIOS нужно нажать определенную клавишу, обычно F2 или Delete, спустя несколько мгновений после включения компьютера, но до появления экрана загрузки Windows. Конкретные указания можно найти в документации по системной плате.
Изменение тактовой частоты или напряжения может привести к аннулированию любых гарантийных обязательств на продукцию и снизить стабильность, производительность и срок службы процессора и других компонентов.
Несколько слов о контейнерах и Kubernetes
Kubernetes, по сути, является современным стандартом в мире инфраструктуры. Его основная задача — оркестровка контейнеров.
Контейнеры
В прошлом нам приходилось создавать артефакты вроде Java JAR'ов/WAR'ов, Python Egg'ов или исполняемых файлов для последующего запуска на серверах. Однако, чтобы заставить их функционировать, приходилось проделывать дополнительную работу: устанавливать среду выполнения (Java/Python), размещать необходимые файлы в нужных местах, обеспечивать совместимость с конкретной версией операционной системы и т.д. Другими словами, приходилось уделять пристальное внимание управлению конфигурациями (что часто служило причиной раздоров между разработчиками и системными администраторами).
Контейнеры всё изменили. Теперь артефактом выступает контейнерный образ. Его можно представить в виде этакого расширенного исполняемого файла, содержащего не только программу, но и полноценную среду выполнения (Java/Python/…), а также необходимые файлы/пакеты, предустановленные и готовые к запуску. Контейнеры можно развертывать и запускать на различных серверах без каких-либо дополнительных действий.
Кроме того, контейнеры работают в собственном окружении-песочнице. У них есть свой собственный виртуальный сетевой адаптер, своя файловая система с ограниченным доступом, своя иерархия процессов, свои ограничения на CPU и память и т. д. Все это реализовано благодаря особой подсистеме ядра Linux — namespaces (пространства имен).
Kubernetes
Как было сказано ранее, Kubernetes — это оркестратор контейнеров. Он работает следующим образом: вы предоставляете ему пул машин, а затем говорите: «Эй, Kubernetes, запусти-ка десять экземпляров моего контейнера с 2 процессорами и 3 Гб памяти на каждый, и поддерживай их в рабочем состоянии!». Kubernetes позаботится обо все остальном. Он найдет свободные мощности, запустит контейнеры и будет перезапускать их при необходимости, выкатит обновление при смене версий и т.д. По сути, Kubernetes позволяет абстрагироваться от аппаратной составляющей и делает все разнообразие систем пригодным для развертывания и работы приложений.
Kubernetes с точки зрения простого обывателя
Ковыряемся в БИОС от глюкобайта
Итак, первым у нас идет функция Roboost Graphic Booster. Назначение ее вытекает из ее же названия - повышение производительности видеокарты. Естественно, самым идиотским способом - повышением частоты PCI-E ну и еще там по мелочи (вот меня всегда убивало: что за бред, ведь в 99.99% случаев производительность видео упирается в свойства и характеристики кристалла и памяти, но определенно не в ПС самой шины. На кой пихать этот бесполезный хлам ). В общем, обчыному пользователю она не нужна, а оверклокеру и подавно - смело ставим на Стандарт или авто и не забиваем себе мозги.
Далее идет CPU Clock Ratio. Ну тут нужно быть уже полным "дубом" чтобы не понять назначение сей функиции - изменение множителя. Удобно, что множитель задается цифрой вручную. Однако, дробный множитель мы там выставить не сможем, он выставляется с помощью следующей функции (сие применимо только для 45-нм процессоров Yorkfield и Wolfdale).
Ну далее мы видим значение частоты процессора при выбранном множителе и частоте шины, в общем понятно
CPU Host Clock Control - функция, которая блокирует и разблокирует ручное управление частотой шины процессора, PCI-E. Овеклокерам обзятельно включать
CPU Host Frequency - сие дело жизненно необходимо для овера - оно позволяет выставить значение чатоты шины FSB процессора (глюкобайт опять задал бесконечно здоровый диапазон значений - бсегда это бесило )
PCI Express Frequency - оно и понятно, задает частоту шины PCI-E. При разгоне желательно (да какое там, "желательно", - обязательно! фиксировать в пределах 100-103 МГц (многие оверы предпочитают ставить на значении 101, якобы это добавляет стабильности. Однако это все зависит от самой платы. Некоторые, например, ставили и 107. )). В противном случае посыпятся жесткие диски (а в очень, очень редких случаях может сыпануться и видеокарта, если значение частоты будет слишком большое).
C.I.A. 2 - обыному пользователю, неискушенному в оверклокерскому деле, но желающему повысить быстродействие компьютера может пригодиться - данная фигня позволяет включить динамический рагон при наргузке процессора. Естественно, есть несколько пресетов, отличающихся степенью разгона. Нам оверам, она на (censoured) не нужна, поэтому отключаем ее. (к слову сказать она и без того кривая).
Perfomance Enchance - сия функция для ленивых оверов, которым лень подбирать минимальные значения таймингов и Perfomance Level, заставляя маму делать это самой. Однако я лично ни разу не пользовался ею, помня тот кошмар с выставлением таймингов, который был у плат от глюкобайта раньше, предпочитая выставлять все вручную.
System Memory Multiplier - выставление частоты памяти и значения FSB страпа (грубо выражаясь, страп - это такая дрянь, которая понижает ПСП памяти при преодолении определенной частоты фронтальной шины). Частоты памяти показывается рядом и вычисляется по формуле FSBxMultiplier. Значений мнеодителя и страпа много, поэтому можно тонко настроить производительность памяти.
DRAM Timing Selectable - отключение/включение ручного управления таймингами памяти.
Далее идет целый раздел настроек тамингов памяти. Весь я его описывать не буду, ибо каждые значения для разного комплекта модулей памяти свои. Однако внимательный читатель наверняка заметил отсутствие в списке очень важного параметра: Perfomance level, серьезно влияющего на ПСП. Не стоит негодовать и поливать грязью платы, просто инженеры Гигабайт решили замаскировать этот параметр под ничего не говорящей неискушенному позователю функцией Static tREAD Value. Хитро, правда?
Далее идет раздел управления параметрами тактового генератора - Clock Driving & Skew Control.
Сии "прричендалы" понадобятся Вам только в тонкой настройке системы после разгона, для повышения стабильности системы, да и то при существенном разгоне. В основном, их можно оставить в покое.
Далее идет раздел управления напряжением, с главным "выключателем" System Voltage Control, у которого есть два значения: ручное и Авто. На авто я настоятельно не рекомендую ставить значения напруг - при разгоне плата устанавливает их просто баснословными. лучше все вручную.
DDR2 Voltage Control - оно и дураку понятно - позволяет овысить напряжение на памяти. Инженеры Гигабайт даже подсветили значения, что они считают небезопасными, розовым и красным цветом.
PCI-E Voltage Control - то же самое, только напруги для PCI-E.
FSB Overvoltage control - повышение напряжения на фронтальную шину FSB, понадобится при больших значениях оной (как минимум, за 400-420)
(G) MCH OverVoltage Control - добавление напруги на северный мост. Нужно для достижений больших значений FSB и частоты памяти.
ВНИМАНИЕ! Настоятельно советую (владельцам плат на на базе Х38/Х48 в особенности) поменять термоинтерфейс северника! Ибо то, что глюкобайтовци туда нацепили - это издевательство над здравым смыслом.
К слову, не советую владельцам плат на наборе логики Х38/Х48 особо увлекаться - мосты и без того раскалются а тут еще дополнительная напруга.
СPU Voltage Control - позволяет повышать/понижать напряжение на процессоре.
Loadline Calibration - эта весчь позволяет избежать процседания напряжения на процессоре при нагрузке. Теоретически. Фактически она реализовна у Гигабайта настолько отвратительно, что при даже включенной функции просадки достигают 0.05-0.06 В!! В случае двуядерных процессоров жить еще можно, но когда речь идет о четырехьядерных. Хоть намыливай веревку и вешайся. Ужас!
Ранее господа от глюкобайта любили применять так называемую "защиту от дурака", которая скрывала бы функции разгона в БИОСе, при этом же распихивали все функции куда только можно. Сейчас, как видите, все сосредоточено в одном разделе, но и при этом господа инженеры не удержались от искушения. С помощью комбинации клавиш Ctrl+F1, нажатой в основном окне БИОС, в разделе M.I.T. открываются еще две функции: CPU GTLREF1 Voltage control и CPU GTLREF2 Voltage Control. Я долго не мог понять для чего они нужны, и тем более зачем их нужно было скрывать, пока не понял, что они позволяют более тонку управлять напругой, подаваемой на процессор. Дело в том, что шаг подаваемой напруги на процессор не постоянный - он постепенно увеличвается со значением напряжения достигая значения 0.05-0.1 В при большbх значениях VCore. Поэтому для более тонкого управления напругой используются сии функции.
Ну, в общем-то и все. Надеюсь кому-то этот маразм старца, что я написал, да и поможет.
Возможности BIOS Setup
Дабы не перегружать статью кучей скриншотов и описанием малоинтересных оверклокеру разделов, проход по всем меню BIOS’а сделан в виде видеоролика:
Хоть на материнской плате и используется UEFI вместо устаревшего BIOS, графическая оболочка практически не претерпела изменений по сравнению со старыми платами на микрокоде AMI. С другой стороны, попытки «нарисовать» новую оболочку производителем явно предпринимались, ибо в некоторых версиях прошивки (к примеру, в P67AF308.BST) оболочка совсем другая. Но «более красивая» оболочка была менее удобной в навигации, а возможность управления средствами мыши являлась чисто номинальной функцией: без возможности комфортного применения при движении мыши можно было наблюдать задержку около секунды. В общем, отказ от новой оболочки в последней версии прошивки – шаг оправданный.
Остановимся более подробно на настройках, отвечающих за разгон.
реклама
Для установки коэффициента умножения процессора предоставляется два различных алгоритма:
Первый – Fixed CPU Ratio, что понятно из названия, позволяет просто зафиксировать любой требуемый множитель, лишь бы процессор был способен его «переварить». Доступный диапазон значений – от 16 до 100. Множитель фиксируется как для состояния простоя, так и под нагрузкой.
Второй вариант – Turbo Mode. Вообще, Turbo Mode состоит из четырёх отдельных значений, соответствующих различному количеству рабочих ядер процессора (их можно отключать в меню настроек CPU). То есть, если у процессора включены четыре ядра, то множитель будет установлен по выставленному в пункте меню «4 Core Ratio Limit», если включены два ядра, то множитель будет установлен по выставленному в пункте меню «2 Core Ratio Limit» и так далее. Но и этот вроде простой алгоритм способен давать сбои, к примеру, если выставить бо́льший множитель для режимов с бо́льшим количеством включённых ядер, то все выставленные значения будут игнорироваться. Поясню.
Устанавливаются, допустим, следующие настройки (процессор – 2600K, все устанавливаемые в настройках множители, разумеется, заведомо рабочие):
- 1 Core Ratio Limit=43;
- 2 Core Ratio Limit=44;
- 3 Core Ratio Limit=45;
- 4 Core Ratio Limit=46.
В таком виде получится следующая картина:
- Активированы четыре ядра: Множитель x35;
- Активированы три ядра: Множитель x36;
- Активированы два ядра: Множитель x37;
- Активировано одно ядро: Множитель x38;
Без нагрузки, независимо от выбранных режимов, множитель снижается до х16, то есть активны функции энергосбережения, для процессоров с литерой K это единственное преимущество Turbo Mode по сравнению с режимом Fixed CPU Ratio.
Ещё из интересного: в настройках можно установить два значения под названием Power Limit Value, отвечающие за установку предела энергопотребления процессора. Первый предел (Power Limit 1 Value) берет на себя планку «долговременного» энергопотребления, второй предел (Power Limit 2 Value) - планку «кратковременного» энергопотребления. В настройках можно выключить Power Limit 2 Value. В случае превышения установленных значений материнская плата сбрасывает частоту работы процессора на штатное значение, при этом, что примечательно, напряжение питания не сбрасывается, весьма странно. Очередная «фикция»?
Список доступных для изменения таймингов памяти, в порядке их расположения в меню BIOS’а:
Стоит обратить внимание, что большинству привычна формула таймингов tCL-tRCD-tRP-tRAS, и она же используется при маркировке характеристик памяти, в программах мониторинга, а в настройках TP67XE используется формула таймингов tCL-tRP-tRCD-tRAS. Помнится, по невнимательности долго мучился со стендовой памятью на микросхемах PCS, которая любит завышение tRCD…
реклама
Доступные множители памяти не отличаются от других плат для процессоров SandyBridge и позволяют выставлять частоту её работы в диапазоне от 1067 до 2133 МГц.
Список доступных для изменения напряжений, в порядке их расположения в меню BIOS’а:
* в режиме «Fixed Mode».
Для установки напряжения питания процессора есть четыре различных режима:
- SPEC Voltage;
- Auto;
- Offset Mode;
- Fixed Mode.
Режим «SPEC Voltage» - номинальное напряжение для процессора. Но либо в процессор вшита какая-либо таблица VID значений для разных частот, либо это самодеятельность материнской платы, в зависимости от частоты работы процессора данное значение увеличивается.
Режим «Auto» - понятное дело, установка напряжения питания по усмотрению материнской платы, и интересует оверклокеров менее всего.
«Offset Mode» подразумевает прибавление напряжения питания относительно «SPEC Voltage» с шагом 0.01 В, вплоть до значения +0.52 В. При работе в данном режиме, во-первых, остаётся возможность задействовать технологии энергосбережения, а во-вторых, при серьёзном разгоне можно отодвинуть верхнюю планку доступного напряжения питания вплоть до 1.8 В+. С учётом того, что значение «SPEC Voltage» растёт при разгоне процессора, надо быть осторожнее при выставлении значения в меню «Offset», ибо можно получить значения на 0.1-0.15 В выше предполагаемых изначально.
Режим «Fixed Mode» позволяет зафиксировать любое из необходимых значений напряжения питания в диапазоне 1.0-1.79 В, разумеется, технологии энергосбережения в данном режиме работы недоступны.
В целом, UEFI BIOS тестируемой платы оставил двойственные впечатления: вроде бы все необходимые для хорошего разгона процессора настройки присутствуют, но без «косяков» не обошлось.
Тестовый стенд
Тестирование Biostar TP67XE (bios 4.6.4.) проводилось на следующей конфигурации:
Проверка разгона
Установка напряжений
Чтобы быть уверенным при разгоне и при установке напряжений, не мешает узнать, на сколько установленные в настройках значения расходятся с реальными. Все замеры производились при помощи мультиметра Mastech MY64.
реклама
По результатам видно, что программным мониторингом вполне можно пользоваться, отклонения замеренных напряжений от показаний мониторинга невелики. А вот отклонения установленных в настройках напряжений от показаний мониторинга/замеров местами великоваты, особенно это касается напряжений CPU Vcore и Vcc IO (CPU VTT).
Ещё одна особенность платы – это «обратная» работа функции LoadLine, да и называется в настройках она именно как «LoadLine», а не как «LoadLine Calibration», в отличие от материнских плат других производителей. При LoadLine off напряжение под нагрузкой растёт, при loadLine on – падает. Промежуточных значений нет. Кстати, чем выше установленное напряжение CPU Vcore, тем выше разброс значений между простоем и нагрузкой, вплоть до 0.05 В при установленных 1.4 и до 0.07 В при установленных 1.45 В.
Разгон по BCLK
Разгон по базовой частоте для LGA 1155 процессоров, как правило – это смешные цифры, не выбилась из общей массы и данная материнская плата, показав не очень-то хороший результат в 104.8 МГц. Что примечательно, на частоте 104.8 наблюдается стабильность в таких тестах, как Prime95 или LinX, однако уже при базовой частоте 105.0 МГц материнской плате не удаётся пройти POST.
реклама
Разгон оперативной памяти
Добиться стабильного функционирования оперативной памяти с множителем х21.33 не удалось, что странно, ведь оперативная память ограничителем частот не выступает. Возможно, проблемы совместимости, возможно - проблемы конкретно взятого экземпляра материнской платы. С множителем памяти x18.67 практически удалось достичь предела по BCLK, причём даже при использовании агрессивных задержек 6-9-6-24-1T, что дало итоговую частоту – DDR3-1951.
Разгон процессора
реклама
Вклад материнских плат в разгон процессоров, как правило, невелик, и разгон ограничивается либо температурным режимом, либо нежеланием повышать напряжение питания выше разумных пределов.
Можно было бы погоняться и за значением 5 ГГц, но, процессор не из удачных, пришлось бы повышать напряжение питания свыше 1.5 В.
Обзор фирменного ПО
Toverclocker
реклама
Данная утилита является наиболее функциональной и крупной среди поставляемых вместе с материнской платой.
Меню утилиты разбито на несколько вкладок. Первые две – информационные, и предоставляют справку о процессоре и оперативной памяти:
Более интересной с точки зрения оверклокера могла бы являться вкладка OC Tweaker, но её функциональность невелика. Да, некоторыми напряжениями можно «покрутить», однако разгонять нечего, базовую частоту данная программа изменять не умеет, хотя меню для настройки присутствует.
реклама
Единственная вкладка, представляющая хоть какой-то интерес – H/W Monitor, по крайней мере, исходя из замеров напряжений, значениям мониторинга можно верить.
реклама
Green Power Utility
Программа с простеньким интерфейсом, предназначена для управления функциями энергосбережения. Также в ней присутствует мониторинг энергопотребления процессора.
Из доступных настроек – только пять иконок с режимами «Typical», «Performance», «Medium», «Maxi-Energy» и «Auto». Что интересно, данная утилита не запускается, если включена программа Toverclocker.
Мониторинг основных показателей системы
При оверклокинге необходимо обеспечить тщательное наблюдение за системой, поскольку изменения электропитания аппаратного обеспечения могут повлиять на рабочую температуру.
В BIOS имеются очень ограниченные возможности мониторинга системы, поэтому лучше использовать для этой цели программное обеспечение, работающее в Windows. Intel® XTU предлагает полный набор инструментов для мониторинга системы, также доступны другие инструменты, в том числе CPU-Z, CoreTemp, HWiNFO32 и т. д.
Теперь вы понимаете настраиваемые параметры и можете приступить к тестированию производительности системы.
Ссылки
Такова наша история. Следующие материалы сильно помогли разобраться в том, что происходит:
Встроенный звук
Ничего необычного у встроенного Realtek ALC892 нет, ни в худшую, ни в лучшую сторону. Каких-либо посторонних шумов нет, при прослушивании музыки на Microlab SOLO 7c ограничителем качества выступает скорее акустика, нежели встроенный звук материнской платы.
Параметры, важные для оверклокинга
BIOS обеспечивает доступ ко всему аппаратному обеспечению системы, и поэтому в утилите имеется много меню. Структура BIOS может отличаться в зависимости от производителя системной платы, поэтому точные названия или расположение элементов меню также могут отличаться. Поищите местонахождение необходимых параметров на онлайн-ресурсов или исследуйте меню BIOS, пока не найдете желаемый параметр.
Далее приведен перечень наиболее полезных для оверклокинга параметров:
- CPU Core Ratio (коэффициент ядра ЦП) или множитель определяет скорость процессора. Общая скорость процессора рассчитывается посредством умножения базовой тактовой частоты (BCLK) на этот коэффициент. Например, при умножении BCLK в 100 МГц на коэффициент ядра 45 мы получим тактовую частоту процессора 4500 МГц или 4,5 ГГц. Обычно этот параметр можно изменить как для отдельных ядер, так и для всех ядер.
- CPU Core Voltage (напряжение ядра процессора) — определяет подаваемое на процессор напряжение. При повышении напряжения ядра процессор получает дополнительные ресурсы для работы на более высокой тактовой частоте.
- CPU Cache/Ring Ratio (коэффициент кэша / вызовов процессора) определяет частоту определенных компонентов процессора, таких как кэш-память и контроллера памяти.
- CPU Cache/Ring Voltage (напряжение кэша / вызовов) позволяет повысить напряжение кэш-памяти процессора. Это помогает стабилизировать работу процессора при оверклокинге. На некоторых платформах это напряжение связано с напряжением ядра процессора, и его нельзя изменить отдельно.
Шаг 1: определение исходной производительности
Первый шаг оверклокинга заключается в определении исходной производительности системы с помощью программы тестирования производительности. Это позволяет легко сравнивать показатели производительности после оверклокинга и оценивать улучшения. Поскольку программу тестирования нельзя запустить из BIOS, вам потребуется программа для Windows.
Существует много методов тестирования аппаратного обеспечения, в том числе для этого можно использовать ПО Intel® Extreme Tuning Utility. В нашем более полном руководстве по оверклокингу мы перечислили еще несколько полезных инструментов.
После определения исходной производительности запишите полученные показатели, чтобы вы могли сравнить с ними полученные результаты.
Решение и последствия
Время отклика p95
Задержка запросов критически важного сервиса, 95-я процентиль
Расходы на эксплуатацию
Число потраченных экземпляро-часов
Заключение
Biostar TP67XE оставила после себя двоякие впечатления. С одной стороны, продукт вполне хороший, есть облегчающие работу индикатор POST-кодов и кнопки включения/перезагрузки, позволяющие причислить плату к «топам». А с другой - обилие мелких и (на первый взгляд) малозначительных недоработок оставляет о плате негативное впечатление. По крайней мере, сам я вряд ли приобрел бы себе такую материнскую плату после столь глубокого знакомства.
Индикаторы регулирования тока и предела мощности в утилите Intel® XTU питания
Применимо ко всем процессорам Intel® с Intel® XTU утилитой.
Объяснение того, что это означает, когда в утилите "Yes Intel® XTU" отображается «Да» для регулирования текущих ограничений и регулирования мощности.
Что это означает, когда индикаторы регулирования текущих ограничений и регулирования мощности отображают «Да» в утилите Intel® XTU?
Процессоры имеют два режима термозащиты: регулирования и автоматического выключения. Когда ядро превысит установленную температуру для дростуры, оно начинает уменьшать мощность, чтобы вернуть температуру ниже за это место. Максимальная температура может отличаться в зависимости от процессора и настроек BIOS.
Если условия таковы, что тактовая температура не может быть выключена, например, при сбое системы температурного решения или неправильной сборке, процессор будет автоматически выключен для предотвращения необрастимых повреждений.
Текущее ограничение тактовой скорости
Существует несколько причин, по которым существующий лимит ограничивает возможности процессора. Три распространенных причины для регулирования текущих ограничений:
- Процессор Core IccMax в XTU установлен слишком низко.
- Текущий предел напряжения в BIOS установлен слишком низко. (Различные производители материнской платы могут иметь разные названия для этого управления, поэтому обратитесь к поставщику вашей материнской платы).
- Motherboard не может обеспечить достаточное количество тока для данного процессора. При подмене материнской платы с микросхемой с очень высокой температурной мощностью (TDP) возможно понижение тактовой мощности даже при установленных максимальных пределах.
Ограничение мощности для регулирования
Существует несколько причин, по которым предельные энергоемкие мощности могут быть отключены для процессора. Три распространенных причины регулирования тактовой мощности:
Что такое request'ы и limit'ы в Kubernetes
Окей, мы разобрались с контейнерами и Kubernetes. Также мы знаем, что несколько контейнеров могут находиться на одной машине.
Можно провести аналогию с коммунальной квартирой. Берется просторное помещение (машины/узлы) и сдается нескольким арендаторам (контейнерам). Kubernetes выступает в роли риэлтора. Возникает вопрос, как удержать квартирантов от конфликтов друг с другом? Что, если один из них, скажем, решит занять ванную комнату на полдня?
Именно здесь в игру вступают request'ы и limit'ы. CPU Request нужен исключительно для планирования. Это нечто вроде «списка желаний» контейнера, и используется он для подбора самого подходящего узла. В то же время CPU Limit можно сравнить с договором аренды — как только мы подберем узел для контейнера, тот не сможет выйти за установленные пределы. И вот тут возникает проблема…
Как реализованы request'ы и limit'ы в Kubernetes
Kubernetes использует встроенный в ядро механизм троттлинга (пропуска тактов) для реализации CPU limit'ов. Если приложение превышает лимит, включается троттлинг (т.е. оно получает меньше тактов CPU). Request'ы и limit'ы для памяти организованы иначе, поэтому их легче обнаружить. Для этого достаточно проверить последний статус перезапуска pod'а: не является ли он «OOMKilled». С троттлингом CPU все не так просто, поскольку K8s делает доступными только метрики по использованию, а не по cgroups.
CPU Request
Как реализован CPU request
Для простоты давайте рассмотрим процесс на примере машины с 4-ядерным CPU.
K8s использует механизм контрольных групп (cgroups) для управления распределением ресурсов (памяти и процессора). Для него доступна иерархическая модель: потомок наследует limit'ы родительской группы. Подробности распределения хранятся в виртуальной файловой системе ( /sys/fs/cgroup ). В случае процессора это /sys/fs/cgroup/cpu,cpuacct/* .
K8s использует файл cpu.share для распределения ресурсов процессора. В нашем случае корневая контрольная группа получает 4096 долей ресурсов CPU — 100% доступной мощности процессора (1 ядро = 1024; это фиксированное значение). Корневая группа распределяет ресурсы пропорционально в зависимости от долей потомков, прописанных в cpu.share , а те, в свою очередь, аналогичным образом поступают со своими потомками, и т.д. В типичном узле Kubernetes корневая контрольная группа имеет три потомка: system.slice , user.slice и kubepods . Две первых подгруппы используются для распределения ресурсов между критически важными системными нагрузками и пользовательскими программами вне K8s. Последняя — kubepods — создается Kubernetes'ом для распределения ресурсов между pod'ами.
На схеме выше видно, что первая и вторая подгруппы получили по 1024 доли, при этом подгруппе kuberpod выделено 4096 долей. Как такое возможно: ведь корневой группе доступны всего 4096 долей, а сумма долей ее потомков значительно превышает это число (6144)? Дело в том, что значение имеет логический смысл, поэтому планировщик Linux (CFS) использует его для пропорционального распределения ресурсов CPU. В нашем случае первые две группы получают по 680 реальных долей (16,6% от 4096), а kubepod получает оставшиеся 2736 долей. В случае простоя первые две группы не будут использовать выделенные ресурсы.
К счастью, в планировщике есть механизм, позволяющий избежать потери неиспользуемых ресурсов CPU. Он передает «простаивающие» мощности в глобальный пул, из которого они распределяются по группам, нуждающимся в дополнительных мощностях процессора (передача происходит партиями, чтобы избежать потерь от округления). Аналогичный метод применяется и ко всем потомкам потомков.
Этот механизм обеспечивает справедливое распределение мощностей процессора и следит за тем, чтобы ни один процесс не «воровал» ресурсы у других.
CPU Limit
Несмотря на то, что конфигурации limit'ов и request'ов в K8s выглядят похоже, их реализация кардинально отличается: это самая вводящая в заблуждение и наименее задокументированная часть.
K8s задействует механизм квот CFS для реализации лимитов. Их настройки задаются в файлах cfs_period_us и cfs_quota_us в директории cgroup (там же расположен файл cpu.share ).
В отличие от cpu.share , квота основана на периоде времени, а не на доступной мощности процессора. cfs_period_us задает продолжительность периода (эпохи) — это всегда 100000 мкс (100 мс). В K8s есть возможность изменить это значение, однако она пока доступна только в альфа-версии. Планировщик использует эпоху для перезапуска использованных квот. Второй файл, cfs_quota_us , задает доступное время (квоту) в каждой эпохе. Обратите внимание, что она также указывается в микросекундах. Квота может превышать продолжительность эпохи; другими словами, она может быть больше 100 мс.
Давайте рассмотрим два сценария на 16-ядерных машинах (наиболее распространенный тип компьютеров у нас в Omio):
Сценарий 1: 2 потока и лимит в 200 мс. Без троттлинга
Сценарий 2: 10 потоков и лимит в 200 мс. Троттлинг начинается после 20 мс, доступ к ресурсам процессора возобновляется еще через 80 мс
Допустим, вы установили CPU limit на 2 ядра; Kubernetes переведет это значение в 200 мс. Это означает, что контейнер может использовать максимум 200 мс процессорного времени без троттлинга.
И здесь начинается самое интересное. Как было сказано выше, доступная квота составляет 200 мс. Если у вас параллельно работают десять потоков на 12-ядерной машине (см. иллюстрацию к сценарию 2), пока все остальные pod'ы простаивают, квота будет исчерпана всего через 20 мс (поскольку 10 * 20 мс = 200 мс), и все потоки данного pod'а «зависнут» (throttle) на следующие 80 мс. Усугубляет ситуацию уже упомянутый баг планировщика, из-за которого случается избыточный троттлинг и контейнер не может выработать даже имеющуюся квоту.
Как оценить троттлинг в pod'ах?
Просто войдите в pod и выполните cat /sys/fs/cgroup/cpu/cpu.stat .
- nr_periods — общее число периодов планировщика;
- nr_throttled — число throttled-периодов в составе nr_periods ;
- throttled_time — совокупное throttled-время в наносекундах.
Что же на самом деле происходит?
В итоге мы получаем высокий троттлинг во всех приложениях. Иногда он в полтора раза сильнее расчетного!
Это приводит к различным ошибкам — сбоям проверок готовности (readiness), зависаниям контейнеров, разрывам сетевых подключений, таймаутам внутри сервисных вызовов. В конечном счете это выражается в увеличенной задержке и повышении количества ошибок.
CPU-лимиты и агрессивный троттлинг в Kubernetes
Прим. перев.: эта поучительная история Omio — европейского агрегатора путешествий — проводит читателей от базовой теории до увлекательных практических тонкостей в конфигурации Kubernetes. Знакомство с такими случаями помогает не только расширять кругозор, но и предотвращать нетривиальные проблемы.
Доводилось ли вам сталкиваться с тем, что приложение «застревало» на месте, переставало отвечать на запросы о проверке состояния (health check'и) и вы не могли понять причину такого поведения? Одно из возможных объяснений связано с лимитом квот на ресурсы CPU. О нем и пойдет речь в этой статье.
TL;DR:
Мы настоятельно рекомендуем отказаться от CPU limit'ов в Kubernetes (или отключить квоты CFS в Kubelet), если используется версия ядра Linux с ошибкой CFS-квот. В ядре имеется серьезный и хорошо известный баг, который приводит к избыточному троттлингу и задержкам.
В Omio вся инфраструктура управляется Kubernetes. Все наши stateful- и stateless-нагрузки работают исключительно на Kubernetes (мы используем Google Kubernetes Engine). В последние полгода мы стали наблюдать рандомные подтормаживания. Приложения зависают или перестают отвечать на health check'и, теряют связь с сетью и т.п. Подобное поведение долго ставило нас в тупик, и, наконец, мы решили заняться проблемой вплотную.
Краткое содержание статьи:
- Несколько слов о контейнерах и Kubernetes;
- Как реализованы CPU request'ы и limit'ы;
- Как CPU limit работает в средах с несколькими ядрами;
- Как отслеживать троттлинг CPU;
- Решение проблемы и нюансы.
В чем подвох?
Как было сказано в начале статьи:
Можно провести аналогию с коммунальной квартирой… Kubernetes выступает в роли риэлтора. Но как удержать квартирантов от конфликтов друг с другом? Что, если один из них, скажем, решит занять ванную комнату на полдня?
Вот в чем подвох. Один нерадивый контейнер может поглотить все доступные ресурсы процессора на машине. Если у вас толковый стек приложений (например, должным образом настроены JVM, Go, Node VM), тогда это не проблема: можно работать в таких условиях в течение длительного времени. Но если приложения оптимизированы плохо или совсем не оптимизированы ( FROM java:latest ), ситуация может выйти из-под контроля. У нас в Omio имеются автоматизированные базовые Dockerfiles с адекватными настройками по умолчанию для стека основных языков, поэтому подобной проблемы не существовало.
Мы рекомендуем наблюдать за метриками USE (использование, насыщение и ошибки), задержками API и частотой появления ошибок. Следите за тем, чтобы результаты соответствовали ожиданиям.
Читайте также: