Optimizing web servers for high throughput and low latency by Dropbox.tech
Разбор всех компонентов Linux машины участвующих в обработке трафика и методы оптимизаций их производительности, от типов CPU и до алгоритмов сжатия.
tags: #linux #performance #network #tuning
Разбор всех компонентов Linux машины участвующих в обработке трафика и методы оптимизаций их производительности, от типов CPU и до алгоритмов сжатия.
tags: #linux #performance #network #tuning
dropbox.tech
Optimizing web servers for high throughput and low latency
👍2
CPU Utilization is Wrong by Brendan Gregg
B. Gregg показывает почему метрика утилизации %CPU может вводить в заблуждение - она включает в себя не только время затраченное на полезную работу CPU, но и ожидание обращения к памяти.
Как решение предлагается ориентироваться на показатель IPC (instructions per cycle), доступный в
tags: #linux #performance #metrics #cpu
B. Gregg показывает почему метрика утилизации %CPU может вводить в заблуждение - она включает в себя не только время затраченное на полезную работу CPU, но и ожидание обращения к памяти.
Как решение предлагается ориентироваться на показатель IPC (instructions per cycle), доступный в
perf stat
, atop
, perf
коллектор в node_exporter
, etc.tags: #linux #performance #metrics #cpu
👍3✍1
A Complete Guide of 'ss' Output Metrics by Mark Zhu
Самое подробное описание использования утилиты
tags: #network #linux #troubleshooting #tooling
Самое подробное описание использования утилиты
ss
что я встречал.tags: #network #linux #troubleshooting #tooling
Mark Zhu's Blog
A Complete Guide of 'ss' Output Metrics - TCP Connection Inspecting Tool
Understanding metrics from Linux ss command output
👍2
TCP Puzzlers by Dave Pacheco
Исследуется поведение TCP протокола в ситуациях как нормального закрытия соединений так и при:
* отключение питания сервера
* перезагрузка сервера
* внештатный обрыв соединения.
Авто подсвечивает не совсем очевидные моменты, о которых хорошо бы знать.
tags: #tcp #network
Исследуется поведение TCP протокола в ситуациях как нормального закрытия соединений так и при:
* отключение питания сервера
* перезагрузка сервера
* внештатный обрыв соединения.
Авто подсвечивает не совсем очевидные моменты, о которых хорошо бы знать.
tags: #tcp #network
Tritondatacenter
TCP Puzzlers | Triton DataCenter
It's been said that we don't really understand a system until we understand how it fails. Despite h...
👍2
CPU pinning та тема о которой постоянно слышу, но разобраться в деталях еще не привелось.
Это странно, потому как применение подхода в нужном месте в нужное время способно принести пользу, навскидку:
- улучшить локальность кеша за счёт планирования на ограниченный набор ядер;
- снизить оверхед от переключения контекста, что не бесплатно.
На днях вдохновлялся статьей Predictive CPU isolation of containers at Netflix, где ребята борются с проблемой “шумного соседа” используя ML - прогнозируют тип workload’а и выставляют контейнеру подходящие параметры на старте: использовать ли CPU pinning, на какой NUMA Ноде стоит планироваться, чтобы не аффектить соседей и тому подобное.
Далее гугл подбросил ссылку на white paper The Art of CPU-Pinning. Авторы провели ресерч для каких типов нагрузок (CPU bound / IO bound) в каких окружениях (Bare-metal, VM, container on VM, container on Baremetal) как влияет CPU pinning.
Нашел себе чтение на ближайшие дни.
Это странно, потому как применение подхода в нужном месте в нужное время способно принести пользу, навскидку:
- улучшить локальность кеша за счёт планирования на ограниченный набор ядер;
- снизить оверхед от переключения контекста, что не бесплатно.
На днях вдохновлялся статьей Predictive CPU isolation of containers at Netflix, где ребята борются с проблемой “шумного соседа” используя ML - прогнозируют тип workload’а и выставляют контейнеру подходящие параметры на старте: использовать ли CPU pinning, на какой NUMA Ноде стоит планироваться, чтобы не аффектить соседей и тому подобное.
Далее гугл подбросил ссылку на white paper The Art of CPU-Pinning. Авторы провели ресерч для каких типов нагрузок (CPU bound / IO bound) в каких окружениях (Bare-metal, VM, container on VM, container on Baremetal) как влияет CPU pinning.
Нашел себе чтение на ближайшие дни.
👍2
Написал заметку как сеть в Kubernetes может обманывать при учете объемов трафика. Не без помощи ebpf.
https://alebsys.github.io/posts/metallb-calico-ebpf/
#kubernetes #calico #ebpf #metallb #linux
https://alebsys.github.io/posts/metallb-calico-ebpf/
#kubernetes #calico #ebpf #metallb #linux
alebsys.github.io
Где мой трафик?
Наблюдаемость и простота отладки одни из важнейших свойств системы, которые следует учитывать уже на этапе выбора технологий. В противном случае может быть больно и дорого.
Следующий этап - разобраться как технология устроена и желательно сделать это еще…
Следующий этап - разобраться как технология устроена и желательно сделать это еще…
👍4
How does hyperthreading work
Статья от performance engineer Peter Veentjer о технологии Hyper-Threading:
- архитектура CPU: frontend, backend, superscalar, pipelines, ...;
- за счет чего возможно использовать одно ядро для нескольких потоков;
- почему Hyper-Threading это не про быструю смену контекста.
Кстати, Peter является соавтором Performance Analysis and Tuning on Modern CPUs от Denis Bakhvalov.
#CPU #HT #performance
Статья от performance engineer Peter Veentjer о технологии Hyper-Threading:
- архитектура CPU: frontend, backend, superscalar, pipelines, ...;
- за счет чего возможно использовать одно ядро для нескольких потоков;
- почему Hyper-Threading это не про быструю смену контекста.
Кстати, Peter является соавтором Performance Analysis and Tuning on Modern CPUs от Denis Bakhvalov.
#CPU #HT #performance
Blogspot
How does hyperthreading work.
Introduction In the last few months, there were 2 occurrences where people were talking about the implementation of hyperthreading; the In...
👍3
Let's talk about resources isolation
Ветка на форуме proxmox, где топик-стартер подсвечивает недостатки существующих инструментов изоляции ресурсов в proxmox.
В частности отсутствие функционала "из коробки":
- vCPU pinning, что прямо или косвенно приводит к излишнему context-switching и L3 cache промахам;
- SMP-aware pinning - два логических ядра не всегда равны двум физическим (hyper threading) и при планировании тредов на процессор хорошо бы учитывать chiplets - задержка доступа к кешу между соседними ядрами может различаться в разы.
Автор подсвечивает пять уровней изоляции ресурсов виртуальной машины на гипервизоре и как их можно достичь:
1. CPU pinning тредов VM;
2. Освобождение vCPU от обработки IRQ;
3. Изоляция VM от userspace процессов гипервизора;
4. Изоляция VM от kernelspace процессов гипервизора;
5. Изоляция VM от других VM на гипервизоре (cgroups).
---
Тред пригодится в борьбе за производительность CPU-bound приложений в виртуальных окружениях.
#virualization #proxmox #linux #performance #tuning
Ветка на форуме proxmox, где топик-стартер подсвечивает недостатки существующих инструментов изоляции ресурсов в proxmox.
В частности отсутствие функционала "из коробки":
- vCPU pinning, что прямо или косвенно приводит к излишнему context-switching и L3 cache промахам;
- SMP-aware pinning - два логических ядра не всегда равны двум физическим (hyper threading) и при планировании тредов на процессор хорошо бы учитывать chiplets - задержка доступа к кешу между соседними ядрами может различаться в разы.
Автор подсвечивает пять уровней изоляции ресурсов виртуальной машины на гипервизоре и как их можно достичь:
1. CPU pinning тредов VM;
2. Освобождение vCPU от обработки IRQ;
3. Изоляция VM от userspace процессов гипервизора;
4. Изоляция VM от kernelspace процессов гипервизора;
5. Изоляция VM от других VM на гипервизоре (cgroups).
---
Тред пригодится в борьбе за производительность CPU-bound приложений в виртуальных окружениях.
#virualization #proxmox #linux #performance #tuning
Proxmox Support Forum
[TUTORIAL] - Hey Proxmox & Community - Let's talk about...
This post is going to be pretty long too long to fit in a single post, but it represents a summary and lessons learned over ~3 weeks of experiments. This post is a half-tutorial and half-RFC so...
👍1👏1
Сложные системы тяготеют к отказам.
Отказы такое же свойство систем, как надёжность, наблюдаемость, масштабируемость и т. д.
Работа Richard I. Cook How Complex Systems Fail освещает:
- природу отказов;
- двойственную роль оператора системы - как защитник от хаоса, так и непосредственно причина его появления;
- заблуждения пост-анализа инцидентов - всегда есть совокупность причин, пост-знание всегда предвзято;
- отказы как следствие возрастания сложности систем.
Полезное чтение для построения причинно-следственных связей.
tags: #reliability #sre_theory
Отказы такое же свойство систем, как надёжность, наблюдаемость, масштабируемость и т. д.
Работа Richard I. Cook How Complex Systems Fail освещает:
- природу отказов;
- двойственную роль оператора системы - как защитник от хаоса, так и непосредственно причина его появления;
- заблуждения пост-анализа инцидентов - всегда есть совокупность причин, пост-знание всегда предвзято;
- отказы как следствие возрастания сложности систем.
Полезное чтение для построения причинно-следственных связей.
tags: #reliability #sre_theory
👍3
Memory Soft limits
Опубликовал в блоге заметку-исследование механизма cgroup Memory Soft Limits, он же
Позапускал контейнеры в разных вариациях и наблюдал как настройка влияет на распределение памяти при нехватки оной на машине.
Выглядит как
Опубликовал в блоге заметку-исследование механизма cgroup Memory Soft Limits, он же
memory.soft_limit_in_bytes
.Позапускал контейнеры в разных вариациях и наблюдал как настройка влияет на распределение памяти при нехватки оной на машине.
Выглядит как
CPU throttling
, но конечно есть нюансы.alebsys.github.io
Memory Soft limits
Изучая возможности контрольных групп в linux наткнулся на параметр memory.soft_limit_in_bytes:
When the system detects memory contention or low memory, control groups are pushed back to their soft limits. If the soft limit of each control group is very high…
When the system detects memory contention or low memory, control groups are pushed back to their soft limits. If the soft limit of each control group is very high…
👍5
About Pool Sizing
Заметка из wiki HikariCP про установку "правильного" размера пула коннектов к базам данных.
Основные мысли
1. Последовательное исполнение на одном CPU двух тредов всегда быстрее "параллельного" (потери на context-swithing и cache miss).
2. БОльшее кол-во тредов нежели доступных CPU ведет к замедлению системы (при идеальной CPU-bound модели использования);
3. Как только в уравнение добавляются IO-операции (диск, сеть, memory), правило меняется - чем дольше треды способны находиться в заблокированном состоянии (IO-wait), тем бОльший пул коннектов следует выставлять;
Сообщество PostgreSQL ввело в оборот формулу:
Axiom: You want a small pool, saturated with threads waiting for connections.
P.S. думаю, что подход выше будет справедлив для всех типов коммунальных ресурсов.
tags: #performance #reliability
Заметка из wiki HikariCP про установку "правильного" размера пула коннектов к базам данных.
Основные мысли
1. Последовательное исполнение на одном CPU двух тредов всегда быстрее "параллельного" (потери на context-swithing и cache miss).
2. БОльшее кол-во тредов нежели доступных CPU ведет к замедлению системы (при идеальной CPU-bound модели использования);
3. Как только в уравнение добавляются IO-операции (диск, сеть, memory), правило меняется - чем дольше треды способны находиться в заблокированном состоянии (IO-wait), тем бОльший пул коннектов следует выставлять;
Сообщество PostgreSQL ввело в оборот формулу:
connections = ((core_count * 2) + effective_spindle_count)
* core_count
должен учитывать только физически ядра (никакого вам HT); * effective_spindle_count
равен 0 если вся БД способна поместиться в кеш и приближается к фактическому кол-ву дисков по мере снижения cache hit rate.Axiom: You want a small pool, saturated with threads waiting for connections.
P.S. думаю, что подход выше будет справедлив для всех типов коммунальных ресурсов.
tags: #performance #reliability
GitHub
About Pool Sizing
光 HikariCP・A solid, high-performance, JDBC connection pool at last. - brettwooldridge/HikariCP
👍4
Написал в блог заметку о методологии "Thread State Analysis" (TSA).
Это когда о поведении системы судят по тому, в каком состоянии (state) пребывают её потоки: running, sleep, stopped и т.д.
TSA, как и другие высокоуровневые методологии (USE, RED), может помочь сориентироваться, определить направления для дальнейшего анализа и сократить общее время устранения проблем.
tags: #methodology #linux #troubleshooting
Это когда о поведении системы судят по тому, в каком состоянии (state) пребывают её потоки: running, sleep, stopped и т.д.
TSA, как и другие высокоуровневые методологии (USE, RED), может помочь сориентироваться, определить направления для дальнейшего анализа и сократить общее время устранения проблем.
tags: #methodology #linux #troubleshooting
www.alebedev.tech
Thread State Analysis
Сессия траблшутинга - это не только конечный результат, но и процесс, протекающий с различной степенью эффективности. Одного умения пользоваться инструментами, знать флаги и уверенно работать в консоли недостаточно. Необходима систематизация.
👍1🔥1
An introduction to benchmarks
Ликбез от Matt Fleming по бенчаркингу. В краткой форме освещается:
* зачем нужен бенчмаркинг;
* какие типы бывают;
* и когда их стоит использовать в разработке ПО.
Ликбез от Matt Fleming по бенчаркингу. В краткой форме освещается:
* зачем нужен бенчмаркинг;
* какие типы бывают;
* и когда их стоит использовать в разработке ПО.
Nyrkiö
An introduction to benchmarks
This introductory article explains what benchmarks are, the different types, and when to use them.
Есть такой ресурс sadservers.com, позиционирует себя как «leetcode для linux”.
На нём собраны задачки разной степени сложности из разряда «процесс PostgreSQL перестал работать, найди причину и устрани».
Подобное может встречаться на секциях технических собесов, что добавляет полезности, да и просто интересно проверить свои навыки.
В качестве пробы пера записал видео с прохождением первой задачи с небольшими теоретическими отступлениями.
На нём собраны задачки разной степени сложности из разряда «процесс PostgreSQL перестал работать, найди причину и устрани».
Подобное может встречаться на секциях технических собесов, что добавляет полезности, да и просто интересно проверить свои навыки.
В качестве пробы пера записал видео с прохождением первой задачи с небольшими теоретическими отступлениями.
YouTube
SadServers #1 | Saint John
#sadservers #linux #devops #kubernetes #sre
Решаем первую задачу на sadservers.com - "Saint John", в которой:
- разберем как печатать содержимое файла в реальном времени;
- найдем процесс по открытому им файлу;
- посмотрим как под капотом устроена утилита…
Решаем первую задачу на sadservers.com - "Saint John", в которой:
- разберем как печатать содержимое файла в реальном времени;
- найдем процесс по открытому им файлу;
- посмотрим как под капотом устроена утилита…
👍12
TCP Congestion Control в разных окружениях
Написал заметку как влияет потеря сетевых пакетов на пропускную способность TCP соединения.
p.s. катастрофически.
tags: #linux #tcp #performance
Написал заметку как влияет потеря сетевых пакетов на пропускную способность TCP соединения.
p.s. катастрофически.
tags: #linux #tcp #performance
www.alebedev.tech
TCP Congestion Control in Action
Протестировал работу TCP Congestion Control в Linux в различных по качеству окружениях, поделюсь результатами.
👍6
SadServers №15 | Middle-level | Tokyo
Траблшутинг в ленту!
Tokyo - пятнадцатая задача среднего (middle) уровня на sadservers.com:
- изучим состояние сокетов через ss;
- посмотрим на ретрансмиты в tcpdump;
- поправив правила netfilter (iptables);
- и наконец приведем в чувства webserver.
#sadservers #linux #devops #troubleshooting #sre #tcpdump
Траблшутинг в ленту!
Tokyo - пятнадцатая задача среднего (middle) уровня на sadservers.com:
- изучим состояние сокетов через ss;
- посмотрим на ретрансмиты в tcpdump;
- поправив правила netfilter (iptables);
- и наконец приведем в чувства webserver.
#sadservers #linux #devops #troubleshooting #sre #tcpdump
YouTube
SadServers №15 | Middle-level | Tokyo
#sadservers #linux #devops #troubleshooting #sre #tcpdump
Tokyo - пятнадцатая задача среднего (middle) уровня на sadservers.com:
- изучим состояние сокетов через ss;
- посмотрим на ретрансмиты в tcpdump;
- поправив правила netfilter (iptables);
- и наконец…
Tokyo - пятнадцатая задача среднего (middle) уровня на sadservers.com:
- изучим состояние сокетов через ss;
- посмотрим на ретрансмиты в tcpdump;
- поправив правила netfilter (iptables);
- и наконец…
👍9❤1
What every SRE should know about GNU/Linux resolvers and Dual-Stack applications
С Viacheslav Biriukov познакомился по лекциям на Яндекс КИТ, когда еще только начинал узнавать, что такое Linux.
Тогда еще подумал "вау, вот это уровень, хочу так же!" :)
В последствии Вячеслав завел блог https://biriukov.dev/, где опубликовал мини книгу про Linux Page Cache (куча практических знаний как работает виртуальная память и чем на нее можно повлиять), а так же начал серию серий постов с говорящим названием "What every SRE should know about ...":
- первый заход был про файловые дескриторы, пайпы, терминалы, процессы и тд;
- а теперь подъехала и совсем свежая What every SRE should know about GNU/Linux resolvers and Dual-Stack applications про процесс резолвинга.
Must read, как говорится!
С Viacheslav Biriukov познакомился по лекциям на Яндекс КИТ, когда еще только начинал узнавать, что такое Linux.
Тогда еще подумал "вау, вот это уровень, хочу так же!" :)
В последствии Вячеслав завел блог https://biriukov.dev/, где опубликовал мини книгу про Linux Page Cache (куча практических знаний как работает виртуальная память и чем на нее можно повлиять), а так же начал серию серий постов с говорящим названием "What every SRE should know about ...":
- первый заход был про файловые дескриторы, пайпы, терминалы, процессы и тд;
- а теперь подъехала и совсем свежая What every SRE should know about GNU/Linux resolvers and Dual-Stack applications про процесс резолвинга.
Must read, как говорится!
Viacheslav Biriukov
What every SRE should know about GNU/Linux resolvers and Dual-Stack applications
What every SRE should know about GNU/Linux resolvers and Dual-Stack applications # In this series of posts, I’d like to make a deep dive into the GNU/Linux local facilities used to convert a domain name or hostname into IP addresses, specifically in the context…
👍7
Новая статья в блог bash: curl: command not found" или как траблшутить контейнеры когда нечем.
Несколько способов запуска команд в контейнерах, когда утилиты не установлены.
Несколько способов запуска команд в контейнерах, когда утилиты не установлены.
www.alebedev.tech
"bash: curl: command not found"
Или как траблшутить контейнеры когда нечем.
👍6🔥1
All you need to know about timeouts
Собирал информацию по лучшим практикам вокруг выставления таймаутов и наткнулся на любопытную заметку от Zalando, где обсуждается:
* как подобрать оптимальные значения таймаутов;
* взаимосвязь таймаутов и ретраев;
* как не похоронить свои системы под лавиной ретраев.
Краткая выжимка:
——
Для тех, кто захочет чуть углубиться в тематику еще немного ссылок:
1. Xороший ретрай, плохой ретрай, или История одного падения - лонг рид от Яндекс про ретраи, очень подробно и с картинками;
2. Understanding Fail-Safe and Fail-Fast Strategies - сравнение стратегий и как их использовать в реальных системах;
3. What is Backoff For? - про бекофы и когда они могут помочь, а когда нет (кстати отличный блог!).
Собирал информацию по лучшим практикам вокруг выставления таймаутов и наткнулся на любопытную заметку от Zalando, где обсуждается:
* как подобрать оптимальные значения таймаутов;
* взаимосвязь таймаутов и ретраев;
* как не похоронить свои системы под лавиной ретраев.
Краткая выжимка:
* set timeout explicitly on any remote calls
* set connection timeout = expected RTT * 3
* set request timeout based on collected metrics and SLA
* fail-fast or return a fallback value
* consider wrapping chained calls into time limiter
* retry on 5xx error and do not retry on 4xx
* think about implementing a circuit breaker when retrying
* be polite and ask the API owner for permission to enable retries
* support Idempotency-Key header in your API
——
Для тех, кто захочет чуть углубиться в тематику еще немного ссылок:
1. Xороший ретрай, плохой ретрай, или История одного падения - лонг рид от Яндекс про ретраи, очень подробно и с картинками;
2. Understanding Fail-Safe and Fail-Fast Strategies - сравнение стратегий и как их использовать в реальных системах;
3. What is Backoff For? - про бекофы и когда они могут помочь, а когда нет (кстати отличный блог!).
Zalando Engineering Blog
Zalando Engineering Blog - All you need to know about timeouts
How to set a reasonable timeout for your microservices to achieve maximum performance and resilience.
🔥6
performance_tuning_tutorial with
Часто использую
Инструмент — настоящий швейцарский нож для исследования производительности Linux-систем.
Так что, туториал, кстати.
perf
Часто использую
perf
, чтобы понять, на что уходит CPU time через perf top
или для генерации FlameGraph, когда установка eBPF утилит затруднена.Инструмент — настоящий швейцарский нож для исследования производительности Linux-систем.
Так что, туториал, кстати.
GitHub
GitHub - NAThompson/performance_tuning_tutorial: Performance Tuning Tutorial given at Oak Ridge National Laboratory
Performance Tuning Tutorial given at Oak Ridge National Laboratory - NAThompson/performance_tuning_tutorial
👍8