BPF: профессиональная оценка производительности (with Color Image)

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Инструменты оценки производительности на основе BPF дают беспрецедентную возможность анализа систем и приложений. Вы сможете улучшить производительность, устранить проблемы в коде, повысить безопасность и сократить расходы. Книга «BPF: профессиональная оценка производительности» — ваш незаменимый гайд по применению этих инструментов. Брендан Грегг — эксперт и пионер проекта BPF — представляет более 150 готовых инструментов анализа и отладки, рекомендации по их применению, а также пошаговые инструкции по разработке ваших собственных инструментов. Вы узнаете, как анализировать процессоры, память, дисковый ввод/вывод, файловую систему, сети, языки программирования, приложения, контейнеры, гипервизоры, безопасность и ядро. Вы сможете выработать глубокое понимание того, как улучшить буквально любую Linux-систему или приложение.

Author(s): Брендан Грегг
Series: Для профессионалов
Publisher: Питер
Year: 2024

Language: Russian
Pages: 880
City: СПб.
Tags: linux

Краткое содержание
Оглавление
Предисловие
Вступление
Где могут пригодиться инструменты оценки производительности BPF?
Об этой книге
Новые инструменты
О графическом пользовательском интерфейсе
О версиях Linux
О чем здесь не рассказывается
Структура
Для кого эта книга
Авторские права на исходный код
Дополнительные материалы и ссылки
Условные обозначения
Благодарности
Об авторе
От издательства
Глава 1. Введение
1.1. Что такое BPF и eBPF?
1.2. Что такое трассировка, прослушивание, выборка, профилирование и наблюдаемость?
1.3. Что такое BCC, bpftrace и IO Visor?
1.4. Первый взгляд на BCC: быстрый анализ
1.5. Область видимости механизма трассировки BPF
1.6. Динамическая инструментация: kprobes и uprobes
1.7. Статическая инструментация: точки трассировки и USDT
1.8. Первый взгляд на bpftrace: трассировка open()
1.9. Назад к BCC: трассировка open()
1.10. Итоги
Глава 2. Основы технологии
2.1. BPF в иллюстрациях
2.2. BPF
2.3. Расширенный BPF (eBPF)
2.3.1. Зачем инструментам оценки производительности нужен BPF
2.3.2. BPF и модули ядра
2.3.3. Разработка программ для BPF
2.3.4. Обзор инструкций BPF: bpftool
bpftool
bpftool perf
bpftool prog show
bpftool prog dump xlated
bpftool prog dump jited
bpftool btf
2.3.5. Обзор инструкций BPF: bpftrace
2.3.6. BPF API
Вспомогательные функции BPF
bpf_probe_read()
Команды системного вызова bpf
Типы программ BPF
Типы карт BPF
2.3.7. Управление конкурентностью в BPF
2.3.8. Интерфейс sysfs для BPF
2.3.9. BPF Type Format (BTF)
2.3.10. BPF CO-RE
2.3.11. Ограничения BPF
2.3.12. Дополнительные источники о BPF
2.4. Обход трассировки стека
2.4.1. Стеки на основе указателя на список фреймов
2.4.2. Использование отладочной информации
2.4.3. Last Branch Record (LBR)
2.4.4. ORC
2.4.5. Символы
2.4.6. Для дополнительного чтения
2.5. Флейм-графики
2.5.1. Трассировка стека
2.5.2. Профилирование трассировки стека
2.5.3. Флейм-график
2.5.4. Особенности флейм-графика
Цветовые палитры
Реакция на движение курсора
Масштабирование
Поиск
2.5.5. Разновидности
2.6. Источники событий
2.7. kprobes
2.7.1. Как работает kprobes
2.7.2. Интерфейсы kprobes
2.7.3. BPF и kprobes
2.7.4. Дополнительные источники информации о kprobes
2.8. uprobes
2.8.1. Как работает uprobes
2.8.2. Интерфейсы uprobes
2.8.3. BPF и uprobes
2.8.4. Оверхед uprobes и будущие улучшения
2.8.5. Дополнительные источники информации о uprobes
2.9. Точки трассировки
2.9.1. Инструментация точек трассировки
2.9.2. Как работают точки трассировки
2.9.3. Интерфейсы точек трассировки
2.9.4. BPF и точки трассировки
2.9.5. Неструктурированные точки трассировки в BPF
2.9.6. Дополнительные источники информации
2.10. USDT
2.10.1. Добавление поддержки USDT
Folly
2.10.2. Как работает USDT
2.10.3. BPF и USDT
2.10.4. Дополнительные источники информации о USDT
2.11. Динамический USDT
2.12. PMC
2.12.1. Режимы PMC
2.12.2. PEBS
2.12.3. Облачные вычисления
2.13. perf_events
2.14. Итоги
Глава 3. Анализ производительности
3.1. Обзор
3.1.1. Цели
3.1.2. Действия
3.1.3. Многочисленные проблемы производительности
3.2. Методологии оценки производительности
3.2.1. Определение характера рабочей нагрузки
3.2.2. Анализ с последовательным увеличением детализации
3.2.3. Метод USE
3.2.4. Чек-листы
3.3. Чек-лист инструментов Linux для анализа за 60 секунд
3.3.1. uptime
3.3.2. dmesg | tail
3.3.3. vmstat 1
3.3.4. mpstat -P ALL 1
3.3.5. pidstat 1
3.3.6. iostat -xz 1
3.3.7. free -m
3.3.8. sar -n DEV 1
3.3.9. sar -n TCP,ETCP 1
3.3.10. top
3.4. Чек-лист инструментов BCC
3.4.1. execsnoop
3.4.2. opensnoop
3.4.3 ext4slower
3.4.4. biolatency
3.4.5. biosnoop
3.4.6. cachestat
3.4.7. tcpconnect
3.4.8. tcpaccept
3.4.9. tcpretrans
3.4.10. runqlat
3.4.11. profile
3.5. Итоги
Глава 4. BCC
4.1. Компоненты BCC
4.2. Возможности BCC
4.2.1. Возможности в пространстве ядра
4.2.2. Возможности в пространстве пользователя
4.3. Установка BCC
4.3.1. Требования к конфигурации ядра
4.3.2. Ubuntu
4.3.3. RHEL
4.3.4. Другие дистрибутивы
4.4. Инструменты BCC
4.4.1. Инструменты, рассматриваемые в книге
4.4.2. Характеристики инструментов
4.4.3. Специализированные инструменты
4.4.4. Многоцелевые инструменты
4.5. funccount
4.5.1. Примеры funccount
4.5.2. Синтаксис funccount
4.5.3. Однострочные сценарии funccount
4.5.4. Порядок использования funccount
4.6. stackcount
4.6.1. Пример stackcount
4.6.2. Создание флейм-графиков с помощью stackcount
4.6.3. Искаженные трассировки
4.6.4. Синтаксис stackcount
4.6.5. Однострочные сценарии stackcount
4.6.6. Порядок использования stackcount
4.7. trace
4.7.1. Пример trace
4.7.2. Синтаксис trace
4.7.3. Однострочные сценарии trace
4.7.4. trace и структуры
4.7.5. Использование trace для отладки утечек дескрипторов файлов
4.7.6. Порядок использования trace
4.8. argdist
4.8.1. Синтаксис argdist
4.8.2. Однострочные сценарии argdist
4.9. Документация инструментов
4.9.1. Страница справочного руководства: opensnoop
4.9.2. Файл с примерами: opensnoop
4.10. Разработка инструментов BCC
4.11. Внутреннее устройство BCC
4.12. Отладка BCC
4.12.1. Отладка с помощью printf()
4.12.2. Отладочный вывод BCC
4.12.3. Флаги отладки BCC
4.12.4. bpflist
4.12.5. bpftool
4.12.6. dmesg
4.12.7. Сброс событий
4.13. Итоги
Глава 5. bpftrace
5.1. Компоненты bftrace
5.2. Возможности bpftrace
5.2.1. Источники событий bpftrace
5.2.2. Действия bpftrace
5.2.3. Общие возможности bpftrace
5.2.4. Сравнение bpftrace с другими инструментами мониторинга
5.3. Установка bpftrace
5.3.1. Требования к конфигурации ядра
5.3.2. Ubuntu
5.3.3. Fedora
5.3.4. Действия после сборки
5.3.5. Другие дистрибутивы
5.4. Инструменты bpftrace
5.4.1. Инструменты, рассматриваемые в книге
5.4.2. Характеристики инструментов
5.4.3. Использование инструментов
5.5. Однострочные сценарии bpftrace
5.6. Документация bpftrace
5.7. Программирование на bpftrace
5.7.1. Порядок использования
5.7.2. Структура программы
5.7.3. Комментарии
5.7.4. Формат определения зондов
5.7.5. Подстановочные символы в определениях зондов
5.7.6. Фильтры
5.7.7. Действия
5.7.8. Hello, World!
5.7.9. Функции
5.7.10. Переменные
5.7.11. Функции карт
5.7.12. Определение продолжительности выполнения vfs_read()
5.8. Порядок использования bpftrace
5.9. Типы зондов в bpftrace
5.9.1. tracepoint
5.9.2. usdt
5.9.3. kprobe и kretprobe
5.9.4. uprobe и uretprobe
5.9.5. software и hardware
5.9.6. profile и interval
5.10. Управление потоком выполнения в bpftrace
5.10.1. Фильтры
5.10.2. Тернарные операторы
5.10.3. Инструкция if
5.10.4. Развернутые циклы
5.11. Операторы bpftrace
5.12. Переменные bpftrace
5.12.1. Встроенные переменные
5.12.2. Встроенные переменные pid, comm и uid
5.12.3. Встроенные переменные kstack и ustack
5.12.4. Встроенные переменные: позиционные параметры
5.12.5. Временные переменные
5.12.6. Карты
5.13. Функции bpftrace
5.13.1. printf()
5.13.2. join()
5.13.3. str()
5.13.4. kstack() и ustack()
5.13.5. ksym() и usym()
5.13.6. kaddr() и uaddr()
5.13.7. system()
5.13.8. exit()
5.14. Функции-карты в bpftrace
5.14.1. count()
5.14.2. sum(), avg(), min() и max()
5.14.3. hist()
5.14.4. lhist()
5.14.5. delete()
5.14.6. clear() и zero()
5.14.7. print()
5.15. Направления развития bpftrace в будущем
5.15.1. Режимы явной адресации
5.15.2. Другие расширения
5.15.3. ply
5.16. Внутреннее устройство bpftrace
5.17. Отладка bpftrace
5.17.1. Отладка с помощью printf()
5.17.2. Режим отладки
5.17.3. Режим подробного вывода
5.18. Итоги
Глава 6. Процессоры
6.1. Основы
6.1.1. Основы работы процессоров
Режимы работы процессоров
Планировщик
Кэши процессоров
Для дополнительного чтения
6.1.2. Возможности BPF
Источники событий
Оверхед
6.1.3. Стратегия
6.2. Традиционные инструменты
6.2.1. Статистика ядра
Средняя нагрузка
top
mpstat(1)
6.2.2. Статистика оборудования
perf(1)
tlbstat
6.2.3. Выборка характеристик работы оборудования
6.2.4. Выборка по времени
perf
Флейм-графики использования процессора
Внутреннее устройство
6.2.5. Получение статистик и трассировка событий
perf
Ftrace
6.3. Инструменты BPF
6.3.1. execsnoop
BCC
bpftrace
6.3.2. exitsnoop
6.3.3. runqlat
Неправильная настройка процедуры сборки
BCC
bpftrace
6.3.4. runqlen
Четыре потока, один процессор
BCC
bpftrace
6.3.5. runqslower
6.3.6. cpudist
6.3.7. cpufreq
6.3.8. profile
Флейм-графики использования процессора
bpftrace
6.3.9. offcputime
Флейм-графики простоев
BCC
bpftrace
6.3.10. syscount
BCC
bpftrace
6.3.11. argdist и trace
bpftrace
6.3.12. funccount
bpftrace
6.3.13. softirqs
bpftrace
6.3.14. hardirqs
6.3.15. smpcalls
6.3.16. llcstat
6.3.17. Другие инструменты
6.4. Однострочные сценарии для BPF
6.4.1. BCC
6.4.2. bpftrace
6.5. Дополнительные упражнения
6.6. Итоги
Глава 7. Память
7.1. Основы
7.1.1. Основы управления памятью
Механизмы распределения памяти
Страницы памяти и подкачка
Демон подкачки
Устройства подкачки
OOM Killer
Сжатие страниц
Кэширование и буферизация в файловой системе
Для дальнейшего чтения
7.1.2. Возможности BPF
Источники событий
Оверхед
7.1.3. Стратегия
7.2. Традиционные инструменты
7.2.1. Журнал ядра
7.2.2. Статистики ядра
swapon
free
ps
pmap
vmstat
sar
7.2.3. Аппаратные статистики и выборки
7.3. Инструменты BPF
7.3.1. oomkill
bpftrace
7.3.2. memleak
7.3.3. mmapsnoop
7.3.4. brkstack
7.3.5. shmsnoop
7.3.6. faults
Флейм-графики сбоев страниц
bpftrace
7.3.7. ffaults
7.3.8. vmscan
7.3.9. drsnoop
7.3.10. swapin
7.3.11. hfaults
7.3.12. Другие инструменты
7.4. Однострочные сценарии для BPF
7.4.1. BCC
7.4.2. bpftrace
7.5. Дополнительные упражнения
7.6. Итоги
Глава 8. Файловые системы
8.1. Основы
8.1.1. Основы файловых систем
Стек ввода/вывода
Кэши файловых систем
Опережающее чтение
Отложенная запись
Для дальнейшего чтения
8.1.2. Возможности BPF
Источники событий
Оверхед
8.1.3. Стратегия
8.2. Традиционные инструменты
8.2.1. df
8.2.2. mount
8.2.3. strace
8.2.4. perf
8.2.5. fatrace
8.3. Инструменты BPF
8.3.1. opensnoop
BCC
bpftrace
8.3.2. statsnoop
BCC
bpftrace
8.3.3. syncsnoop
BCC
bpftrace
8.3.4. mmapfiles
8.3.5. scread
Поиск имени файла в таблице дескрипторов
8.3.6. fmapfault
8.3.7. filelife
BCC
bpftrace
8.3.8. vfsstat
BCC
bpftrace
8.3.9. vfscount
8.3.10. vfssize
8.3.11. fsrwstat
8.3.12. fileslower
BCC
bpftrace
8.3.13. filetop
8.3.14. writesync
8.3.15. filetype
8.3.16. cachestat
8.3.17. writeback
8.3.18. dcstat
BCC
bpftrace
8.3.19. dcsnoop
BCC
bpftrace
8.3.20. mountsnoop
8.3.21. xfsslower
8.3.22. xfsdist
BCC
bpftrace
8.3.23. ext4dist
bpftrace
8.3.24. icstat
8.3.25. bufgrow
8.3.26. readahead
8.3.27. Другие инструменты
8.4. Однострочные сценарии для BPF
8.4.1. BCC
8.4.2. bpftrace
8.4.3. Примеры использования однострочных сценариев BPF
Подсчитывает операции чтения по типам системных вызовов
Вывод гистограммы с распределением вызовов read() по размерам прочитанных блоков (и кодам ошибок)
Подсчет прохождений через точки трассировки в xfs
Подсчет числа операций чтения из устройств хранения по именам процессов и трассировкам стека
8.5. Дополнительные упражнения
8.6. Итоги
Глава 9. Дисковый ввод/вывод
9.1. Основы
9.1.1. Основы дисков
Стек блочного ввода/вывода
Внутреннее устройство
rwbs
Планировщики ввода/вывода
Производительность дискового ввода/вывода
9.1.2. Возможности BPF
Источники событий
9.1.3. Стратегия
9.2. Традиционные инструменты
9.2.1. iostat
9.2.2. perf
9.2.3. blktrace
9.2.4. Логирование SCSI
9.3. Инструменты BPF
9.3.1. biolatency
Время в очереди
Диски
Флаги
BCC
bpftrace
Точки трассировки
9.3.2. biosnoop
Время в очереди ОС
BCC
bpftrace
9.3.3. biotop
9.3.4. bitesize
BCC
bpftrace
9.3.5. seeksize
9.3.6. biopattern
9.3.7. biostacks
9.3.8. bioerr
9.3.9. mdflush
BCC
bpftrace
9.3.10. iosched
9.3.11. scsilatency
9.3.12. scsiresult
9.3.13. nvmelatency
9.4. Однострочные сценарии для BPF
9.4.1. BCC
9.4.2. bpftrace
9.4.3. Примеры использования однострочных сценариев BPF
9.5. Дополнительные упражнения
9.6. Итоги
Глава 10. Сети
10.1. Основы
10.1.1. Основы организации сетей
Сетевой стек
В обход ядра
XDP
Внутреннее устройство
Масштабирование приема и отправки
Масштабирование приема в сокетах
Очереди соединений TCP
Повторные передачи TCP
TCP-буферы отправки и приема
Управление загруженностью в TCP
Дисциплина очереди
Другие оптимизации производительности
Измерение задержек
Для дополнительного чтения
10.1.2. Возможности BPF
Источники событий
Оверхед
10.1.3. Стратегия
10.1.4. Типичные ошибки трассировки
10.2. Традиционные инструменты
10.2.1. ss
10.2.2. ip
10.2.3. nstat
10.2.4. netstat
10.2.5. sar
10.2.6. nicstat
10.2.7. ethtool
10.2.8. tcpdump
10.2.9. /proc
10.3. Инструменты BPF
10.3.1. sockstat
10.3.2. sofamily
10.3.3. soprotocol
10.3.4. soconnect
10.3.5. soaccept
10.3.6. socketio
10.3.7. socksize
10.3.8. sormem
10.3.9. soconnlat
10.3.10. so1stbyte
10.3.11. tcpconnect
BCC
bpftrace
10.3.12. tcpaccept
BCC
bpftrace
10.3.13. tcplife
BCC
bpftrace
10.3.14. tcptop
10.3.15. tcpsnoop
10.3.16. tcpretrans
BCC
bpftrace
10.3.17. tcpsynbl
10.3.18. tcpwin
10.3.19. tcpnagle
10.3.20. udpconnect
10.3.21. gethostlatency
BCC
bpftrace
10.3.22. ipecn
10.3.23. superping
10.3.24. qdisc-fq
10.3.25. qdisc-cbq, qdisc-cbs, qdisc-codel, qdisc-fq_codel, qdisc-red и qdisc-tbf
10.3.26. netsize
10.3.27. nettxlat
10.3.28. skbdrop
10.3.29. skblife
10.3.30. ieee80211scan
10.3.31. Другие инструменты
10.4. Однострочные сценарии для BPF
10.4.1. BCC
10.4.2. bpftrace
10.4.3. Примеры использования однострочных сценариев BPF
Подсчет трассировок стека в ядре, связанных с отправкой пакетов
Подсчет вызовов всех функций драйвера устройства ixgbevf (добавляет значительный оверхед в работу ixgbevf)
Подсчет срабатываний всех точек трассировки драйвера устройства iwl (добавляет значительный оверхед в работу iwl)
10.5. Дополнительные упражнения
10.6. Итоги
Глава 11. Безопасность
11.1. Основы
11.1.1. Возможности BPF
Обнаружение уязвимости нулевого дня
Мониторинг безопасности
Применение политик
11.1.2. Непривилегированные пользователи BPF
11.1.3. Настройка безопасности BPF
11.1.4. Стратегия
11.2. Инструменты BPF
11.2.1. execsnoop
11.2.2. elfsnoop
11.2.3. modsnoop
11.2.4. bashreadline
bpftrace
11.2.5. shellsnoop
BCC
bpftrace
11.2.6. ttysnoop
BCC
bpftrace
11.2.7. opensnoop
11.2.8. eperm
11.2.9. tcpconnect и tcpaccept
11.2.10. tcpreset
11.2.11. capable
BCC
bpftrace
11.2.12. setuids
11.3. Однострочные сценарии для BPF
11.3.1. BCC
11.3.2. bpftrace
11.3.3. Примеры использования однострочных сценариев BPF
Подсчет событий аудита безопасности
Трассировка запуска сеансов аутентификации с использованием механизма PAM
11.4. Итоги
Глава 12. Языки
12.1. Основы
12.1.1. Компилируемые языки
12.1.2. Языки с динамической компиляцией
12.1.3. Интерпретируемые языки
12.1.4. Возможности BPF
12.1.5. Стратегия
12.1.6. Инструменты BPF
12.2. C
12.2.1. Символы функций на C
Отладочная информация
Удаление ненужной отладочной информации
BTF
bpftrace
12.2.2. Трассировка стека программного кода на C
12.2.3. Трассировка функций на C
12.2.4. Трассировка смещений в функциях на C
12.2.5. Трассировка программного кода на C с помощью зондов USDT
12.2.6. Трассировка программного кода на C с помощью однострочных сценариев
BCC
bpftrace
12.3. Java
12.3.1. Трассировка libjvm
Символы libjvm
12.3.2. jnistacks
12.3.3. Имена потоков выполнения в Java
12.3.4. Символы методов Java
Автоматизация
Другие приемы и новые возможности в будущем
12.3.5. Приемы трассировки стека Java
PreserveFramePointer
Стеки и символы
Стеки библиотек
12.3.6. Зонды USDT в Java
Реализация USDT в Java
Получение списка зондов USDT в Java
Использование зондов USDT в Java
Расширенный набор зондов USDT в Java
12.3.7. profile
Предварительные требования Java
Флейм-график потребления процессора
Встраивание
bpftrace
12.3.8. offcputime
Стеки libpthread
Флейм-графики простоев
12.3.9. stackcount
Флейм-график отказов страниц
bpftrace
12.3.10. javastat
12.3.11. javathreads
12.3.12. javacalls
BCC
bpftrace
12.3.13. javaflow
12.3.14. javagc
12.3.15. javaobjnew
12.3.16. Однострочные сценарии для трассировки кода на Java
BCC
bpftrace
12.4. Командная оболочка bash
12.4.1. Подсчет вызовов функций
12.4.2. Трассировка аргументов функции (bashfunc.bt)
12.4.3. Задержки в функциях (bashfunclat.bt)
12.4.4. /bin/bash
12.4.5. Зонды USDT в /bin/bash
12.4.6. Однострочные сценарии для трассировки bash
BCC
bpftrace
12.5. Другие языки
12.5.1. JavaScript (Node.js)
Зонды USDT
Обход стека
Символы
Трассировка функций
12.5.2. C++
12.5.3. Golang
Обход стека и символы
Трассировка точек входа в функции
Аргументы функции в точке входа
Возвращаемые значения функций
USDT
12.6. Итоги
Глава 13. Приложения
13.1. Основы
13.1.1. Основы приложений
Управление потоками
Блокировки
Приостановка
13.1.2. Пример приложения: сервер MySQL
13.1.3. Возможности BPF
Оверхед
13.1.4. Стратегия
13.2. Инструменты BPF
13.2.1. execsnoop
13.2.2. threadsnoop
13.2.3. profile
13.2.4. threaded
13.2.5. offcputime
Флейм-графики простоев
bpftrace
Заключительные примечания
13.2.6. offcpuhist
13.2.7. syscount
13.2.8. ioprofile
13.2.9. Указатели фреймов в libc
13.2.10. mysqld_qslower
BCC
bpftrace
bpftrace: зонды uprobes
13.2.11. mysqld_clat
13.2.12. signals
13.2.13. killsnoop
BCC
bpftrace
13.2.14. pmlock и pmheld
pmlock
pmheld
13.2.15. naptime
13.2.16. Другие инструменты
13.3. Однострочные сценарии для BPF
13.3.1. BCC
13.3.2. bpftrace
13.4. Примеры использования однострочных сценариев BPF
13.4.1. Подсчет количества вызовов в секунду функций из библиотеки libpthread для доступа к условным переменным
13.5. Итоги
Глава 14. Ядро
14.1. Основы
14.1.1. Основы ядра
Пробуждения
Распределение памяти ядра
Блокировки в ядре
Тасклеты и очереди заданий
14.1.2. Возможности BPF
Источники событий
14.2. Стратегия
14.3. Традиционные инструменты
14.3.1. Ftrace
Подсчет вызовов функций
Подсчет трассировок стека
Диаграммы вызовов функций
14.3.2. perf sched
14.3.3. slabtop
14.3.4. Другие инструменты
14.4. Инструменты BPF
14.4.1. loads
14.4.2. offcputime
Непрерываемый ввод/вывод
Неинформативные стеки
14.4.3. wakeuptime
14.4.4. offwaketime
Флейм-графики времени ожидания/удержания блокировок
14.4.5. mlock и mheld
mlock
mheld
14.4.6. Спин-блокировки
14.4.7. kmem
14.4.8. kpages
14.4.9. memleak
14.4.10. slabratetop
BCC
bpftrace
14.4.11. numamove
14.4.12. workq
14.4.13. Тасклеты
14.4.14. Другие инструменты
14.5. Однострочные сценарии для BPF
14.5.1. BCC
14.5.2. bpftrace
14.6. Примеры использования однострочных сценариев BPF
14.6.1. Подсчет обращений к системным вызовам по именам функций системных вызовов
14.6.2. Подсчет запусков hrtimer функциями ядра
14.7. Сложности
14.8. Итоги
Глава 15. Контейнеры
15.1. Основы
15.1.1. Возможности BPF
15.1.2. Сложности
Привилегии для BPF
Идентификаторы контейнеров
Оркестрация
Function as a Service (FaaS)
15.1.3. Стратегия
15.2. Традиционные инструменты
15.2.1. Анализ на уровне хоста
15.2.2. Анализ на уровне контейнера
15.2.3. systemd-cgtop
15.2.4. kubectl top
15.2.5. docker stats
15.2.6. /sys/fs/cgroups
15.2.7. perf
15.3. Инструменты BPF
15.3.1. runqlat
15.3.2. pidnss
15.3.3. blkthrot
15.3.4. overlayfs
15.4. Однострочные сценарии для BPF
15.5. Дополнительные упражнения
15.6. Итоги
Глава 16. Гипервизоры
16.1. Основы
16.1.1. Возможности BPF
Гостевые системы в AWS EC2
16.1.2. Возможные стратегии
16.2. Традиционные инструменты
16.3. Инструменты BPF для анализа на уровне гостевой ОС
16.3.1. Гипервызовы Xen
Xen PV
Xen PV: подсчет гипервызовов
Xen PV: стеки гипервызовов
Xen PV: задержка гипервызова
Xen HVM
16.3.2. xenhyper
16.3.3. Обратные вызовы Xen
16.3.4. cpustolen
16.3.5. Трассировка выходов в HVM
16.4. Инструменты BPF анализа на уровне хоста
16.4.1. kvmexits
16.4.2. Возможные направления развития в будущем
16.5. Итоги
Глава 17. Другие инструменты BPF для анализа производительности
17.1. Vector и Performance Co-Pilot (PCP)
17.1.1. Визуализация
17.1.2. Визуализация: тепловые карты
17.1.3. Визуализация: табличное представление данных
17.1.4. Метрики BCC
17.1.5. Внутреннее устройство
17.1.6. Установка PCP и Vector
17.1.7. Подключение и просмотр данных
17.1.8. Настройка BCC PMDA
17.1.9. Возможные направления развития в будущем
17.1.10. Для дополнительного чтения
17.2. Grafana и Performance Co-Pilot (PCP)
17.2.1. Установка и настройка
17.2.2. Подключение и просмотр данных
17.2.3. Возможные направления развития в будущем
17.2.4 Для дополнительного чтения
17.3. Экспортер Cloudflare eBPF Prometheus (с Grafana)
17.3.1. Сборка и запуск экспортера ebpf
17.3.2. Настройка Prometheus для мониторинга экземпляра ebpf_exporter
17.3.3. Создание запроса в Grafana
17.3.4. Для дополнительного чтения
17.4. kubectl-trace
17.4.1. Трассировка узлов
17.4.2. Трассировка подов и контейнеров
17.4.3. Для дополнительного чтения
17.5. Другие инструменты
17.6. Итоги
Глава 18. Советы, рекомендации и типичные проблемы
18.1. Типичная частота событий и оверхед
18.1.1. Частота
18.1.2. Выполняемые действия
18.1.3. Проверяй себя
18.2. Выборка с частотой 49 или 99 Гц
18.3. Желтые свиньи и серые крысы
18.4. Пишите целевое ПО
18.5. Изучайте системные вызовы
18.6. Не усложняйте
18.7. Отсутствие событий
18.8. Отсутствие трассировок стека
18.8.1. Как исправить проблему отсутствия трассировок стека
18.9. Отсутствие символов (имен функций) в выводе
18.9.1. Как исправить проблему отсутствия символов: среда выполнения с JIT (Java, Node.js, ...)
18.9.2. Как исправить проблему отсутствия символов: двоичные файлы ELF (C, C++, ...)
18.10. Отсутствие функций в трассировке
18.11. Циклы обратной связи
18.12. Сброс событий
Приложение A. Однострочные сценарии для bpftrace
Глава 6. Процессоры
Глава 7. Память
Глава 8. Файловые системы
Глава 9. Дисковый ввод/вывод
Глава 10. Сети
Глава 11. Безопасность
Глава 13. Приложения
Глава 14. Ядро
Приложение B. Шпаргалка по bpftrace
Синтаксис
Зонды
Псевдонимы зондов
Переменные
Действия
Асинхронные действия
Ключи
Приложение C. Разработка инструментов BCC
Ресурсы
Пять советов
Примеры инструментов
Инструмент 1: hello_world.py
Инструмент 2: sleepsnoop.py
Инструмент 3: bitehist.py
Инструмент 4: biolatency
Дополнительная информация
Приложение D. C BPF
Почему на C?
Пять советов
Программы на C
ВНИМАНИЕ: изменения в API
Компиляция
Инструмент 1: Hello, World!
Инструмент 2: bigreads
Инструмент 3: bitehist
perf C
Инструмент 1: bigreads
Дополнительная информация
Приложение E. Инструкции BPF
Вспомогательные макросы
Инструкции
Кодирование
Ссылки
Глоссарий
Библиография