Назад | Перейти на главную страницу

Как Linux обрабатывает одновременный дисковый ввод-вывод?

Когда сервер Linux обслуживает множество одновременных запросов на чтение множества разных файлов, он:

  1. Перейдите к File_1, прочтите весь файл, затем перейдите к File_2, прочтите весь файл, затем найдите File_3 и т. Д. И т. Д.

  2. Найдите File_1, прочтите его часть (до значения readahead?), Затем найдите File_2, прочтите его часть, затем вернитесь к File_1, где он остановился, прочитайте его, затем найдите File_3 и т. Д. и т.д

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

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

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

Что касается тюнинга. Если вы являетесь автором приложения, вы можете многое сделать. Вы можете выполнять большие последовательные операции ввода-вывода, когда можете, и использовать fsync () et.al. когда нужно быть уверенным, что данные на пластинах.

Если вы системный администратор и точно знаете, что запросы данных двух приложений резко скачут, и они пытаются читать файлы последовательно (например, у вас есть 2 DVD, перекодируемых параллельно), то да, увеличение опережения чтения должно помочь. В противном случае вам нужно будет взглянуть на свои шаблоны и размеры ввода-вывода, учесть ваш уровень RAID (если есть) и другие факторы, прежде чем выполнять какие-либо настройки. Посмотрите, в чем заключаются ваши настоящие узкие места, прежде чем приступить к настройке, может быть трудно угадать, что на самом деле ограничивает вашу систему.

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