Чому ваша VM не має swap
Swap дозволяє машині вдавати, що в неї більше пам'яті, ніж є насправді. На корпоративному flash це вдавання коштує зносу сховища і обриву latency, тож ми натомість розраховуємо RAM.
У цій статті 5 розділів
- RAM відповідає приблизно за 100 наносекунд. Швидкий flash відповідає приблизно за 100 мікросекунд. Навантаження, що потрапляє у swap, працює на пам'яті приблизно в тисячу разів повільнішій.
- Підкачка перетворює нестачу RAM на знос сховища і обрив latency. Навантаження відмовляє повільніше й заплутаніше замість того, щоб відмовити чітко.
- Ми натомість розраховуємо RAM. Sizing Desk запитує ваш реальний вивід free -m, перш ніж будь-що запропонувати.
Віртуальні машини, які ми будуємо, поставляються без swap. Коли в однієї з них закінчується пам'ять, відмова є миттєвою і видимою, а виправлення є розмовою про RAM. У специфікації це читається як упущення, тож ось міркування повністю. Ніщо з цього не залежить від нашого обладнання; ви можете застосувати цей аргумент до будь-якої VM, яку запускаєте будь-де.
Swap існує, щоб машина могла працювати понад свою фізичну пам'ять
Swap є перепускним клапаном ядра. Коли фізичної пам'яті бракує, воно переносить сторінки, які вважає найхолоднішими, на диск і віддає звільнену RAM тому, хто просить. Машина може звітувати про більше пам'яті, ніж містить кремній, кожне виділення може вдатися, а правда надходить пізніше, як latency, щоразу, коли процес торкається сторінки, яка, як виявляється, живе на диску.
Цей компроміс мав сенс, коли його винайшли. RAM була дефіцитною і дорогою, машини ділили між багатьма завданнями, а пакетне завдання, що повзло всю ніч, було кращим за пакетне завдання, що померло. Відтоді кожна частина цього контексту перевернулася: RAM найдешевша за гігабайт за всю історію, машина належить лише вам, а навантаження є інтерактивними сервісами, де десятикратний стрибок latency неможливо відрізнити від збою. Перепускний клапан усе одно залишився в типових налаштуваннях, бо типові налаштування переживають свої причини.
Випадання з RAM коштує вам трьох порядків величини
Аргумент проти swap є арифметикою раніше, ніж філософією. Пам'ять і сховище розташовані на різних поверхах будівлі latency, і сходи між ними довгі.
- КЕШ CPU
- близько наносекунди
- RAM
- близько 100 наносекунд
- ШВИДКИЙ FLASH
- близько 100 мікросекунд, у тисячу разів повільніше за RAM
- PAGE FAULT У SWAP
- повний цикл звернення до сховища, плюс черга, на найгарячішому шляху вашого навантаження
Точні цифри відрізняються залежно від обладнання; проміжки між поверхами ні. Під реальним тиском на пам'ять машина йде цими сходами безперервно: ядро витісняє сторінки, навантаження одразу завантажує їх назад, а CPU витрачає свої цикли на очікування сховища. Середнє навантаження зростає, тоді як корисна пропускна здатність обвалюється.
~0,1 до 1 мс
100 нс
~10 000×
Swap спалює корпоративний flash, щоб приховати помилку в розрахунку
На шпиндельних дисках swap був лише повільним. На flash він ще й руйнівний. Трафік swap є найгіршим шаблоном, яким можна годувати flash: безперервний потік малих випадкових записів, які існують без жодної причини, крім того, що машині бракує RAM. Кожен із цих записів старить комірку, щоб зберегти ілюзію.
А навантаження не отримує за цей знос нічого натомість. Воно шкутильгає з темпом сховища, доки тиск не закінчиться або хтось не втрутиться. Масив під вашою VM у нас є HPE 3PAR all-flash, і його робота полягає в тому, щоб швидко віддавати ваші дані. Витрачати його ресурс запису як удавану пам'ять є поганою угодою за будь-якої ціни, і саме тому ми радше проведемо розмову про розрахунок наперед, ніж замажемо її підкачкою.
Без swap вичерпання пам'яті дає рядок у журналі замість загадки
Найсильніший аргумент є діагностичним, і кожен, хто ганявся за повільним тижнем крізь стек моніторингу, вже його знає. Зі swap закінчення пам'яті виглядає як що завгодно, крім закінчення пам'яті. Latency зростає в кожному сервісі одночасно, жодної помилки не з'являється в жодному журналі, а панелі вказують усюди, де відчувається очікування, тобто зазвичай на базу даних і сховище. Команди втрачають дні на цю гонитву, а swap виробляє її на одній машині, рутинно, за задумом.
- Latency зростає в кожному сервісі одночасно, без помилки в жодному журналі
- Панелі звинувачують базу даних, потім сховище, потім мережу
- Масив поглинає потік малих випадкових записів, єдина робота яких приховати нестачу
- Діагноз надходить через дні, після того як хтось зіставить графіки
- Ядро вбиває найбільшого порушника і називає його в журналі
- Відмова має часову мітку, ім'я процесу і загальний обсяг пам'яті
- Масив витрачає свої записи на реальні дані
- Виправленням є розмова про зміну розміру того самого дня
Графік пам'яті на машині без swap каже правду аж до самого краю.
Ми чесно розраховуємо RAM і просимо ваш реальний free -m
Чесне виправлення нестачі пам'яті є тим самим від часу винайдення підкачки: більше RAM або менший робочий набір. Тож саме туди ми вкладаємо зусилля. Sizing Desk запитує реальний вивід free -m з вашої поточної машини, перш ніж будь-що запропонувати, бо стовпець available цієї команди закриває суперечки, яких прикметники ніколи не закриють, а те саме показання, яке прибирає потребу у swap, зазвичай зменшує і пропозицію.
Повний метод, з розібраними прикладами кожного числа, яке ми запитуємо, є у статті як розрахувати сервер. На власному обладнанні запас уже є в коробці, за яку ви заплатили, тож його надання не коштує нічого додаткового на вашому піку, що прибирає останнє економічне виправдання для того, щоб трактувати сховище як переливну RAM.
Прямі відповіді
Хіба ядру не потрібен хоч якийсь swap, щоб добре працювати?+
Ядро може використовувати swap, щоб витісняти справді холодні сторінки й віддавати звільнену RAM дисковому кешу, і на хронічно тісній машині це трохи допомагає на межі. Проблема в самій межі. Це купує кілька відсотків ефективної пам'яті, приховуючи, чи взагалі машина достатньо велика, і розмиває кожен графік пам'яті, від якого ви пізніше залежатимете. На правильно розрахованій машині виграш від холодних сторінок округлюється до нуля, а діагностична ясність жорсткої межі пам'яті варта значно більше о 3-й ночі.
Як дізнатися, скільки RAM я насправді використовую?+
Запустіть free -m протягом реального піку і прочитайте стовпець available. Повний метод, з розібраними прикладами кожного числа, є в нашій статті про розрахунок, як розрахувати сервер. Якщо цей стовпець каже, що вам справді тісно, відповіддю є більше RAM, і ми так і скажемо.
Відсутність swap є малим рішенням, що випливає з більших: розраховуйте машини за реальними числами, а не за рахунками, і кладіть під них серйозне обладнання, щоб числа трималися поганої ночі. Розмова про RAM дешевша за загадку, якій вона запобігає.
Розрахуйте RAM чесно
Sizing Desk починає з реальних чисел вашої машини і пропонує конфігурацію з наших справжніх будівельних блоків. Коли ваші числа кажуть «менше», він зменшує вам розмір.
Відкрити Sizing DeskВи дійшли до кінця.
Застосуйте прочитане на практиці
Що ви запускаєте?
Розкажіть нам про навантаження, трафік і вимоги до відновлення. Почніть з конструктора сервера або обговоріть деталі з інженером.
Написано інженерами, які будують і експлуатують інфраструктуру, про яку йдеться.Поговоріть з інженером
