igor@0: \section{Приоритезация ввода/вывода в Xen} igor@0: igor@0: \subsection{Приоритеты для использования Disk I/O} igor@0: \subsubsection{ionice} igor@0: С выходом CFQ v3 в Linux 2.6.13 появилась возможность выставлять приоритеты использования дисковой подсистемы для процессов, чего раньше так не хватало. Подобно утилите nice для назначение приоритетов использования процессора появилась утилита ionice. igor@0: igor@0: Синтаксис команды прост: igor@0: igor@0: \begin{verbatim} igor@0: ionice -c класс -n приоритет -p PID igor@0: \end{verbatim} igor@0: igor@0: Класс: igor@0: igor@0: \begin{itemize} igor@0: \item 3, Idle — Получает приоритет на использование жесткого диска только когда другие программы ничего не пишут. Приоритеты не используются. igor@0: \item 2, Best Effort — Класс по умолчанию. Доступные приоритеты [0-7]. igor@0: \item 1, Real Time — Даёт преимущественный доступ к диску процессу, несмотря на другие процессы. Доступные приоритеты [0-7]. igor@0: \end{itemize} igor@0: igor@0: \subsubsection{Приоритеты гостевых доменов} igor@0: Теперь вернемся к самому Xen. igor@0: После запуска гостевых систем по \textit{ps aux} можно видеть в квадратных скобках появившиеся драйвера блочных устройств xvd, после которых указан igor@0: ID гостевого домена. Приоритеты для этих процессов можно устанавливать igor@0: с помощью \textit{ionice}, точно также как и для всех остальных. igor@0: igor@0: \subsubsection{Эксперименты} igor@0: Проведем 2 эксперимента для операций чтения и записи. igor@0: igor@0: Выставим одной гостевой системе класс \textit{Real Time}, а второй — \textit{Idle}. igor@0: igor@0: Запустим одновременно \textit{dd} на обеих системах для записи небольшого файла. Конечно слово «одновременно» здесь весьма условно. igor@0: Для повышения точности лучше провести несколько измерений. igor@0: igor@0: \begin{verbatim} igor@0: %# dd if=/dev/zero of=/root/file.txt bs=1024 count=10240000 igor@0: \end{verbatim} igor@0: igor@0: В результате средняя скорость в первой гостевой системе -- 40Mb/sec, во второй -- 20Mb/sec. igor@0: igor@0: Другим экспериментом является операция тестирования скорости чтения диска с помощью \textit{hdparm}: igor@0: igor@0: \begin{verbatim} igor@0: %# hdparm -t /dev/xvda igor@0: \end{verbatim} igor@0: igor@0: В результате в первом гостевом домене скорость — 25Mb/sec, во втором — 2Mb/sec. igor@0: igor@0: \subsubsection{Заключение} igor@0: Недостатком данного решения является отсутствие соответствующих опций в конфигурационном файле гостевых доменов Xen, igor@0: что означает, что при каждом старте домена необходимо устанавливаеть его приоритет заново. igor@0: igor@0: Следует обратить внимание, что данная возможность доступна только для CFQ. igor@0: igor@0: Проверьте, какой способ приоритезации используется: igor@0: igor@0: \begin{verbatim} igor@0: cat /sys/block/ИМЯ_ДИСКА/queue/scheduler igor@0: \end{verbatim} igor@0: igor@0: Активный sheduler должен быть в квадратных скобках. igor@0: Например: igor@0: igor@0: \begin{verbatim} igor@0: $ cat /sys/block/sda/queue/scheduler igor@0: noop anticipatory deadline [cfq] igor@0: \end{verbatim} igor@0: igor@0: \subsection{Дополнительная информация} igor@0: \begin{itemize} igor@0: \item Which is the fairest I/O scheduler of them all? (англ.) igor@0: \item Планировщики ввода/вывода в Linux igor@0: \item Choosing an I/O Scheduler for Red Hat® Enterprise Linux® 4 and the 2.6 Kernel (англ.) или на русском: Выбор планировщика ввода/вывода в Red Hat® Enterprise Linux® 4 и ядре версии 2.6 igor@0: \item CFQ IO Schedule и /proc/sys/{\dots} Или как уменьшить тормоза при интенсивной работе с диском igor@0: \end{itemize} igor@0: