xg-scale

changeset 4:253d66dd74bb

Добавлено подробное описание управления памятью домена и выделением устройств домену
author Igor Chubin <igor@chub.in>
date Sun Jul 06 23:27:46 2008 +0300 (2008-07-06)
parents 7ad41782e1ad
children 75853b740e5a
files xen/resources.tex
line diff
     1.1 --- a/xen/resources.tex	Tue Jul 01 16:59:46 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 -