, Архитектура и проектирование стека хранения Linux

Архитектура и проектирование стека хранения Linux

Мухаммад Умэр

 

Первая публикация на английском языке: Июль 2023

Ссылка на продукт: 280623

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

При подготовке этой книги были предприняты все усилия чтобы гарантировать точность представленной информации. Тем не менее, информация, содержащаяся в этой книге, продаётся без гарантии в явном или неявном виде. Ни авторы, ни Packt Publishing, ни их дилеры и дистрибьюторы не будут нести ответственность за любые убытки, вызванные или предположительно вызванные прямо или косвенно этой книгой.

Packt Publishing пыталась предоставить информацию о товарных знаках обо всех компаниях и продуктов, упомянутых в данной книге для надлежащего использования капиталов. Тем не менее, Packt Publishing не может гарантировать точность этой информации.

Опубликовано Packt Publishing Ltd.

Livery Place

35 Livery Street

Birmingham B3 2PB, UK

ISBN 978-1-83763-996-0

www.packtpub.com

2023-09-03

 Состав исполнителей

Автор
Мухаммад Умэр
Управляющий группой продуктов
Паван Рамчандани
Управляющий издания продукта
Прачи Савант
Старший редактор
Рансил Ребелло
Технический редактор
Арджун Варма
Литературный редактор
Safis Editing
Координатор проекта
Ашвин Харва
Корректор
Safis Editing
Составитель указателя
Пратик Широдкар
Технолог
Элишон Мендонка
Координатор маркетинга
Мэрилу Де Мелло

 Об авторе

Амми, Абу, Хаммаду, Шарджилю и Амне, которые пережили трудные времена из-за меня и научили меня значению жертвенности, терпения, упорного труда и настойчивости. Вы всегда были рядом со мной в достойные дни, а были ещё ближе в мои дурные дни.

Мои рецензенты - Боудьяян Чакрабарти (Боб), Сэм Ю и Анкит Рай — помогли мне глубже погрузиться в технические аспекты функций QRadar. Отдельное спасибо Бобу, который прошёл через все трудности в этом путешествии.

А также Ахаду, который в нашу жизнь привносит радость и нечто удивительное.

Эту книгу со всей своей любовью я посвящаю все вам.

Я твёрдо верю в силу обнародования. Данная книга это олицетворение максимума моих усилий, направленных на то, чтобы приняться за сложные темы, упростить их и представить наиболее широкой аудитории.

Мухаммад Умэр является системным инженером и инструктором с более чем шестилетним опытом работы с системами на базе Linux, проектированием и архитектурой высокой доступности (HA, high availability), настройкой операционных систем и лежащего в их основе оборудования для оптимальной производительности и анализа причин неработоспособности. Ему доставляет удовольствие быть в курсе последних событий из мира технологий и он является RHCA (Red Hat Certified Architect, сертифицированным архитектором Red Hat). Умэр - заядлый энтузиаст Linux, особое внимание уделяющий технологиям хранения данных. Именно эта страсть побудила его написать книгу на данную тему, опираясь на свой обширный опыт в данной области.

Я хочу выразить признательность тем людям, с которыми я работал на протяжении многих лет. Каждый из них так или иначе научил чему- то меня. Также я благодарен замечательной команде Packt за их поддержку на протяжении всего этого пути.

 О рецензенте

Прадип Рой Кандру это программист ядра Linux и он обладает большим опытом работы на различных уровнях Ядра. Работая как на технических должностях, так и на должностях разработчиков, его опорой была широкая база навыков и способность работы с разнообразными проектами. В академическом плане он занял 43-е место во Всеиндийском тесте на инженерные способности и обладает степенью магистра в области интернет- технологий, полученную на Факультете вычислительных наук Индийского института науки (IISc, Indian Institute of Science), Бангалор, Индия. Помимо рецензирования прочих технических книг, в качестве автора он работает над собственной будущей технической книгой. Он работал в компаниях IBM, India Software Labs, Veritas и Depik Technologies. Его текущий интерес включает обзоры eBPF.

 Содержание

Введение
Предисловие
Для кого эта книга
Что охватывает эта книга
Как получить максимум от данной книги
Выгрузите цветные изображения
Применяемые соглашения
Связаться
Поделитесь своими мыслями
Выгрузите бесплатную копию PDF этой книги
Часть 1. Окунаемся в Виртуальную файловую систему
Глава 1. Откуда всё начинается - Виртуальная файловая система
Технические требования
Разбираемся с хранением в современном ЦОД
Взаимодействие с хранилищем в Linux
Разбираемся с системными вызовами
Поясняем необходимость Виртуальной файловой системы
Описание VFS
Реализация интерфейса общей файловой системы через VFS
Заглядываем в исходный код
Отслеживание функций VFS
Поясняем философию всё является файлом
Выводы
Глава 2. Поясняем структуры данных VFS
Технические требования
Структуры данных в VFS
Inodes - индексация файлов и каталогов
Определение inode в самом ядре
Определение операций inode
Отслеживание данного файла на диске через inode
Способна ли файловая система исчерпать inode?
Записи каталога - соответствие inodes именам файлов
Кэш dentry
Состояния dentry
Операции dentry
Объекты файлов - представление открытых файлов
Файловые операции
Способен ли процесс исчерпать файловые дескрипторы?
Суперблоки - описание метаданных файловой системы
Операции суперблока в ядре
Привязка
Сумма четырёх структур
Страничный кэш
Считывание
Выводы
Глава 3. Изучаем реальные файловые системы под VFS
Технические требования
Галерея файловых систем Linux
Дневник файловой системы- понятие ведения журнала
Злободневный вопрос - влияет ли ведение журнала на производительность?
Занятный вариант файловых систем CoW
Расширенная файловая система
Блоки - общий язык файловых систем
А нет ли более действенного подхода к организации данных?
Структурная схема файловой системы Ext4
Суперблок
Блок данных и карта бит индексного дескриптора
Таблицы индексных дескрипторов
Дескрипторы групп
Зарезервированные блоки GDT
Режимы ведения журнала
Экстенты файловой системы
Политики выделения блоков
Изучение результата операции mkfs
Сетевая файловая система
Архитектура NFS
Сопоставление NFS с обычными блочными файловыми системами
FUSE - уникальный метод создания файловых систем
Выводы
Часть 2. Навигация по блочному уровню
Глава 4. Разбираемся с Блочным уровнем, Блочными устройствами и Структурами данных
Технические требования
Раскрываем роль блочного уровня
Определение блочных устройств
Определение характеристик блочных устройств
Взглянем на представление блочных устройств
Взглянем на структуры данных блочного уровня
Функция register_blkdev (регистрация блочного устройства)
Структура block_device (представление блочных устройств)
Структура gendisk (представление физических дисков)
Структура buffer_head (представление блоков в памяти)
Структура bio (представление активного ввода/ вывода блоков)
Структура bio_vec (представление вектора ввода/ вывода)
Запросы и очереди запросов (представление отложенных запросов ввода/ вывода)
Путешествие запроса ввода/ вывода по блочному уровню
Выводы
Глава 5. Разбираемся с Блочным уровнем, Множественной очередью и Сопоставлением устройств
Технические требования
Взглянем на задачи для очередей единичных запросов
Разбираемся с инфраструктурой блочного ввода/ вывода Множественной очереди
Взглянем на структуры данных
Рассмотрим инфраструктуру Сопоставления устройств
Взглянем на Сопоставляемое устройство
Взглянем на Таблицу сопоставлений
Взглянем на Целевое устройство
Взглянем на механизмы кэширования множества уровней на уровне блоков
Выводы
Глава 6. Разбираемся с обработкой ввода/ вывода и планированием на блочном уровне
Технические требования
Разбираемся с методиками обработки ввода/ вывода на блочном уровне
Сортировка
Слияние
Сращивание
Перекрытие
Объясняем планировщики ввода/ вывода Linux
Планировщик времени жизни MQ - гарантия момента начала обслуживания
Бюджетно справедливая организация очередей - предоставление пропорциональных совместных дисковых ресурсов
Kyber - приоритезация пропускной способности
None - минимальные затраты на планирование
Обсуждаем головоломку планирования
Выводы
Часть 3. Спускаемся на Физический уровень
Глава 7. Подсистема SCSI
Технические требования
Модель драйвера устройства
Объясняем подсистему SCSI
Архитектура SCSI
Верхний уровень
Промежуточный уровень
Нижний уровень
Модель клиента и сервера
Адресация устройства
Основные структуры данных
Соединение с устройствами SCSI
Взаимодействие между SCSI и блочным уровнем
Выводы
Глава 8. Иллюстрация структуры физического носителя
Технические требования
Разбираемся с механическими жёсткими приводами
Рассматриваем физическую схему и адресацию
Смотрим на плохие секторы
Взглянем на производительность жёсткого привода
Разбираемся с отставанием механических приводов
Объясняем архитектуру твердотельных приводов
Рассматриваем физическую схему и адресацию
Рассматриваем считывание и запись
Стирание, сборка мусора и иллюзия доступного пространства
Взглянем на выравнивание износа
Посмотрим на управление плохими блоками
Рассмотрим производительность SSD
Разбираемся где отстают SSD
Разбираемся с износоустойчивостью привода
Переделываем SSD при помощи NVMe
Выводы
Часть 4. Анализ производительности хранилища и устранение неисправностей
Глава 9. Анализ производительности физического хранилища
Технические требования
Как мы выполняем оценку производительности?
Разбираемся с топологией хранилища
Анализ физического хранилища
Разбираемся с временем обслуживания диска
Шаблоны доступа к диску
Определение соотношения считываний/ записей и размера ввода/ вывода
Кэш диска
IOPS и пропускная способность
Глубина очереди
Определение занятости диска
Ожидание ввода/ вывода
Инструменты анализа применения ввода/ вывода диска
Установление базового уровня при помощи top
Утилита iotop
Утилита iostat
Производительность Co-Pilot
Команда vmstst
Индекс Pressure Stall
Выводы
Глава 10. Анализ файловых систем и блочного уровня
Технические требования
Исследование файловых систем и блочного уровня
Различные типы ввода, вывода файловой системы
Что вызывает латентность файловой системы?
Идентификация целевых уровней
Поиск верных инструментов
Отслеживание вызовов приложения
Отслеживание вызовов VFS
Анализ использования кэша
Анализ файловых систем
Анализ блочного ввода/ вывода
Суммируем свой инструментарий
Выводы
Глава 11. Тонкая настройка стека ввода/ вывода
Технические требования
Как воздействует на ввод/ вывод использование памяти
Настройка подсистемы памяти
Применение непосредственного ввода/ вывода
Контроль частоты ввода/ вывода
Настройка файловой системы
Размер блока
Выравнивание ввода/ вывода файловой системы
Выравнивание ввода/ вывода LVM
Ведение журнала
Барьеры
Временные метки
Упреждающее считывание
Отказ от неиспользуемых блоков
Выбор верного планировщика
Выводы
Указатель

 Предисловие

Основное преимущество операционных систем с открытым исходным кодом, таких как Linux, состоит в том, что кто угодно способен погрузиться и сорвать покровы с того, как они устроены под капотом. Даже несмотря на астрономические достижения в разработке программного обеспечения ядро Linux остаётся одним из самых сложных фрагментов кода. Разработчики, программисты и потенциальные хакеры ядра постоянно погружаются в код ядра и предпринимают попытки новых функциональных возможностей. Любители и энтузиасты вроде меня пытаются разобраться и разгадать тайны.

В качестве такого энтузиаста я потратил немало времени на изучение тонкостей стека хранения Linux. От простых жёстких дисков до сложных сетевых систем хранения данных, Linux лежит в основе многих сложнейших в мире технологий хранения данных. За последние несколько лет мне довелось поработать над Linux и рядом технологий хранения данных, что пробудило во мне интерес к данной области. Эта книга является результатом такого исследования. Я попробовал разделить все уровни стека хранения Linux дабы как все они работают в унисон. Моя цель состоит в том, чтобы поделиться тем что я узнал с теми, кто разделяет моё увлечение этим вопросом.

Данная книга являет собой глубокий и концептуальный обзор стека хранения данных Linux. Она охватывает все основные составляющие стека и включает углублённый и подробный анализ собственно подсистемы хранения и её архитектуры, слоя виртуальной файловой системы, разнообразных файловых систем и отличий в их реализации, блочного уровня, множественности очередей и инфраструктур {подсистемы ядра} Соответствия устройств (device mapper), планирования и физических уровней. В ней также рассматриваются различные вопросы, относящиеся к анализу производительности, тонкой настройке и устранению неполадок.

Я уверен что всякий желающий расширить своё понимание Linux и его среды хранения найдёт информативной и полезной данную книгу.

 Для кого эта книга

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

 Что охватывает эта книга

Глава 1. Откуда всё начинается - Виртуальная файловая система предоставляет некое введение в VFS (virtual filesystem, виртуальную файловую систему) ядра Linux. Данная глава пояснит ключевую роль VFS в общем стеке ввода/ вывода и даёт чёткое концептуальное понимание VFS, ибо именно она выступает отправной точкой запроса на ввод, вывод в Linux.

Глава 2. Поясняем структуры данных VFS знакомит с различными применяемыми в VFS в ядре структурами данных. Будут пояснено применение таких структур ядра, как индексные дескрипторы (inode), записи каталогов и файловые объекты для хранения метаданных файлов, каталогов и открытых файлов. Кроме того, также будет рассмотрен метод, при помощи которого структура суперблока позволяет ядру записывать характеристики файловой системы. Наконец, будет разъяснён механизм кэширования страниц в ядре.

Глава 3. Изучаем реальные файловые системы под VFS вводит понятие файловой системы в Linux. Будет объяснена одна из наиболее популярных файловых систем на основе блоков в Linux, расширенная файловая система. Кроме того, подробно будут обсуждаться важные понятия файловой системы, такие как ведение журналов и копирование- записью. Данная глава также окунётся в имеющиеся отличия между файловым и блочным вводом/ выводом и изучит сетевую файловую систему. Наконец, будет введено понятие файловых систем пространства пользователя.

Глава 4. Разбираемся с Блочным уровнем, Блочными устройствами и Структурами данных представляет введение в блочный уровень ядра. Данная глава поясняет собственно понятие блочных устройств и того в чём они отличаются от символьных устройств, а также охватывает самые основные структуры данных на таком блочном уровне.

Глава 5. Разбираемся с Блочным уровнем, Множественной очередью и Сопоставлением устройств вводит инфраструктуру Соответствия устройств (device mapper, dm) и механизм очередей блочного ввода/ вывода со множеством очередей в современных устройствах хранения. Далее поясняется собственно роль подсистемы Соответствия устройств при создании основы таких функциональных возможностей как LVM.

Глава 6. Разбираемся с обработкой ввода/ вывода и планированием на блочном уровне обсуждает различные механизмы обработки ввода/ вывода и планировщики ввода/ вывода в самом ядре. В плане того как они обрабатываются на блочном уровне, обсуждаются такие операции как слияние, сращивание и подключение. Также подробно поясняются поддерживаемые в ядре Linux различные планировщики ввода/ вывода, причём совместно с отличиями в их логике работы.

Глава 7. Подсистема SCSI сосредоточена на подсистеме SCSI в Linux и её многоуровневой архитектуре. Данная глава даст разъяснения многоуровневой архитектуры SCSI, механизма адресации устройств SCSI и основных структур данных на самом уровне SCSI.

Глава 8. Иллюстрация структуры физического носителя поясняет отличия в доступных в наши дни различных носителях хранения. Сопоставляются традиционные механические приводы, твердотельные устройства и новый интерфейс NVMe.

Глава 9. Анализ производительности физического хранилища охватывает анализ производительности и характеристики подсистемы хранения. Эта глава представляет различные метрики, которые могут применяться для доступа к значению производительности физического хранилища. Далее обсуждаются различные инструменты и механизмы, которые могут применяться для замеров производительности хранилища.

Глава 10. Анализ файловых систем и блочного уровня сосредотачивается на тех методиках, которые могут применяться для анализа значения производительности блочного уровня и файловых систем. Данная глава объяснит различные типы ввода/ вывода файловой системы, а также те стороны, которые оказывают воздействие на запрос ввода/ вывода некого приложения. Затем для выявления потенциальных узких мест на каждом из уровней рассматриваются разнообразные инструменты и механизмы отслеживания, например, коллекция компилятора Berkeley Packet Filter.

Глава 11. Тонкая настройка стека ввода/ вывода обсуждает некоторые рекомендуемые практические приёмы для настройки под потребности приложения лежащий в основе уровень хранения. Обсуждаются различные варианты, которые могут применяться для настройки производительности на каждом из имеющихся уровней.

 Как получить максимум от данной книги

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

 
Обсуждаемые в данной книге программные/ аппаратные средства Требования операционной системы

 

Linux

Необходимые команды по установке конкретных пакетов включены в раздел технических требований каждой из глав.

 Выгрузите файлы примеров кода

В богатстве каталога книг и видео, у нас имеются пакеты кода, доступные здесь. Сверяйтесь с ними!

 Выгрузите цветные изображения

Дополнительно мы предоставляем файл PDF, который снабжён цветными изображениями применяемых в данной книге снимков экранов/ схем. Вы можете выгрузит его здесь.

 Применяемые соглашения

Существует ряд текстовых соглашений, применяемых в этой книге.

CodeInText: Кодовые слова в тексте, имена таблиц базы данных, имена папок, имена файлов, расширения файлов, имена путей, модели URL-адресов, ввод пользователя, и регулировки Twitter обозначены таким текстом. Например: "Когда мы смотрим на устройства sd* в /dev, обратите внимание, что для блочных устройств значение типа файла отображается как b".

Блок кода устанавливается следующим образом:


struct block_device {
        sector_t                bd_start_sect;
        sector_t                bd_nr_sectors;
        struct disk_stats __percpu *bd_stats;
        unsigned long           bd_stamp;
        bool                    bd_read_only;
        dev_t                   bd_dev;
        atomic_t                bd_openers;
        struct inode *          bd_inode;
[……..]
 	   

Когда мы желаем обратить ваше внимание на определённую часть блока кода, соответствующие строка или элементы устанавливаются жирными:


struct block_device {
        sector_t                bd_start_sect;
        sector_t                bd_nr_sectors;
        struct disk_stats __percpu *bd_stats;
        unsigned long           bd_stamp;
        bool                    bd_read_only;
        dev_t                   bd_dev;
        atomic_t                bd_openers;
        struct inode *          bd_inode;
[……..]
 	   

Весь ввод в командной строке записываются следующим образом:


[root@linuxbox ~]# find / -inum 67118958 -exec ls -l {} \;
-rw-r--r-- 1 root root 220 Jun 15 22:30 /etc/hosts
[root@linuxbox ~]#
 	   

Новые термины и важные слова отображаются жирным шрифтом. Слова, которые вы видите на экране, например, в меню или блоках диалогов появляются в тексте следующим образом: "В случае каталога значение поля type в inode устанавливается как directory".

[Замечание]Замечание

Предостережения или важные замечания появляются в блоках подобных этому.

[Совет]Совет

Советы и ловкие приёмы возникают таким образом.

 Связаться

Мы всегда приветствуем обратную связь с читателями.

Общие замечания: просто пошлите электронное письмо на адрес feedback@packtpub.com с упоминанием заголовка книги в теме вашего сообщения. Если у вас имеются вопросы относительно любых сторон данной книги, пожалуйста, пошлите электронное письмо на адрес questions@packtpub.com.

Хотя мы и предприняли все меры чтобы обеспечить точность нашего содержимого, ошибки всё- таки возможны.Если вы обнаружили ошибку в нашей книге, мы будем признательны если вы сообщите об этом нам. Пожалуйста посетите www.packtpub.com/submit-errata, кликните по ссылке Submit Errata, и заполните полученную форму.

Пиратство: Если вы столкнётесь с какой-либо незаконной копией наших работ в любой форме в Интернете, пожалуйста, предоставьте нам сразу адрес местонахождения или имя веб-сайта, чтобы мы могли принять меры. Пожалуйста, обратитесь по адресу copyright@packtpub.com со ссылкой на такие материалы. {Прим. пер.: Согласно закону об авторском праве РФ, авторские права на перевод принадлежат авторам этого перевода. Данным переводом, по нашему мнению, мы служим популяризации основных стратегических направлений развития тем Packt. В случае наличия конструктивных предложений, готовы к тесному сотрудничеству.}

Когда вы заинтересованы в том чтобы стать автором: Если имеется некая тема, в которой вы обладаете опытом и вы заинтересованы либо в написании или содействии в книге, посетите, пожалуйста: http://authors.packtpub.com.

 Поделитесь своими мыслями

Когда вы прочтёте Architecture and Design of Linux Storage Stack, мы будем рады узнать ваше мнение! Кликните здесь чтобы сразу перейти на страницу обзора данной книги в Amazon и поделиться своим мнением.

Ваш отзыв важен для нас и всего технического сообщества и поможет нам убедиться, что мы предоставляем содержимое отличного качества.

 Выгрузите бесплатную копию PDF этой книги

Благодарим Вас за покупку этой книги!

Вы бы хотели читать её на ходу, однако вам невозможно носить везде свои печатные книги?

Что если ваша покупка eBook не совместима с используемым вами устройством?

Не беспокойтесь, теперь совместно с каждой книгой Packt вы бесплатно получаете PDF- версию этой книги без DRM.

Читайте где угодно, в любом месте, на любом устройстве. Находите, копируйте и вставляйте код из ваших любимых технических книг прямо в своё приложение.

На этом не заканчиваются все привилегии, вы можете ежедневно получать доступ к скидкам, информационным бюллетеням и отличному бесплатному содержанию в своём почтовом ящике.

Для получения таких преимуществ следуйте этим простым шагам:

  1. Отсканируйте этот QR код или посетите эту ссылку

     

    Рисунок 0-1


    https://packt.link/free-ebook/9781837639960

  2. Предоставьте доказательство вашей покупки

  3. Это всё! Мы отправим вам бесплатный PDF и прочие преимущества непосредственно в письме вам.