Может ли кто-нибудь указать мне на довольно полный справочник по системе ввода-вывода Linux, в первую очередь о том, как обрабатываются и сбрасываются все буферы и кеши?
Я так понимаю, что есть
Очевидно, это довольно запутанный аккаунт, но, надеюсь, он показывает именно ту информацию, которую я ищу. Я нашел внутреннюю документацию Linux довольно скудной; Может быть, есть хорошая книга, которая обо всем этом расскажет? Также было бы неплохо обсудить, где буферы копируются и передаются.
Вот это да. Очевидно, что для решения конкретной проблемы вам нужны очень конкретные детали. Или вы не понимаете, что на следующей неделе своей жизни вы только что подписались на исследования. Ознакомиться со всеми внутренними компонентами ядра для ваших тем будет сложно, поэтому вот что вам нужно сделать: спросить один, просто вопрос и начать отслеживание. Учитывая простой и понятный вопрос, на котором нужно сосредоточиться, есть много разработчиков, Список рассылки ядра Linux которые являются экспертами в объяснении того, почему внутренние компоненты ведут себя именно так в вашей ситуации. Это может занять несколько раундов, но они могут помочь.
Другой метод, который вы можете использовать, задавая вопрос с единственной целью, - это проследить сомнительную активность в ядре и узнать об отдельных частях, которых оно касается, а не просто пытаться понять все это. К счастью для вас, есть команда под названием ftrace
или даже SystemTap (stap
), с которого начнется ваше приключение. Многие разработчики ядра хотят, чтобы больше людей задавало важные вопросы об их ядре, и эти инструменты помогут им в этом. Linux Weekly News опубликовал несколько статей о ftrace
в последнее время: Трассировка: нет недостатка в вариантах (Июль 2008 г.), Взгляд на ftrace (Март 2009 г.), Отладка ядра с помощью ftrace - Часть 1 (Декабрь 2009 г.) и Часть 2 (Декабрь 2009 г.), Секреты функции Ftrace (Январь 2010 г.) и, наконец, старый добрый документация, поставляемая с ядром (2008).
Используя утилиту трассировки, вы узнаете о том, как ядро выполняет буферизацию, и о множестве других вещей, уникальных для вашего ядра, оборудования (контроллер, набор микросхем, ЦП, дисковая технология), файловой системы, планировщика ввода-вывода. В этом отношении каждый дистрибутив отличается. Если у вас есть сложные устройства хранения данных (кластер FS, SAN с корпоративным массивом, SSD), будьте готовы к тому, что вам тоже придется запачкать руки, изучая их особенности. Небольшое предупреждение о кластерных файловых системах: они часто включают компонент пользовательского пространства, который может вызывать множество неожиданных задержек, которые большинство из нас приписывают ядру, но они намного сложнее этого.
Безусловно, лучший текст, который мне удалось найти, был написан Нилом Брауном в 2009 году под названием «Шаблоны проектирования ядра Linux". Нил затрагивает множество тем, которые вы подняли, и многое другое.
Одно я знаю наверняка: этот ландшафт постоянно меняется, особенно в области планирования. Просто попытайтесь понять, что происходит в вашем конкретном уголке, и подсчитайте, что вам не нужно кодировать один из этих компонентов.