Чтение заметок

Концепции

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

Прямой ввод-вывод: использовать файловую систему, но не использовать кеш файловой системы. Используется приложениями, которые выполняют резервное копирование файловой системы, чтобы избежать загрязнения кэша файловой системы данными, которые будут считаны только один раз.

Файлы, отображаемые в памяти: отображать файлы в адресное пространство процесса и напрямую обращаться к смещению памяти. Это позволяет избежать накладных расходов на выполнение системных вызовов и переключение контекста, возникающих при вызове системных вызовов read() и записи для доступа к данным файла. Также можно избежать двойного копирования данных, если ядро ​​поддерживает прямое копирование файлового буфера данных в адресное пространство процесса. Недостатком использования сопоставления в многопроцессорных системах могут быть накладные расходы на синхронизацию каждого MMU ЦП, в частности, перекрестные вызовы ЦП для удаления сопоставлений (удаление TLB).

Логические метаданные: статистика файлов, обновления меток времени и т. д.

Физические метаданные: метаданные макета на диске, необходимые для записи всей информации о файловой системе — суперблоков, инодов, блоков указателей данных и списков свободных мест.

Архитектура

VFS: интерфейс виртуальной файловой системы обеспечивает общий интерфейс для различных типов файловых систем.

       Application
          POSIX
|             System Libraries
   [     System Calls      ] 
    |              VFS
  raw/io           File System
    |              Volume Manager
      Disk Device Subsystem
           Disk Devices

Кэш

Буферный кеш: хранится в кеше страниц, начиная с Linux 2.4.

Кэш страниц: кэширует страницы виртуальной памяти, включая страницы файловой системы.

Кэш Dentry: запоминает сопоставление от записи каталога до узлов VFS.

Кэш инодов: этот кеш содержит иноды VFS.

Функции файловой системы

Блок и экстент

Файловые системы на основе блоков хранят данные в блоках фиксированного размера.

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

Ведение журнала

Журнал файловой системы записывает изменения в файловой системе, чтобы в случае сбоя системы изменения можно было воспроизвести атомарно.

Методология

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

Анализ диска

Распространенная ошибка: игнорировать файловую систему и вместо этого сосредоточиться на производительности диска. Как правило, это верно для более простой файловой системы и меньшего размера кешей, но при этом могут быть упущены целые классы проблем, поскольку в настоящее время FS имеет все большее значение.

Анализ задержки

4 уровня: Приложение -> Интерфейс системного вызова -> VFS -> Верхняя часть файловой системы.

Характеристика рабочей нагрузки

  • Частота операций и виды операций.
  • Пропускная способность файлового ввода-вывода
  • Размер ввода-вывода файла
  • Соотношение чтения/записи
  • Синхронный режим записи
  • Случайный и последовательный доступ к смещению файла

Контрольный список:

  • Какова частота попаданий в кэш fs?
  • какова емкость кеша fs и текущее использование?
  • какие еще кеши присутствуют (каталог, инод, буфер) и какова их статистика?
  • какие приложения или пользователи используют fs?
  • к каким файлам и каталогам осуществляется доступ? Создал и удалил?
  • были ли обнаружены какие-либо ошибки? это было из-за недействительных запросов или проблем с fs?
  • почему выдается fs IO (путь вызова на уровне пользователя)?
  • в какой степени приложение fs IO синхронно?
  • каково распределение времени прибытия IO.

Мониторинг

Ключевые показатели производительности файловой системы:

  • скорость работы
  • задержка операции

Отслеживание событий

В крайнем случае, но увеличивает нагрузку на производительность из-за захвата и сохранения деталей.

Анализ

Инструменты

$strace -ttT -p 123
TIME_STAMP read(12, "asdas"..., 65536) = 65536 <system call time>

pi@pi-aw:~$ free -m # m means in megabytes
     total   used        free      shared  buff/cache   available
Mem:  7924   895        6038           4         990        6767
Swap: 2047   0          2047

Тюнинг

Вызовы приложений

posix_fadvise(int fd, off_t offset, off_t len, int advice);

Консультация включает в себя:

POSIX_FADV_SEQUENTIAL: доступ к диапазону данных будет осуществляться последовательно.

POSIX_FADV_RANDOM: доступ будет произвольным.

POSIX_FADV_NOREUSE: не будет использоваться повторно.

POSIX_FADV_WILLNEED: будет использоваться снова в ближайшем будущем.

POSIX_FADV_DONTNEED: в ближайшем будущем использоваться не будет.

Другой библиотечный вызов для работы с отображением памяти:

int madvise(void *addr, size_tlength, int advice);

MADV_RANDOM

MADV_SEQUENTIAL

MADV_WILLNEED

MADV_DONTNEED

tune2fs/e2fsck

tune2fs -I dir_index /dev/hdX // uses hashed B tress to speed up lookups in large directories.
e2fsck -D -f /dev/hdX // reindex directories in a fs.