SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Современная операционная система:
что надо знать разработчику
Александр Крижановский
NatSys Lab., Tempesta Technologies
ak@natsys-lab.com
Disclamer
Компоненты ОС Linux – да, но через призму...
…моего личнго мнения → welcome to holy war :)
Современная ОС – зло!
Netmap (network IO), user-space TCP
O_DIRECT (databases), Linux Torvalds, LKML
10 Jan 2007: “The whole notion of "direct IO" is
totally braindamaged. Just say no.”
Threads, Events OR Coroutines?
- “Why Events are A Bad Idea”, Rob von
Behren
- “SEDA: An Architecture for Well-Conditioned,
Scalable Internet Services”, Matt Welsh
- Coroutines...
Memory allocation: ptmalloc, hoard, jemalloc,
SLAB, pool, page, buddy...
...но не для десктопа
Gentoo с легким оконным менеджером:
$ ps -A|wc -l
112
Kernel stuff, X, fluxbox, Xterm, bash, skype, thunderbird, firefox, ooffice, gcc,
./a.out ….
=> и у каждого это свое
$ grep -c processor /proc/cpuinfo
4
$ grep MemTotal /proc/meminfo
MemTotal: 8123396 kB
$ numactl -s
physcpubind: 0 1 2 3
No NUMA support available on this system.
Что делает прогрессивная часть
человечества?
“...standard servers running an in-house
OS. The key to achieve that
performance was to disable IRQs, no
syscalls, no context switching, no
kernel, no memcopy, new stack etc.
Basically in few hundreds ticks a packet
hits the nginx or whatever application
runs on it.”
Почему все так?
(http://en.wikipedia.org/wiki/Linux_kernel)
Processing
Процессы как-то спроведливо и оптимально планируются по ядрам, получают
свои time slice'ы...
Процессы и потоки – это удобство, для производительности есть ядра
CPU и “железные потоки”
Context switch
! Инвалидация TLB и L1{d,c} кэшей
! Вымывание L2{d,c} и L3{d,c} кэшей
+ kernel/user switch - дешев
NUMA миграция контекста - перепланирование на другую ноду
Shared memory – прямой доступ к удаленной ноде
Ulrich Drepper, “What Every Programmer Should Know about Memory”
Processing: NUMA (i7)
# numactl --hardware
available: 4 nodes (0-3)
node 0 cpus: 0 4 8 12 16 20 24 28 32 36
node 0 size: 163763 MB
node 0 free: 160770 MB
node 1 cpus: 2 6 10 14 18 22 26 30 34 38
node 1 size: 163840 MB
node 1 free: 160866 MB
node 2 cpus: 1 5 9 13 17 21 25 29 33 37
node 2 size: 163840 MB
node 2 free: 160962 MB
node 3 cpus: 3 7 11 15 19 23 27 31 35 39
node 3 size: 163840 MB
node 3 free: 160927 MB
node distances:
node 0 1 2 3
0: 10 21 21 21
1: 21 10 21 21
2: 21 21 10 21
3: 21 21 21 10
Processing: best practices
(1 машина – 1 задача!)
Spin locks, lock-free & Ko. - только в пределах одного процессора
=> мини-кластеры внутри одной NUMA машины со своими очередями,
локами и пр.
=> Минимизация разделяемых данных
ex. std::shared_ptr использует reference counter – целую переменную,
разделяемую и модифицируемую всеми потоками
False sharing => выравнивайте данные
=> Привязывайте процессы
# dd if=/dev/zero count=2000000 bs=8192 | nc 1.1.1.1 80
16384000000 bytes (16 GB) copied, 59.4648 seconds, 276 MB/s
# taskset 0x400 dd if=/dev/zero count=2000000 bs=8192 | taskset 0x200 nc 1.1.1.1 80
16384000000 bytes (16 GB) copied, 39.8281 seconds, 411 MB/s
Memory: Virtual Memory
Random access pattern –
плохо (маленький TLB)
a b
c
Application Tree
Memory: вытеснение страниц
Привет, Базы данных!
(ex. InnoDB buffer pool)
Linux [kswapd/N], [writeback]
linux/Documentation/
sysctl/vm.txt:
● vm.dirty_background_{ratio,bytes} – точка начала отложенных сбросов
● vm.dirty_{ratio,bytes} – точка начала сброса страниц самим процессом
● vm.dirty_expire_centisecs – время устаревания страниц
● vm.dirty_writeback_centisecs – время между отложенными сбросами
● vm.vfs_cache_presure – вымещение dentries/inodes vs. pagecache
active list
inactive list
add
freeP
P
P
P
P P
P
P
hit
Memory: (Transparrent) Huge Pages
Подходит не всем (ex. некоторые БД)
+ меньший TLB miss, лучшая работа с page table
- TLB маленький, тяжело выделить страницу
$ grep -o 'pdpe1gb|pse' /proc/cpuinfo| sort -u
pdpe1gb # 1GB
pse # 2MB
Linux 2.6.38, для анонимных страниц (не связанных с файлами)
CONFIG_TRANSPARENT_HUGEPAGE
/sys/kernel/mm/transparent_hugepage/
madvise(..., …, MADV_HUGEPAGE)
https://lwn.net/Articles/423584/
Storage: disk IO
Page cache: open(2), read(2), write(2)
open(.., O_DIRECT): используется
современными ACID СУБД для кэширования
буферов данных
● Прямая работа с DMA контроллером
mmap(): использование механизмов кэширования
ОС (встречается в “легких” СУБД)
● Можно адресовать 128TB в user space, при этом
page table ~256GB
Storage: IO scheduler
Современные SAS/SATA контроллеры имеют
собственные аналогичные механизмы планирования
Уровень блочного ввода-вывода
(между ФС и драйвером устройства)
Накапливает, переупорядочивает и отдает на
ввод-вывод драйверу запросы ввода-вывода
Noop (No Operation): простой FIFO без переупорядочивания, слитие запросов
для снижения нагрузки на CPU при IO (полагается на TCQ/NCQ)
Deadline: циклический, почти RT (рекомендуется для СУБД)
CFQ (Complete Fair Queuing): IO QoS для процессов, имеет возможность
настройки баланса между latency и пропускной способностью
Storage: IO оптимизация
Планировщик
● /sys/block/{dev}/queue/scheduler – алгоритм планировщика
● /sys/block/{dev}/queue/nr_requests – длина очереди
планировщика IO (latency vs. throughput)
● /sys/block/{dev}/queue/read_ahead_kb - префетчинг
Системные вызовы
● msync() – синхронизация mmap()'ленных страниц
● fsync() – сброс кэшированных блоков
● madvise()/posix_fadvise() – access hints
● mlock() – запретить свопинг
● fallocate() – предвыделение блоков
Networking: zero-copy network (I)O
vmsplice(2), splice(2)
Только на Output
Сетевой стек пишет данные напрямую
со страницы => перед использованием
страницы снова нужно записать 2 размера
буфера отправки (double-buffer write)
нужен страничный аллокатор
# ./nettest/xmit -s65536 -p1000000 127.0.0.1 5500
xmit: msg=64kb, packets=1000000 vmsplice() -> splice()
usr=9259, sys=6864, real=27973
# ./nettest/xmit -s65536 -p1000000 -n 127.0.0.1 5500
xmit: msg=64kb, packets=1000000 send()
usr=8762, sys=25497, real=34261
Networking: Параллельность обработки
Параллельность: MSI-X, irq round-robin
$ grep eth0 /proc/interrupts
$ echo 1 > /proc/irq/$q0/smp_affinity
$ echo 2 > /proc/irq/$q1/smp_affinity
$ echo 4 > /proc/irq/$q2/smp_affinity
…
RPS (Receive Packet Steering) позволяет «разбрасывать» пакеты по softirq на
разных ядрах если MSI-X недостаточно (или железо вообще не может
параллелить прерывания)
$ for i in `seq 0 7`; do
echo fffffff > /sys/class/net/eth0/queues/rx-$i/rps_cpus;
done
RFS (Receive Flow Steering) позволяет отправлять пакеты на CPU
прикладного процесса
Networking: CPU offloading
Jumbo frames (MTU <= 9KB)
IP fragments на уровне сетевого адаптера (IPv4/IPv6, TCP, UDP)
● GRO (Generic Receive Offloading)
● GSO (Generic Segmentation Offloading)
Networking: Qdisc
(В основном про роутеры и
приоритизацию потоков)
Queueing Discipline (Qdisc), tc(8)
Очереди
Дерево классов обслуживания
Фильтры определяют класс
http://www.linuxjournal.com/content
/queueing-linux-network-stack
Networking: sysctl
net.core.somaxconn – listen(2) backlog
net.core.tcp_max_syn_backlog – TCP SYN backlog
net.ipv4.tcp_fin_timeout – таймаут для FIN_WAIT_2 соединений
net.ipv4.tcp_tw_recycle – переиспользование TIME-WAIT сокетов
net.ipv4.{tcp_mem, tcp_rmem, tcp_wmem} – размер TCP буферов
net.ipv4.{tcp_keepalive_time, tcp_keepalive_probes, tcp_keepalive_intvl} –
управление TCP Keep-Alive
….
Linux/Documentation/networking/ip-sysctl.txt
Спасибо!
ak@natsys-lab.com

Mais conteúdo relacionado

Mais procurados

DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Ontico
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
Ontico
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Ontico
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Ontico
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
Ontico
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Ontico
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
Evgeny Uskov
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 

Mais procurados (20)

DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
 
Дмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooДмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в Badoo
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 

Destaque

Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Ontico
 
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Ontico
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Ontico
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Ontico
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Ontico
 
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Ontico
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Ontico
 

Destaque (16)

С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
 
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
 
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
 
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
 
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
 
Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)
 

Semelhante a Современная операционная система: что надо знать разработчику / Александр Крижановский (NatSys Lab., Tempesta Technologies)

Вячеслав Бирюков - Как Linux работает с памятью
Вячеслав Бирюков - Как Linux работает с памятьюВячеслав Бирюков - Как Linux работает с памятью
Вячеслав Бирюков - Как Linux работает с памятью
Yandex
 
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
Омские ИТ-субботники
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Ontico
 
Операционные системы
Операционные системыОперационные системы
Операционные системы
yaevents
 
Highload Begun Pankov
Highload Begun PankovHighload Begun Pankov
Highload Begun Pankov
Ontico
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Ontico
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
drupalconf
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
Alex Tutubalin
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Ontico
 
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAЛекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Mikhail Kurnosov
 

Semelhante a Современная операционная система: что надо знать разработчику / Александр Крижановский (NatSys Lab., Tempesta Technologies) (20)

Как Linux работает с памятью — Вячеслав Бирюков
Как Linux работает с памятью — Вячеслав БирюковКак Linux работает с памятью — Вячеслав Бирюков
Как Linux работает с памятью — Вячеслав Бирюков
 
Вячеслав Бирюков - Как Linux работает с памятью
Вячеслав Бирюков - Как Linux работает с памятьюВячеслав Бирюков - Как Linux работает с памятью
Вячеслав Бирюков - Как Linux работает с памятью
 
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
 
Операционные системы
Операционные системыОперационные системы
Операционные системы
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
 
Krizhanovsky Vm
Krizhanovsky VmKrizhanovsky Vm
Krizhanovsky Vm
 
Highload Begun Pankov
Highload Begun PankovHighload Begun Pankov
Highload Begun Pankov
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
 
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAЛекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
 
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияДмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
 
Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStack
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 

Mais de Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Mais de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Современная операционная система: что надо знать разработчику / Александр Крижановский (NatSys Lab., Tempesta Technologies)

  • 1. Современная операционная система: что надо знать разработчику Александр Крижановский NatSys Lab., Tempesta Technologies ak@natsys-lab.com
  • 2. Disclamer Компоненты ОС Linux – да, но через призму... …моего личнго мнения → welcome to holy war :)
  • 3. Современная ОС – зло! Netmap (network IO), user-space TCP O_DIRECT (databases), Linux Torvalds, LKML 10 Jan 2007: “The whole notion of "direct IO" is totally braindamaged. Just say no.” Threads, Events OR Coroutines? - “Why Events are A Bad Idea”, Rob von Behren - “SEDA: An Architecture for Well-Conditioned, Scalable Internet Services”, Matt Welsh - Coroutines... Memory allocation: ptmalloc, hoard, jemalloc, SLAB, pool, page, buddy...
  • 4. ...но не для десктопа Gentoo с легким оконным менеджером: $ ps -A|wc -l 112 Kernel stuff, X, fluxbox, Xterm, bash, skype, thunderbird, firefox, ooffice, gcc, ./a.out …. => и у каждого это свое $ grep -c processor /proc/cpuinfo 4 $ grep MemTotal /proc/meminfo MemTotal: 8123396 kB $ numactl -s physcpubind: 0 1 2 3 No NUMA support available on this system.
  • 5. Что делает прогрессивная часть человечества? “...standard servers running an in-house OS. The key to achieve that performance was to disable IRQs, no syscalls, no context switching, no kernel, no memcopy, new stack etc. Basically in few hundreds ticks a packet hits the nginx or whatever application runs on it.”
  • 7. Processing Процессы как-то спроведливо и оптимально планируются по ядрам, получают свои time slice'ы... Процессы и потоки – это удобство, для производительности есть ядра CPU и “железные потоки” Context switch ! Инвалидация TLB и L1{d,c} кэшей ! Вымывание L2{d,c} и L3{d,c} кэшей + kernel/user switch - дешев NUMA миграция контекста - перепланирование на другую ноду Shared memory – прямой доступ к удаленной ноде Ulrich Drepper, “What Every Programmer Should Know about Memory”
  • 8. Processing: NUMA (i7) # numactl --hardware available: 4 nodes (0-3) node 0 cpus: 0 4 8 12 16 20 24 28 32 36 node 0 size: 163763 MB node 0 free: 160770 MB node 1 cpus: 2 6 10 14 18 22 26 30 34 38 node 1 size: 163840 MB node 1 free: 160866 MB node 2 cpus: 1 5 9 13 17 21 25 29 33 37 node 2 size: 163840 MB node 2 free: 160962 MB node 3 cpus: 3 7 11 15 19 23 27 31 35 39 node 3 size: 163840 MB node 3 free: 160927 MB node distances: node 0 1 2 3 0: 10 21 21 21 1: 21 10 21 21 2: 21 21 10 21 3: 21 21 21 10
  • 9. Processing: best practices (1 машина – 1 задача!) Spin locks, lock-free & Ko. - только в пределах одного процессора => мини-кластеры внутри одной NUMA машины со своими очередями, локами и пр. => Минимизация разделяемых данных ex. std::shared_ptr использует reference counter – целую переменную, разделяемую и модифицируемую всеми потоками False sharing => выравнивайте данные => Привязывайте процессы # dd if=/dev/zero count=2000000 bs=8192 | nc 1.1.1.1 80 16384000000 bytes (16 GB) copied, 59.4648 seconds, 276 MB/s # taskset 0x400 dd if=/dev/zero count=2000000 bs=8192 | taskset 0x200 nc 1.1.1.1 80 16384000000 bytes (16 GB) copied, 39.8281 seconds, 411 MB/s
  • 10. Memory: Virtual Memory Random access pattern – плохо (маленький TLB) a b c Application Tree
  • 11. Memory: вытеснение страниц Привет, Базы данных! (ex. InnoDB buffer pool) Linux [kswapd/N], [writeback] linux/Documentation/ sysctl/vm.txt: ● vm.dirty_background_{ratio,bytes} – точка начала отложенных сбросов ● vm.dirty_{ratio,bytes} – точка начала сброса страниц самим процессом ● vm.dirty_expire_centisecs – время устаревания страниц ● vm.dirty_writeback_centisecs – время между отложенными сбросами ● vm.vfs_cache_presure – вымещение dentries/inodes vs. pagecache active list inactive list add freeP P P P P P P P hit
  • 12. Memory: (Transparrent) Huge Pages Подходит не всем (ex. некоторые БД) + меньший TLB miss, лучшая работа с page table - TLB маленький, тяжело выделить страницу $ grep -o 'pdpe1gb|pse' /proc/cpuinfo| sort -u pdpe1gb # 1GB pse # 2MB Linux 2.6.38, для анонимных страниц (не связанных с файлами) CONFIG_TRANSPARENT_HUGEPAGE /sys/kernel/mm/transparent_hugepage/ madvise(..., …, MADV_HUGEPAGE) https://lwn.net/Articles/423584/
  • 13. Storage: disk IO Page cache: open(2), read(2), write(2) open(.., O_DIRECT): используется современными ACID СУБД для кэширования буферов данных ● Прямая работа с DMA контроллером mmap(): использование механизмов кэширования ОС (встречается в “легких” СУБД) ● Можно адресовать 128TB в user space, при этом page table ~256GB
  • 14. Storage: IO scheduler Современные SAS/SATA контроллеры имеют собственные аналогичные механизмы планирования Уровень блочного ввода-вывода (между ФС и драйвером устройства) Накапливает, переупорядочивает и отдает на ввод-вывод драйверу запросы ввода-вывода Noop (No Operation): простой FIFO без переупорядочивания, слитие запросов для снижения нагрузки на CPU при IO (полагается на TCQ/NCQ) Deadline: циклический, почти RT (рекомендуется для СУБД) CFQ (Complete Fair Queuing): IO QoS для процессов, имеет возможность настройки баланса между latency и пропускной способностью
  • 15. Storage: IO оптимизация Планировщик ● /sys/block/{dev}/queue/scheduler – алгоритм планировщика ● /sys/block/{dev}/queue/nr_requests – длина очереди планировщика IO (latency vs. throughput) ● /sys/block/{dev}/queue/read_ahead_kb - префетчинг Системные вызовы ● msync() – синхронизация mmap()'ленных страниц ● fsync() – сброс кэшированных блоков ● madvise()/posix_fadvise() – access hints ● mlock() – запретить свопинг ● fallocate() – предвыделение блоков
  • 16. Networking: zero-copy network (I)O vmsplice(2), splice(2) Только на Output Сетевой стек пишет данные напрямую со страницы => перед использованием страницы снова нужно записать 2 размера буфера отправки (double-buffer write) нужен страничный аллокатор # ./nettest/xmit -s65536 -p1000000 127.0.0.1 5500 xmit: msg=64kb, packets=1000000 vmsplice() -> splice() usr=9259, sys=6864, real=27973 # ./nettest/xmit -s65536 -p1000000 -n 127.0.0.1 5500 xmit: msg=64kb, packets=1000000 send() usr=8762, sys=25497, real=34261
  • 17. Networking: Параллельность обработки Параллельность: MSI-X, irq round-robin $ grep eth0 /proc/interrupts $ echo 1 > /proc/irq/$q0/smp_affinity $ echo 2 > /proc/irq/$q1/smp_affinity $ echo 4 > /proc/irq/$q2/smp_affinity … RPS (Receive Packet Steering) позволяет «разбрасывать» пакеты по softirq на разных ядрах если MSI-X недостаточно (или железо вообще не может параллелить прерывания) $ for i in `seq 0 7`; do echo fffffff > /sys/class/net/eth0/queues/rx-$i/rps_cpus; done RFS (Receive Flow Steering) позволяет отправлять пакеты на CPU прикладного процесса
  • 18. Networking: CPU offloading Jumbo frames (MTU <= 9KB) IP fragments на уровне сетевого адаптера (IPv4/IPv6, TCP, UDP) ● GRO (Generic Receive Offloading) ● GSO (Generic Segmentation Offloading)
  • 19. Networking: Qdisc (В основном про роутеры и приоритизацию потоков) Queueing Discipline (Qdisc), tc(8) Очереди Дерево классов обслуживания Фильтры определяют класс http://www.linuxjournal.com/content /queueing-linux-network-stack
  • 20. Networking: sysctl net.core.somaxconn – listen(2) backlog net.core.tcp_max_syn_backlog – TCP SYN backlog net.ipv4.tcp_fin_timeout – таймаут для FIN_WAIT_2 соединений net.ipv4.tcp_tw_recycle – переиспользование TIME-WAIT сокетов net.ipv4.{tcp_mem, tcp_rmem, tcp_wmem} – размер TCP буферов net.ipv4.{tcp_keepalive_time, tcp_keepalive_probes, tcp_keepalive_intvl} – управление TCP Keep-Alive …. Linux/Documentation/networking/ip-sysctl.txt