Производительность систем. На примере Linux

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"

Книга посвящена концепциям, стратегиям, инструментам и настройке операционных систем и приложений на примере систем на базе Linux. Понимание этих инструментов и методов критически важно при разработке современного ПО. Применение стратегий, изложенных в обновленном и переработанном издании, позволит перформанс-инженерам улучшить взаимодействие с конечными пользователями и снизить затраты, особенно для облачных сред.

Author(s): Брендан Грегг
Edition: 2
Publisher: Питер
Year: 2023

Language: Russian
Pages: 992
City: Санкт-Петербург

Предисловие
Об этом издании
Об этой книге
Благодарности
Об авторе
ОТ ИЗДАТЕЛЬСТВА
Глава 1. Введение
1.1. Производительность системы
1.2. Роли
1.3. Действия
1.4. Перспективы
1.5. Сложности оценки производительности
1.5.1. Субъективность
1.5.2. Сложность
1.5.3. Множественные причины
1.5.4. Множественные проблемы с производительностью
1.6. Задержка
1.7. Наблюдаемость
1.7.1. Счетчики, статистики и метрики
1.7.2. Профилирование
1.7.3. Трассировка
1.8. Эксперименты
1.9. Облачные вычисления
1.10. Методологии
1.10.1. Анализ производительности Linux за 60 секунд
1.11. Практические примеры
1.11.1. Медленные диски
1.11.2. Изменение в программном обеспечении
1.11.3. Дополнительное чтение
1.12. Ссылки
Глава 2. Методологии
2.1. Терминология
2.2. Модели
2.2.1. Тестируемая система
2.2.2. Система массового обслуживания
2.3. Основные понятия
2.3.1. Задержка
2.3.2. Шкалы времени
2.3.3. Компромиссы
2.3.4. Настройка производительности
2.3.5. Целесообразность
2.3.6. Когда лучше остановить анализ
2.3.7. Рекомендации действительны на данный момент времени
2.3.8. Нагрузка и архитектура
2.3.9. Масштабируемость
2.3.10. Метрики
2.3.11. Потребление
2.3.12. Насыщенность
2.3.13. Профилирование
2.3.14. Кэширование
2.3.15. Известные неизвестные
2.4. Точки зрения
2.4.1. Анализ ресурсов
2.4.2. Анализ рабочей нагрузки
2.5. Методология
2.5.1. Антиметодология «уличный фонарь»
2.5.2. Антиметодология «случайное изменение»
2.5.3. Антиметодология «виноват кто-то другой»
2.5.4. Специальный чек-лист
2.5.5. Формулировка проблемы
2.5.6. Научный метод
2.5.7. Цикл диагностики
2.5.8. Метод инструментов
2.5.9. Метод USE
2.5.10. Метод RED
2.5.11. Определение характеристик рабочей нагрузки
2.5.12. Анализ с увеличением детализации
2.5.13. Анализ задержек
2.5.14. Метод R
2.5.15. Трассировка событий
2.5.16. Базовые статистики
2.5.17. Статическая настройка производительности
2.5.18. Настройка кэширования
2.5.19. Микробенчмаркинг производительности
2.5.20. Мантры производительности
2.6. Моделирование
2.6.1. Корпоративные и облачные среды
2.6.2. Визуальная идентификация
2.6.3. Закон Амдала
2.6.4. Универсальный закон масштабируемости
2.6.5. Теория массового обслуживания
2.7. Планирование емкости
2.7.1. Пределы ресурсов
2.7.2. Факторный анализ
2.7.3. Решения масштабирования
2.8. Статистики
2.8.1. Количественная оценка прироста производительности
2.8.2. Усреднение
2.8.3. Стандартное отклонение, процентили, медиана
2.8.4. Коэффициент вариации
2.8.5. Мультимодальные распределения
2.8.6. Выбросы
2.9. Мониторинг
2.9.1. Временные закономерности
2.9.2. Инструменты мониторинга
2.9.3. Сводная статистика, накопленная с момента загрузки
2.10. Визуализация
2.10.1. Линейная диаграмма
2.10.2. Диаграммы рассеяния
2.10.3. Тепловые карты
2.10.4. Временная шкала
2.10.5. График поверхности
2.10.6. Инструменты визуализации
2.11. Упражнения
2.12. Ссылки
Глава 3. Операционные системы
3.1. Терминология
3.2. Основы
3.2.1. Ядро
3.2.2. Ядро и пользовательские режимы
3.2.3. Системные вызовы
3.2.4. Прерывания
3.2.5. Часы и бездействие
3.2.6. Процессы
3.2.7. Стеки
3.2.8. Виртуальная память
3.2.9. Планировщики
3.2.10. Файловая система
3.2.11. Кэширование
3.2.12. Сеть
3.2.13. Драйверы устройств
3.2.14. Многопроцессорность
3.2.15. Вытеснение
3.2.16. Управление ресурсами
3.2.17. Наблюдаемость
3.3. Ядра
3.3.1. Unix
3.3.2. BSD
3.3.3. Solaris
3.4. Linux
3.4.1. Новые разработки в ядре Linux
3.4.2. systemd
3.4.3. KPTI (Meltdown)
3.4.4. Расширенный BPF
3.5. Другие темы
3.5.1. Ядра PGO
3.5.2. Одноцелевые ядра
3.5.3. Микроядра и гибридные ядра
3.5.4. Распределенные операционные системы
3.6. Сравнение ядер
3.7. Упражнения
3.8. Ссылки
3.8.1. Дополнительное чтение
Глава 4. Инструменты наблюдения
4.1. Покрытие инструментами
4.1.1. Инструменты статического анализа производительности
4.1.2. Инструменты анализа кризисных ситуаций
4.2. Типы инструментов
4.2.1. Фиксированные счетчики
4.2.2. Профилирование
4.2.3. Трассировка
4.2.4. Мониторинг
4.3. Источники информации
4.3.1. /proc
4.3.2. /sys
4.3.3. Учет задержек
4.3.4. netlink
4.3.5. Точки трассировки
4.3.6. kprobes
4.3.7. uprobes
4.3.8. USDT
4.3.9. Аппаратные счетчики (PMC)
4.3.10. Другие источники информации для наблюдения
4.4. sar
4.4.1. Область покрытия sar(1)
4.4.2. Мониторинг с sar(1)
4.4.3. Вывод оперативной информации с помощью sar(1)
4.4.4. Документация с описанием sar(1)
4.5. Инструменты трассировки
4.6. Наблюдение за наблюдаемостью
4.7. Упражнения
4.8. Ссылки
Глава 5. Приложения
5.1. Основы приложений
5.1.1. Цель
5.1.2. Оптимизация общего случая
5.1.3. Наблюдаемость
5.1.4. Нотация «О-большое»
5.2. Методы повышения производительности приложений
5.2.1. Выбор размеров блоков ввода/вывода
5.2.2. Кэширование
5.2.3. Буферизация
5.2.4. Опрос
5.2.5. Конкурентность и параллелизм
5.2.6. Неблокирующий ввод/вывод
5.2.7. Привязка к процессору
5.2.8. Мантры производительности
5.3. Языки программирования
5.3.1. Компилируемые языки
5.3.2. Интерпретируемые языки
5.3.3. Виртуальные машины
5.3.4. Сборка мусора
5.4. Методология
5.4.1. Профилирование процессора
5.4.2. Анализ времени ожидания вне процессора
5.4.3. Анализ системных вызовов
5.4.4. Метод USE
5.4.5. Анализ состояния потока
5.4.6. Анализ блокировок
5.4.7. Настройка статической производительности
5.4.8. Распределенная трассировка
5.5. Инструменты наблюдения
5.5.1. perf
5.5.2. profile
5.5.3. offcputime
5.5.4. strace
5.5.5. execsnoop
5.5.6. syscount
5.5.7. bpftrace
5.6. Проблемы
5.6.1. Отсутствие символов
5.6.2. Отсутствие стеков
5.7. Упражнения
5.8. Ссылки
Глава 6. Процессоры
6.1. Терминология
6.2. Модели
6.2.1. Архитектура процессора
6.2.2. Кэш-память процессора
6.2.3. Очереди на выполнение
6.3. Понятия
6.3.1. Тактовая частота
6.3.2. Инструкции
6.3.3. Вычислительный конвейер
6.3.4. Ширина инструкций
6.3.5. Размеры инструкций
6.3.6. SMT
6.3.7. IPC, CPI
6.3.8. Потребление
6.3.9. Время в режиме пользователя/ядра
6.3.10. Насыщенность
6.3.11. Вытеснение
6.3.12. Инверсия приоритета
6.3.13. Несколько процессов, несколько потоков
6.3.14. Размер слова
6.3.15. Оптимизации компилятора
6.4. Архитектура
6.4.1. Аппаратное обеспечение
6.4.2. Программное обеспечение
6.5. Методология
6.5.1. Метод инструментов
6.5.2. Метод USE
6.5.3. Определение характеристик рабочей нагрузки
6.5.4. Профилирование
6.5.5. Анализ тактов
6.5.6. Мониторинг производительности
6.5.7. Статическая настройка производительности
6.5.8. Настройка приоритетов
6.5.9. Управление ресурсами
6.5.10. Привязка к процессору
6.5.11. Микробенчмаркинг
6.6. Инструменты наблюдения
6.6.1. uptime
6.6.2. vmstat
6.6.3. mpstat
6.6.4. sar
6.6.5. ps
6.6.6. top
6.6.7. pidstat
6.6.8. time, ptime
6.6.9. turbostat
6.6.10. showboost
6.6.11. pmcarch
6.6.12. tlbstat
6.6.13. perf
6.6.14. profile
6.6.15. cpudist
6.6.16. runqlat
6.6.17. runqlen
6.6.18. softirqs
6.6.19. hardirqs
6.6.20. bpftrace
6.6.21. Другие инструменты
6.7. Методы визуализации
6.7.1. Тепловая карта потребления
6.7.2. Тепловая карта с субсекундным смещением
6.7.3. Флейм-графики
6.7.4. FlameScope
6.8. Эксперименты
6.8.1. Ad hoc
6.8.2. SysBench
6.9. Настройка
6.9.1. Параметры компилятора
6.9.2. Приоритет и класс планирования
6.9.3. Параметры планировщика
6.9.4. Режимы масштабирования частоты
6.9.5. Состояния энергопотребления
6.9.6. Привязка к процессору
6.9.7. Исключительные процессорные наборы
6.9.8. Управление ресурсами
6.9.9. Параметры безопасной загрузки
6.9.10. Параметры процессора (настройка BIOS)
6.10. Упражнения
6.11. Ссылки
Глава 7. Память
7.1. Терминология
7.2. Основные понятия
7.2.1. Виртуальная память
7.2.2. Подкачка страниц
7.2.3. Подкачка страниц по требованию
7.2.4. Чрезмерное выделение памяти
7.2.5. Подкачка процессов
7.2.6. Использование кэша файловой системы
7.2.7. Потребление и насыщение
7.2.8. Распределители
7.2.9. Разделяемая память
7.2.10. Размер рабочего набора
7.2.11. Размер слова
7.3. Архитектура
7.3.1. Аппаратное обеспечение
7.3.2. Программное обеспечение
7.3.3. Адресное пространство процесса
7.4. Методология
7.4.1. Метод инструментов
7.4.2. Метод USE
7.4.3. Определение характеристик потребления памяти
7.4.4. Анализ тактов
7.4.5. Мониторинг производительности
7.4.6. Выявление утечек
7.4.7. Статическая настройка производительности
7.4.8. Управление ресурсами
7.4.9. Микробенчмаркинг
7.4.10. Уменьшение потребления памяти
7.5. Инструменты наблюдения
7.5.1. vmstat
7.5.2. PSI
7.5.3. swapon
7.5.4. sar
7.5.5. slabtop
7.5.6. numastat
7.5.7. ps
7.5.8. top
7.5.9. pmap
7.5.10. perf
7.5.11. drsnoop
7.5.12. wss
7.5.13. bpftrace
7.5.14. Другие инструменты
7.6. Настройка
7.6.1. Настраиваемые параметры
7.6.2. Несколько размеров страниц
7.6.3. Распределители
7.6.4. Привязка NUMA
7.6.5. Управление ресурсами
7.7. Упражнения
7.8. Ссылки
Глава 8. Файловые системы
8.1. Терминология
8.2. Модели
8.2.1. Интерфейсы файловых систем
8.2.2. Кэш файловой системы
8.2.3. Кэш второго уровня
8.3. Основные понятия
8.3.1. Задержки в файловой системе
8.3.2. Кэширование
8.3.3. Произвольный и последовательный ввод/вывод
8.3.4. Предварительная выборка
8.3.5. Упреждающее чтение
8.3.6. Кэширование с отложенной записью
8.3.7. Синхронная запись
8.3.8. Прямой и низкоуровневый ввод/вывод
8.3.9. Неблокирующий ввод/вывод
8.3.10. Файлы, отображаемые в память
8.3.11. Метаданные
8.3.12. Логический и физический ввод/вывод
8.3.13. Неравноценность операций
8.3.14. Специальные файловые системы
8.3.15. Доступ к отметкам времени
8.3.16. Емкость
8.4. Архитектура
8.4.1. Стек ввода-вывода файловой системы
8.4.2. VFS
8.4.3. Кэши файловой системы
8.4.4. Особенности файловых систем
8.4.5. Типы файловых систем
8.4.6. Тома и пулы
8.5. Методология
8.5.1. Анализ дисков
8.5.2. Анализ задержек
8.5.3. Определение характеристик рабочей нагрузки
8.5.4. Мониторинг производительности
8.5.5. Статическая настройка производительности
8.5.6. Настройка кэша
8.5.7. Разделение рабочей нагрузки
8.5.8. Микробенчмаркинг
8.6. Инструменты наблюдения
8.6.1. mount
8.6.2. free
8.6.3. top
8.6.4. vmstat
8.6.5. sar
8.6.6. slabtop
8.6.7. strace
8.6.8. fatrace
8.6.9. LatencyTOP
8.6.10. opensnoop
8.6.11. filetop
8.6.12. cachestat
8.6.13. ext4dist (xfs, zfs, btrfs, nfs)
8.6.14. ext4slower (xfs, zfs, btrfs, nfs)
8.6.15. bpftrace
8.6.17. Другие инструменты
8.6.18. Визуализация
8.7. Эксперименты
8.7.1. Ad hoc
8.7.2. Инструменты микробенчмаркинга
8.7.3. Очистка кэша
8.8. Настройка
8.8.1. Функции
8.8.2. ext4
8.8.3. ZFS
8.9. Упражнения
8.10. Ссылки
Глава 9. Диски
9.1. Терминология
9.2. Модели
9.2.1. Простой диск
9.2.2. Кэширующие диски
9.2.3. Контроллер
9.3. Основные понятия
9.3.1. Измерение времени
9.3.2. Масштаб времени
9.3.3. Кэширование
9.3.4. Произвольный и последовательный ввод/вывод
9.3.5. Соотношение операций чтения и записи
9.3.6. Размер ввода/вывода
9.3.7. Несопоставимость количества операций в секунду
9.3.8. Дисковые команды, не связанные с передачей данных
9.3.9. Потребление
9.3.10. Насыщенность
9.3.11. Ожидание ввода/вывода
9.3.12. Синхронный и асинхронный ввод/вывод
9.3.13. Дисковый ввод/вывод и ввод/вывод в приложении
9.4. Архитектура
9.4.1. Типы дисков
9.4.2. Интерфейсы
9.4.3. Типы хранилищ
9.4.4. Стек дискового ввода/вывода в операционной системе
9.5. Методология
9.5.1. Метод инструментов
9.5.2. Метод USE
9.5.3. Мониторинг производительности
9.5.4. Определение характеристик рабочей нагрузки
9.5.5. Анализ задержек
9.5.6. Статическая настройка производительности
9.5.7. Настройка кэширования
9.5.8. Управление ресурсами
9.5.9. Микробенчмаркинг
9.5.10. Масштабирование
9.6. Инструменты наблюдения
9.6.1. iostat
9.6.2. sar
9.6.3. PSI
9.6.4. pidstat
9.6.5. perf
9.6.6. biolatency
9.6.7. biosnoop
9.6.8. iotop, biotop
9.6.9. biostacks
9.6.10. blktrace
9.6.11. bpftrace
9.6.12. MegaCli
9.6.13. smartctl
9.6.14. Журналирование SCSI
9.6.15. Другие инструменты
9.7. Визуализация
9.7.1. Линейные диаграммы
9.7.2. Диаграммы рассеяния задержек
9.7.3. Тепловые карты задержек
9.7.4. Тепловые карты смещений
9.7.5. Тепловые карты потребления
9.8. Эксперименты
9.8.1. Ad hoc
9.8.2. Пользовательские генераторы нагрузки
9.8.3. Инструменты микробенчмаркинга
9.8.4. Пример произвольного чтения
9.8.5. ioping
9.8.6. fio
9.8.7. blkreplay
9.9. Настройка
9.9.1. Параметры операционной системы
9.9.2. Настраиваемые параметры дисковых устройств
9.9.3. Настраиваемые параметры контроллера диска
9.10. Упражнения
9.11. Ссылки
Глава 10. Сеть
10.1. Терминология
10.2. Модели
10.2.1. Сетевой интерфейс
10.2.2. Контроллер
10.2.3. Стек протоколов
10.3. Основные понятия
10.3.1. Сети и маршрутизация
10.3.2. Протоколы
10.3.3. Инкапсуляция
10.3.4. Размер пакета
10.3.5. Задержка
10.3.6. Буферизация
10.3.7. Очередь запросов на подключение
10.3.8. Согласование интерфейса
10.3.9. Предотвращение перегрузки
10.3.10. Потребление
10.3.11. Локальные подключения
10.4. Архитектура
10.4.1. Протоколы
10.4.2. Оборудование
10.4.3. Программное обеспечение
10.5. Методология
10.5.1. Метод инструментов
10.5.2. Метод USE
10.5.3. Определение характеристик рабочей нагрузки
10.5.4. Анализ задержек
10.5.5. Мониторинг производительности
10.5.6. Перехват пакетов
10.5.7. Анализ TCP
10.5.8. Статическая настройка производительности
10.5.9. Управление ресурсами
10.5.10. Микробенчмаркинг
10.6. Инструменты наблюдения
10.6.1. ss
10.6.2. ip
10.6.3. ifconfig
10.6.4. nstat
10.6.5 netstat
10.6.6. sar
10.6.7. nicstat
10.6.8. ethtool
10.6.9. tcplife
10.6.10. tcptop
10.6.11. tcpretrans
10.6.12. bpftrace
10.6.13. tcpdump
10.6.14. Wireshark
10.6.15. Другие инструменты
10.7. Эксперименты
10.7.1. ping
10.7.2. traceroute
10.7.3. pathchar
10.7.4. iperf
10.7.5. netperf
10.7.6. tc
10.7.7. Другие инструменты
10.8. Настройка
10.8.1. Общесистемные
10.8.2. Параметры сокетов
10.8.3. Конфигурация
10.9. Упражнения
10.10. Ссылки
Глава 11. Облачные вычисления
11.1. Основы
11.1.1. Типы экземпляров
11.1.2. Масштабируемая архитектура
11.1.3. Планирование мощности
11.1.4. Хранилище
11.1.5. Мультиарендность
11.1.6. Оркестровка (Kubernetes)
11.2. Виртуализация оборудования
11.2.1. Реализация
11.2.2. Оверхед
11.2.3. Управление ресурсами
11.2.4. Наблюдаемость
11.3. Виртуализация операционной системы
11.3.1. Реализация
11.3.2. Оверхед
11.3.3. Управление ресурсами
11.3.4. Наблюдаемость
11.4. Легковесная виртуализация
11.4.1. Реализация
11.4.2. Оверхед
11.4.3. Управление ресурсами
11.4.4. Наблюдаемость
11.5. Другие типы виртуализации
11.6. Сравнение
11.7. Упражнения
11.8. Ссылки
Глава 12. Бенчмаркинг
12.1. Основы
12.1.1. Причины
12.1.2. Эффективный бенчмаркинг
12.1.3. Проблемы бенчмаркинга
12.2. Типы бенчмаркинга
12.2.1. Микробенчмаркинг
12.2.2. Моделирование
12.2.3. Воспроизведение
12.2.4. Отраслевые стандарты
12.3. Методология
12.3.1 Пассивный бенчмаркинг
12.3.2. Активный бенчмаркинг
12.3.3. Профилирование процессора
12.3.4. Метод USE
12.3.5. Определение характеристик рабочей нагрузки
12.3.6. Собственный бенчмаркинг
12.3.7. Пиковая нагрузка
12.3.8. Проверка правильности
12.3.9. Статистический анализ
12.3.10. Чек-лист бенчмаркинга
12.4. Вопросы о бенчмаркинге
12.5. Упражнения
12.6. Ссылки
Глава 13. perf
13.1. Обзор подкоманд
13.2. Однострочные сценарии
13.3. События perf
13.4. Аппаратные события
13.4.1. Дискретная выборка
13.5. Программные события
13.6. События точек трассировки
13.7. События зондов
13.7.1. kprobes
13.7.2. uprobes
13.7.3. USDT
13.8. perf stat
13.8.1. Параметры
13.8.2. Интервальные статистики
13.8.3. Баланс между процессорами
13.8.4. Фильтрация событий
13.8.5. Теневые статистики
13.9. perf record
13.9.1. Параметры
13.9.2. Профилирование процессора
13.9.3. Обход стека
13.10. perf report
13.10.1. TUI
13.10.2. STDIO
13.11. perf script
13.11.1. Флейм-графики
13.11.2. Сценарии обработки трассировок
13.12. perf trace
13.12.1. Версии ядра
13.13. Другие команды
13.14. Документация perf
13.15. Ссылки
Глава 14. Ftrace
14.1. Обзор возможностей
14.2. tracefs (/sys)
14.2.1. Содержимое tracefs
14.3. Профилировщик функций
14.4. Трассировщик function
14.4.1. Использование файла trace
14.4.2. Использование файла trace_pipe
14.4.3. Параметры
14.5. Точки трассировки
14.5.1. Фильтрация
14.5.2. Триггеры
14.6. Зонды kprobes
14.6.1. Трассировка событий
14.6.2. Аргументы
14.6.3. Возвращаемые значения
14.6.4. Фильтры и триггеры
14.6.5. Профилировщик kprobe
14.7. Зонды uprobes
14.7.1. Трассировка событий
14.7.2. Аргументы и возвращаемые значения
14.7.3. Фильтры и триггеры
14.7.4. Профилировщик uprobe
14.8. Трассировщик function_graph
14.8.1. Трассировка графа
14.8.2. Параметры
14.9. Трассировщик hwlat
14.10. Триггеры hist
14.10.1. Гистограмма с единственным ключом
14.10.2. Поля
14.10.3. Модификаторы
14.10.4. Фильтры PID
14.10.5. Гистограмма с несколькими ключами
14.10.6 Трассировки стека в роли ключей
14.10.7. Синтетические события
14.11. trace-cmd
14.11.1. Обзор подкоманд
14.11.2. Однострочные сценарии для trace-cmd
14.11.3. Сравнение trace-cmd и perf(1)
14.11.4. trace-cmd function_graph
14.11.5. KernelShark
14.11.6. Документация для trace-cmd
14.12. perf ftrace
14.13. perf-tools
14.13.1. Покрытие инструментами
14.13.2. Специализированные инструменты
14.13.3. Многоцелевые инструменты
14.13.4. Однострочные сценарии для perf-tools
14.13.5. Пример
14.13.6. Сравнение perf-tools и BCC/BPF
14.13.7. Документация
14.14. Документация для Ftrace
14.15. Ссылки
Глава 15. BPF
15.1. BCC
15.1.1. Установка
15.1.2. Покрытие инструментами
15.1.3. Специализированные инструменты
15.1.4. Многоцелевые инструменты
15.1.5. Однострочные сценарии
15.1.6. Пример многоцелевого инструмента
15.1.7. Сравнение BCC и bpftrace
15.1.8. Документация
15.2. bpftrace
15.2.1. Установка
15.2.2. Инструменты
15.2.3. Однострочные сценарии
15.2.4. Программирование
15.2.5. Справочник
15.2.6. Документация
15.3. Ссылки
Глава 16. Пример из практики
16.1. Необъяснимый выигрыш
16.1.1. Постановка задачи
16.1.2. Стратегия анализа
16.1.3. Статистики
16.1.4. Конфигурация
16.1.5. Счетчики PMC
16.1.6. Программные события
16.1.7. Трассировка
16.1.8. Заключение
16.2. Дополнительная информация
16.3. Ссылки
Приложение A. Метод USE: Linux
Приложение B. Краткий справочник по sar
Приложение C. Однострочные сценарии для bpftrace
Приложение D. Решения некоторых упражнений
Приложение E. Производительность систем, кто есть кто
Глоссарий