Чи замислювались ви коли-небудь, як покращити продуктивність додатків, які вимагають великої кількості пам’яті на вашому Kubernetes кластері? Деякі важкі додатки можуть ставати нестабільними або сильно затримувати час відгуку через значні вимоги до ресурсів з боку хоста. Уявімо, що ви хочете розгорнути TF модель на k8s, і починаєте стикатись з численними проблемами продуктивності через операційні неефективності.
Ці неефективності можуть виникати через:
- Збільшення накладних витрат на пам'ять: Система повинна підтримувати великі таблиці сторінок, що збільшує накладні витрати, оскільки стандартні сторінки розміром 4 Кб є занадто маленькими і потребують більше сторінок пам'яті.
- Вищі коефіцієнти промахів TLB (Translation Lookaside Buffer): TLB швидко заповнюється, оскільки зберігає відображення для більшої кількості сторінок, а часті промахи TLB призводять до повільнішого доступу до пам'яті.
- Ризик фрагментації пам'яті: ТЛ модель потребує великих суцільних блоків пам'яті, але під високим навантаженням фрагментовані блоки пам'яті можуть бути недостатніми для обробки ТЛ завдань, що призводить до аварій додатків💥
Давайте подивимося, як великі сторінки можуть вирішити ці проблеми та покращити продуктивність вашого додатку. АЛЕ… Що ж таке великі сторінки? 🤔
Великі сторінки
Управління пам’яттю різних процесів на системному процесорі включає пейджинг. Звичайні сторінки, як правило, мають розмір 4 Кб, тоді як великі сторінки, як випливає з назви, є більшими за розміром. Якщо розглядати це з точки зору EKS, вузли можуть мати розміри сторінок 64 Кі (стандартний розмір сторінки), 2 Мі, 32 Мі та 1 Гі. Переваги використання великих сторінок на ваших EKS вузлах наступні:
- Зменшення накладних витрат і покращення продуктивності: Це зменшує кількість великих сторінок у таблиці сторінок, знижуючи накладні витрати на пам’ять і збільшуючи ефективність, що призводить до кращої продуктивності.
- Покращена продуктивність додатків: У EKS ви можете налаштувати контейнери для використання великих сторінок, вказавши їх у запитах та обмеженнях ресурсів, щоб ці «резервовані» великі сторінки могли бути використані саме цими навантаженими додатками, і ці важкі навантаження не повинні боротися за ресурси з іншими додатками, що працюють на вузлі.
Переклад сторінок процесором (CPU)
Як увімкнути великі сторінки у вашому EKS кластері?
Я використовував Karpenter для налаштування вузлів в EKS кластері. Ви можете ознайомитись з моїм постом, щоб дізнатися, як налаштувати Karpenter для автоматичного масштабування ваших вузлів у EKS кластері.
Після того, як ви встановите Karpenter у ваш EKS кластер, ви можете виконати наступні кроки, перелічені нижче.
Зазвичай на наданих вузлах Amazon Linux 2 для EKS є 4 доступних розміри великих сторінок:
- 64 K
- 2M
- 32M
- 1G
Щоб налаштувати великі сторінки для ваших вузлів EKS, потрібно оновити сценарій user-data, додавши наступні рядки:
# додайте кількість великих сторінок, яку ви хочете вказати в потрібну папку згідно з розміром великої сторінки
echo > /sys/kernel/mm/hugepages/hugepages-kB/nr_hugepages
# оновіть параметри ядра, щоб вказати розмір та кількість великих сторінок, які ви хочете
sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/"$/ hugepagesz=< hugepages="/' /etc/default/grub
# застосуйте нові параметри ядра
grub2-mkconfig -o /boot/grub2/grub.cfg
<число> може бути будь-яким числом, враховуючи розмір вузла
<число> вибирайте з 64 (64K), 2048 (32M), 32768 (32M), 1048576 (1G)
<розмір> вибирайте з 64K, 2M, 32M, 1G
Застосування цих змін у сценарії user data дозволить використовувати великі сторінки на ваших EKS вузлах, налаштованих за допомогою Karpenter!
Тестування
Ви можете протестувати великі сторінки, створені на вузлах EKS, що налаштовані через Karpenter, створивши pod, що запитує великі сторінки:
apiVersion: v1
kind: Pod
metadata:
name: hugepage-test-pod
spec:
containers:
- name: test-container
image: busybox
command: ["sleep", "3600"]
resources:
limits:
memory: 2Gi
hugepages-32Mi: 2Gi #Максимум 2 Gi пам'яті може бути використано для великих сторінок розміром 32 Mi в цьому pod
requests:
hugepages-32Mi: 2Gi #Запит на 2 Gi пам'яті у великих сторінках розміром 32 Mi
Щоб перевірити, чи насправді pod використовує великі сторінки, ви можете виконати наступну команду та перевірити ресурси великих сторінок, що споживаються на вузлі, де розміщено pod:
kubectl describe node
Зображення, що показує використання великих сторінок 32 Mi
Ось так ви можете налаштувати вузли в вашому EKS кластері для використання великих сторінок та покращити продуктивність ресурсномістких додатків!
Перекладено з: Improve performance of memory intensive applications on EKS cluster using Huge Pages!