xg-scale
diff xen/resources.tex @ 4:253d66dd74bb
Добавлено подробное описание управления памятью домена и выделением устройств домену
author | Igor Chubin <igor@chub.in> |
---|---|
date | Sun Jul 06 23:27:46 2008 +0300 (2008-07-06) |
parents | 4730a0d07d88 |
children | 4a790b55d005 |
line diff
1.1 --- a/xen/resources.tex Tue Jul 01 16:16:44 2008 +0300 1.2 +++ b/xen/resources.tex Sun Jul 06 23:27:46 2008 +0300 1.3 @@ -1,6 +1,6 @@ 1.4 -\section{Распределение ресурсов межде доменами Xen} 1.5 +\section{Распределение ресурсов между доменами Xen} 1.6 1.7 -\subsection{Распределение процессорной мощности} 1.8 +\subsection{Процессор} 1.9 Виртуальные процессоры (VCPU) виртуальных машин автоматически распределяются 1.10 планировщиком между доступными физическими процессорами. 1.11 Назначать соответствие виртуального процесса реальному вручную не нужно. 1.12 @@ -8,7 +8,7 @@ 1.13 можно указать на каком процессоре будет выполняться виртуальный процессор. 1.14 Это делается с помощью команды \textbf{xm vcpu-pin}. 1.15 1.16 -Каждый домен характеризуется двумя числами -- весом (weight) и лимитом (cap). 1.17 +Каждый домен характеризуется двумя числами — \textit{весом} (weight) и \textit{лимитом} (cap). 1.18 1.19 Домен с весом 512 получает на том же хосте в два раза больше 1.20 процессорного времени чем домен с весом 256. 1.21 @@ -17,62 +17,240 @@ 1.22 1.23 Значение лимита (cap) может использоваться для того чтобы указать максимальную величину 1.24 процессорного времени, который может получить домен, даже в случае, если хост-система 1.25 -простаивает. Значение выражается в процентах: 100 это 1 физический процессор, 50 это половина процессора, 400 -- 4 процессора и т.д. 1.26 +простаивает. Значение выражается в процентах: 100 это 1 физический процессор, 50 это половина процессора, 400 — 4 процессора и т.д. 1.27 Значение по умолчанию равно 0, что означает, что верхнее ограничение отсутствует. 1.28 1.29 Значения лимита и веса можно просматривать и модифицировать с помощью команд: 1.30 1.31 \begin{itemize} 1.32 -\item \textbf{xm sched-credit -d domain} — показать значение вес (weight) и верх (cap) для домена 1.33 -\item \textbf{xm sched-credit -d domain -w weight} — установить вес равным \textbf{weight} 1.34 -\item \textbf{xm sched-credit -d domain -c cap} — установить верх равным \textbf{cap} 1.35 +\item \textbf{xm sched-credit -d domain} — показать значение вес (weight) и верх (cap) для домена; 1.36 +\item \textbf{xm sched-credit -d domain -w weight} — установить вес равным \textbf{weight}; 1.37 +\item \textbf{xm sched-credit -d domain -c cap} — установить верх равным \textbf{cap}. 1.38 \end{itemize} 1.39 1.40 -Для того чтобы эти значения сохранялись всегда для домена, 1.41 +Для того чтобы эти значения сохранялись и после перезапуска домена, 1.42 их нужно указать в конфигурационном файле 1.43 с помощью параметров: 1.44 \begin{itemize} 1.45 -\item cpu\_cap — верх (по умолчанию 0) 1.46 -\item cpu\_weight — вес (по умолчанию 256) 1.47 +\item \texttt{cpu\_cap} — верх (по умолчанию 0) 1.48 +\item \texttt{cpu\_weight} — вес (по умолчанию 256) 1.49 \end{itemize} 1.50 1.51 -\subsection{Распределение сетевых ресурсов} 1.52 -Распределение сетевых ресурсов между виртуальными машинами 1.53 -выполняется штатными средствами управления трафиком 1.54 -хост-системы. В частности, с помощью механизмов QoS. 1.55 +\subsection{Оперативная память} 1.56 +Объём памяти, выделяемой домену 0, задаётся как параметр \textbf{dom0\_mem} гипервизора Xen. 1.57 +В этом случае подразумевается, что объём памяти 1.58 +указан в килобайтах. 1.59 1.60 -\subsection{Распределение памяти} 1.61 -Объём памяти, выделяемой виртуальной машине, 1.62 -задаётся при её настройке в конфигурационном файле 1.63 -с помощью опции \textbf{mem}. 1.64 +Пример секции конфигурационного файла \texttt{menu.lst} загрузчика GRUB: 1.65 + 1.66 +\begin{verbatim} 1.67 +title Xen 3.2-1-i386 / Debian GNU/Linux, kernel 2.6.18-4-xen 1.68 +root (hd0,0) 1.69 +kernel /boot/xen-3.2-1-i386.gz dom0_mem=1200000 1.70 +module /boot/vmlinuz-2.6.18-4-xen-686 root=/dev/sda1 ro console=tty0 1.71 +module /boot/initrd.img-2.6.18-4-xen-686 1.72 +savedefault 1.73 +\end{verbatim} 1.74 + 1.75 +В этом примере домен 0 при старте будет в объёме оперативной 1.76 +памяти до 1.2G. 1.77 + 1.78 +По умолчанию (то есть, если параметр \texttt{dom0\_mem} не указан), 1.79 +домен 0 сначала получает весь доступный объём оперативной памяти, 1.80 +а потом, по мере необходимости, при старте других доменов, его начинают снижать. 1.81 +Это делает специально предназначенный для такой работы balloon-драйвер. 1.82 + 1.83 +Снижение будет производиться до величины \texttt{dom0-min-mem}, 1.84 +заданной в конфигурационном файле \texttt{/etc/xen/xend-config.sxp}. 1.85 +Здесь величина памяти указывается в мегабайтах. 1.86 +Если в качестве значения указан 0, 1.87 +уменьшение памяти домена 0 выполняться не будет. 1.88 + 1.89 +Пример настройки: 1.90 + 1.91 +\begin{verbatim} 1.92 +(dom0-min-mem 0) 1.93 +\end{verbatim} 1.94 + 1.95 +Объём памяти, выделяемой остальным доменам (то есть, виртуальным машинам), 1.96 +задаётся в их конфигурационных файлах с помощью параметра \texttt{memory}. 1.97 Параметр может быть указан с суффиксом B, K, M или G, что означает байты, килобайты, мегабайты или гигабайты соответственно. 1.98 -По умолчанию подразумевается, что объём памяти указан в килобайтах. 1.99 +По умолчанию подразумевается, что в конфигурационном файле домена объём памяти указан в мегабайтах. 1.100 1.101 -Значение памяти, выделяемой для домена 0, задаётся как параметр \textbf{dom0\_mem} гипервизора xen. 1.102 +Впоследствии этот размер можно изменить прямо для работающего 1.103 +домена при помощи команды: 1.104 1.105 -По результатам тестирования RHEL 5: 1.106 +\begin{verbatim} 1.107 +xm mem-set <domain-id> <mem> 1.108 +\end{verbatim} 1.109 + 1.110 +Подняться выше заданного в конфигурационном файле значения без дополнительных 1.111 +хитростей не получится. 1.112 +Самая простая хитрость — задавать при старте домена большое значение памяти, 1.113 +потом его сразу же снижать, а потом повышать по мере необходимости. 1.114 + 1.115 +Более правильный способ — использовать параметр конфигурационного файла домена \texttt{maxmem}, 1.116 +и передавать ядру гостевой системы (при условии что это Linux) параметр \texttt{mem}: 1.117 + 1.118 +\begin{verbatim} 1.119 +$ grep mem /etc/xen/dhcp 1.120 +memory = 128 1.121 +maxmem = 512 1.122 +extra = "mem=512M" 1.123 +\end{verbatim} 1.124 + 1.125 +Система при старте получает 128 MB ОЗУ, 1.126 +но она сможет корректно отработать увеличение 1.127 +памяти до 512 MB. 1.128 + 1.129 +\begin{verbatim} 1.130 +$ sudo xm create dhcp 1.131 +Using config file "/etc/xen/dhcp". 1.132 +Started domain dhcp 1.133 + 1.134 +$ sudo xm list 1.135 +Name ID Mem VCPUs State Time(s) 1.136 +Domain-0 0 1171 1 r----- 5274.5 1.137 +dhcp 8 128 1 -b---- 2.8 1.138 +\end{verbatim} 1.139 + 1.140 +Гостевая операционная система видит 128MB: 1.141 + 1.142 +\begin{verbatim} 1.143 +$ sudo xm console dhcp 1.144 +Debian GNU/Linux lenny/sid dhcp tty1 1.145 + 1.146 +dhcp login: root 1.147 +Password: 1.148 + 1.149 +dhcp:~# free 1.150 + total used free shared buffers cached 1.151 +Mem: 131220 33132 98088 0 1524 12204 1.152 +-/+ buffers/cache: 19404 111816 1.153 +Swap: 0 0 0 1.154 +\end{verbatim} 1.155 + 1.156 +Увеличиваем объём доступной домену оперативной памяти: 1.157 + 1.158 +\begin{verbatim} 1.159 +%$ sudo xm mem-set dhcp 256 1.160 +%$ sudo xm list 1.161 +Name ID Mem VCPUs State Time(s) 1.162 +Domain-0 0 1171 1 r----- 5329.8 1.163 +dhcp 8 256 1 -b---- 2.9 1.164 +\end{verbatim} 1.165 + 1.166 +Гостевая операционная система теперь видит 256MB: 1.167 + 1.168 +\begin{verbatim} 1.169 +$ sudo xm console dhcp 1.170 + 1.171 +dhcp:~# 1.172 +dhcp:~# 1.173 +dhcp:~# free 1.174 + total used free shared buffers cached 1.175 +Mem: 262144 33336 228808 0 1620 12228 1.176 +-/+ buffers/cache: 19488 242656 1.177 +Swap: 0 0 0 1.178 +\end{verbatim} 1.179 + 1.180 +В настоящий момент изменение памяти на лету \textit{НЕ} поддерживает 1.181 +ядро Linux, работающее через \textit{pv-ops}. 1.182 +Это означает, в частности, что паравиртуальные ядра 2.6.24 и 2.6.25 1.183 +не смогут увидеть изменение памяти в домене. 1.184 + 1.185 +\subsection{Распределение устройств} 1.186 +В режиме нормальной работы Xen-инсталляции все устройства (дисковая подсистема, сетевые адаптеры и проч.) 1.187 +видны напрямую только домену 0. 1.188 +Гостевые домены могут пользоваться этими устройствами, 1.189 +но не напрямую, а только опосредованно, 1.190 +при помощи механизмов, предоставляемых доменом 0. 1.191 + 1.192 +В некоторых случаях, однако, бывает необходимо чтобы гостевой 1.193 +домен увидел устройство сам, без посредников. 1.194 +Такое, в частности, возможно, когда гостевая система 1.195 +должна использовать специфический драйвер для доступа 1.196 +к специальным функциям устройства, недоступным через паравиртуальный 1.197 +интерфейс. 1.198 + 1.199 +Для проброса PCI-устройств необходимо чтобы: 1.200 \begin{itemize} 1.201 -\item нельзя добавить оперативной памяти больше чем указано в конфигурационном файле, т.е. лучше в конфигурационном файле указать больше, а после запуска уменьшить, с помощью xm mem-set 1.202 -\item по-умолчанию объем оперативной памяти все же в мегабайтах 1.203 +\item в ядре привилегированного домена (домена 0) присутствовала поддержка PCI backend; 1.204 +\item в ядрах, которые будут запускаться в пользовательских доменах и которые собираются использовать PCI-устройства, присутствовала поддержка PCI frontend. 1.205 +\end{itemize} 1.206 +В XenLinux PCI backend включается в конфигурационной секции Xen, 1.207 +а PCI frontend включается в зависимой от архитектуры секции \dq{}Bus Options\dq{}. 1.208 +Можно вкомпилировать вместе в одно ядро поддержку backend\rq{}а и поддержку frontend\rq{}а. Они друг другу не мешают. 1.209 +Обычно в ядрах, которые входят в состав распространённых дистрибутивов, 1.210 +поддержка есть по умолчанию. 1.211 + 1.212 +PCI-устройство, которое передаётся непривилегированному домену, 1.213 +должно быть скрыто от backend-домена (обычно домена 0) — 1.214 +не должно так получиться, что домен 0 загрузит случайно драйвер устройства, 1.215 +и тот начнём работать с этим устройством. 1.216 + 1.217 +Для этого нужно указать PCI backend, какое устройство он должен скрыть. 1.218 +Он привязывает себя как драйвер к устройству 1.219 +и тем самым гарантирует, что никакие другие драйверы устройств к нему не привяжутся. 1.220 +То есть, в действительности, устройства не скрываются от домена 0, просто они никак им не используются. 1.221 + 1.222 +Информация о том, какое устройство должно скрываться, 1.223 +передаётся как параметр ядра \texttt{pciback.hide} 1.224 +в его командной строке, задающейся через загрузчик. 1.225 +PCI-устройства идентифицируются шестнадцатеричными числами слот/функция (slot/function), 1.226 +в Linux эти номера можно определить с помощью программы \textbf{lspci}. 1.227 +Их можно указывать с информацией о номере домена или без неё: 1.228 + 1.229 +\begin{verbatim} 1.230 + (bus:slot.func) например (02:1d.3) 1.231 + (domain:bus:slot.func) например (0000:02:1d.3) 1.232 +\end{verbatim} 1.233 + 1.234 +Пример параметров ядра Linux, скрывающих два PCI-устройства: 1.235 + 1.236 +\begin{verbatim} 1.237 +root=/dev/sda4 ro console=tty0 pciback.hide=(02:01.f)(0000:04:1d.0) 1.238 +\end{verbatim} 1.239 + 1.240 +Устройство можно отобрать у драйвера и скрыть его 1.241 +и без перезагрузки: 1.242 + 1.243 +\begin{verbatim} 1.244 +# echo -n 0000:05:02.0 > /sys/bus/pci/drivers/3c905/unbind 1.245 +# echo -n 0000:05:02.0 > /sys/bus/pci/drivers/pciback/new_slot 1.246 +# echo -n 0000:05:02.0 > /sys/bus/pci/drivers/pciback/bind 1.247 +\end{verbatim} 1.248 + 1.249 +Сначала устройство отвязывается от драйвера, 1.250 +который его держит. 1.251 +Затем оно привязывается к PCI backend. 1.252 + 1.253 +Просмотреть к какому устройству привязан какой драйвер 1.254 +можно командой: 1.255 + 1.256 +\begin{verbatim} 1.257 +%# ls -l /sys/bus/pci/devices/*/driver 1.258 +\end{verbatim} 1.259 + 1.260 +После того как устройство освобождено от домена 0, 1.261 +его можно передавать внутрь гостевого домена. 1.262 +Для того чтобы передать устройство внутрь домена, 1.263 +в его конфигурационном файле нужно указать строку: 1.264 + 1.265 +\begin{verbatim} 1.266 +pci=['05:02.0'] 1.267 +\end{verbatim} 1.268 + 1.269 +Когда гостевой домен будет запущен, 1.270 +проверить видит ли он проброшенное внутрь устройство, 1.271 +можно командой: 1.272 + 1.273 +\begin{verbatim} 1.274 +%# lspci 1.275 +\end{verbatim} 1.276 + 1.277 +\subsection{Дополнительная информация} 1.278 +\begin{itemize} 1.279 +\item \htmladdnormallinkfoot{Распределение ресурсов между доменами Xen}{http://xgu.ru/wiki/xen/resources} (рус.) 1.280 \end{itemize} 1.281 1.282 -Подробнее: \url{http://lists.xensource.com/archives/html/xen-users/2007-05/msg00548.html} 1.283 - 1.284 -\subsection{Распределение устройств} 1.285 -Устройство можно выделить 1.286 -в монопольное пользование домену. 1.287 - 1.288 -Расширители PCI: 1.289 -\begin{itemize} 1.290 -\item http://hardware.mcse.ms/archive66-2005-5-188216.html 1.291 -\item http://mobilityelectronics.com/expansion/products/pci\_expansion/7slot3233/index.html 1.292 -\item http://www.nexcom.com.tw/index.jsp 1.293 -\item http://www.portwell.com/bpicmg.htm 1.294 -\end{itemize} 1.295 - 1.296 -\subsection{Приоритезация ввода/вывода} 1.297 - 1.298 -Приоритезация ввода/вывода доменами Xen 1.299 -выполняется средствами CFQ Linux 1.300 -в домене 0. 1.301 -