xg-scale

view xen/resources.tex @ 6:4a790b55d005

Обновлен раздел по Windows XP. Исправлен стиль, добавлены некоторые уточнения по конфигурационному файлу
author Igor Chubin <igor@chub.in>
date Wed Jul 09 08:50:18 2008 +0300 (2008-07-09)
parents 253d66dd74bb
children
line source
1 \section{Распределение ресурсов между доменами Xen}
3 \subsection{Процессор}
4 Виртуальные процессоры (VCPU) виртуальных машин автоматически распределяются
5 планировщиком между доступными физическими процессорами.
6 Назначать соответствие виртуального процесса реальному вручную не нужно.
7 Однако, при возникновении такой необходимости,
8 можно указать на каком процессоре будет выполняться виртуальный процессор.
9 Это делается с помощью команды \textbf{xm vcpu-pin}.
11 Каждый домен характеризуется двумя числами — \textit{весом} (weight) и \textit{лимитом} (cap).
13 Домен с весом 512 получает на том же хосте в два раза больше
14 процессорного времени чем домен с весом 256.
15 Вес может изменяться в диапазоне от 1 до 65535,
16 и он равен по умолчанию 256.
18 Значение лимита (cap) может использоваться для того чтобы указать максимальную величину
19 процессорного времени, который может получить домен, даже в случае, если хост-система
20 простаивает. Значение выражается в процентах: 100 это 1 физический процессор, 50 это половина процессора, 400 — 4 процессора и т.д.
21 Значение по умолчанию равно 0, что означает, что верхнее ограничение отсутствует.
23 Значения лимита и веса можно просматривать и модифицировать с помощью команд:
25 \begin{itemize}
26 \item \textbf{xm sched-credit -d domain} — показать значение вес (weight) и верх (cap) для домена;
27 \item \textbf{xm sched-credit -d domain -w weight} — установить вес равным \textbf{weight};
28 \item \textbf{xm sched-credit -d domain -c cap} — установить верх равным \textbf{cap}.
29 \end{itemize}
31 Для того чтобы эти значения сохранялись и после перезапуска домена,
32 их нужно указать в конфигурационном файле
33 с помощью параметров:
34 \begin{itemize}
35 \item \texttt{cpu\_cap} — верх (по умолчанию 0)
36 \item \texttt{cpu\_weight} — вес (по умолчанию 256)
37 \end{itemize}
39 \subsection{Оперативная память}
40 Объём памяти, выделяемой домену 0, задаётся как параметр \textbf{dom0\_mem} гипервизора Xen.
41 В этом случае подразумевается, что объём памяти
42 указан в килобайтах.
44 Пример секции конфигурационного файла \texttt{menu.lst} загрузчика GRUB:
46 \begin{verbatim}
47 title Xen 3.2-1-i386 / Debian GNU/Linux, kernel 2.6.18-4-xen
48 root (hd0,0)
49 kernel /boot/xen-3.2-1-i386.gz dom0_mem=1200000
50 module /boot/vmlinuz-2.6.18-4-xen-686 root=/dev/sda1 ro console=tty0
51 module /boot/initrd.img-2.6.18-4-xen-686
52 savedefault
53 \end{verbatim}
55 В этом примере домен 0 при старте будет в объёме оперативной
56 памяти до 1.2G.
58 По умолчанию (то есть, если параметр \texttt{dom0\_mem} не указан),
59 домен 0 сначала получает весь доступный объём оперативной памяти,
60 а потом, по мере необходимости, при старте других доменов, его начинают снижать.
61 Это делает специально предназначенный для такой работы balloon-драйвер.
63 Снижение будет производиться до величины \texttt{dom0-min-mem},
64 заданной в конфигурационном файле \texttt{/etc/xen/xend-config.sxp}.
65 Здесь величина памяти указывается в мегабайтах.
66 Если в качестве значения указан 0,
67 уменьшение памяти домена 0 выполняться не будет.
69 Пример настройки:
70 \begin{verbatim}
71 (dom0-min-mem 0)
72 \end{verbatim}
74 Объём памяти, выделяемой остальным доменам (то есть, виртуальным машинам),
75 задаётся в их конфигурационных файлах с помощью параметра \texttt{memory}.
76 Параметр может быть указан с суффиксом B, K, M или G, что означает байты, килобайты, мегабайты или гигабайты соответственно.
77 По умолчанию подразумевается, что в конфигурационном файле домена объём памяти указан в мегабайтах.
79 Впоследствии этот размер можно изменить прямо для работающего
80 домена при помощи команды:
82 \begin{verbatim}
83 xm mem-set <domain-id> <mem>
84 \end{verbatim}
86 Подняться выше заданного в конфигурационном файле значения без дополнительных
87 хитростей не получится.
88 Самая простая хитрость — задавать при старте домена большое значение памяти,
89 потом его сразу же снижать, а потом повышать по мере необходимости.
91 Более правильный способ — использовать параметр конфигурационного файла домена \texttt{maxmem},
92 и передавать ядру гостевой системы (при условии что это Linux) параметр \texttt{mem}:
94 \begin{verbatim}
95 $ grep mem /etc/xen/dhcp
96 memory = 128
97 maxmem = 512
98 extra = "mem=512M"
99 \end{verbatim}
101 Система при старте получает 128 MB ОЗУ,
102 но она сможет корректно отработать увеличение
103 памяти до 512 MB.
105 \begin{verbatim}
106 $ sudo xm create dhcp
107 Using config file "/etc/xen/dhcp".
108 Started domain dhcp
109 $ sudo xm list
110 Name ID Mem VCPUs State Time(s)
111 Domain-0 0 1171 1 r----- 5274.5
112 dhcp 8 128 1 -b---- 2.8
113 \end{verbatim}
115 Гостевая операционная система видит 128MB:
117 \begin{verbatim}
118 $ sudo xm console dhcp
119 Debian GNU/Linux lenny/sid dhcp tty1
120 dhcp login: root
121 Password:
122 dhcp:~# free
123 total used free shared buffers cached
124 Mem: 131220 33132 98088 0 1524 12204
125 -/+ buffers/cache: 19404 111816
126 Swap: 0 0 0
127 \end{verbatim}
129 Увеличиваем объём доступной домену оперативной памяти:
131 \begin{verbatim}
132 %$ sudo xm mem-set dhcp 256
133 %$ sudo xm list
134 Name ID Mem VCPUs State Time(s)
135 Domain-0 0 1171 1 r----- 5329.8
136 dhcp 8 256 1 -b---- 2.9
137 \end{verbatim}
139 Гостевая операционная система теперь видит 256MB:
141 \begin{verbatim}
142 $ sudo xm console dhcp
143 dhcp:~# free
144 total used free shared buffers cached
145 Mem: 262144 33336 228808 0 1620 12228
146 -/+ buffers/cache: 19488 242656
147 Swap: 0 0 0
148 \end{verbatim}
150 В настоящий момент изменение памяти на лету \textit{НЕ} поддерживает
151 ядро Linux, работающее через \textit{pv-ops}.
152 Это означает, в частности, что паравиртуальные ядра 2.6.24 и 2.6.25
153 не смогут увидеть изменение памяти в домене.
155 \subsection{Распределение устройств}
156 В режиме нормальной работы Xen-инсталляции все устройства (дисковая подсистема, сетевые адаптеры и проч.)
157 видны напрямую только домену 0.
158 Гостевые домены могут пользоваться этими устройствами,
159 но не напрямую, а только опосредованно,
160 при помощи механизмов, предоставляемых доменом 0.
162 В некоторых случаях, однако, бывает необходимо чтобы гостевой
163 домен увидел устройство сам, без посредников.
164 Такое, в частности, возможно, когда гостевая система
165 должна использовать специфический драйвер для доступа
166 к специальным функциям устройства, недоступным через паравиртуальный
167 интерфейс.
169 Для проброса PCI-устройств необходимо чтобы:
170 \begin{itemize}
171 \item в ядре привилегированного домена (домена 0) присутствовала поддержка PCI backend;
172 \item в ядрах, которые будут запускаться в пользовательских доменах и которые собираются использовать PCI-устройства, присутствовала поддержка PCI frontend.
173 \end{itemize}
174 В XenLinux PCI backend включается в конфигурационной секции Xen,
175 а PCI frontend включается в зависимой от архитектуры секции \dq{}Bus Options\dq{}.
176 Можно вкомпилировать вместе в одно ядро поддержку backend\rq{}а и поддержку frontend\rq{}а. Они друг другу не мешают.
177 Обычно в ядрах, которые входят в состав распространённых дистрибутивов,
178 поддержка есть по умолчанию.
180 PCI-устройство, которое передаётся непривилегированному домену,
181 должно быть скрыто от backend-домена (обычно домена 0) —
182 не должно так получиться, что домен 0 загрузит случайно драйвер устройства,
183 и тот начнём работать с этим устройством.
185 Для этого нужно указать PCI backend, какое устройство он должен скрыть.
186 Он привязывает себя как драйвер к устройству
187 и тем самым гарантирует, что никакие другие драйверы устройств к нему не привяжутся.
188 То есть, в действительности, устройства не скрываются от домена 0, просто они никак им не используются.
190 Информация о том, какое устройство должно скрываться,
191 передаётся как параметр ядра \texttt{pciback.hide}
192 в его командной строке, задающейся через загрузчик.
193 PCI-устройства идентифицируются шестнадцатеричными числами слот/функция (slot/function),
194 в Linux эти номера можно определить с помощью программы \textbf{lspci}.
195 Их можно указывать с информацией о номере домена или без неё:
197 \begin{verbatim}
198 (bus:slot.func) например (02:1d.3)
199 (domain:bus:slot.func) например (0000:02:1d.3)
200 \end{verbatim}
202 Пример параметров ядра Linux, скрывающих два PCI-устройства:
204 \begin{verbatim}
205 root=/dev/sda4 ro console=tty0 pciback.hide=(02:01.f)(0000:04:1d.0)
206 \end{verbatim}
208 Устройство можно отобрать у драйвера и скрыть его
209 и без перезагрузки:
211 \begin{verbatim}
212 # echo -n 0000:05:02.0 > /sys/bus/pci/drivers/3c905/unbind
213 # echo -n 0000:05:02.0 > /sys/bus/pci/drivers/pciback/new_slot
214 # echo -n 0000:05:02.0 > /sys/bus/pci/drivers/pciback/bind
215 \end{verbatim}
217 Сначала устройство отвязывается от драйвера,
218 который его держит.
219 Затем оно привязывается к PCI backend.
221 Просмотреть к какому устройству привязан какой драйвер
222 можно командой:
224 \begin{verbatim}
225 %# ls -l /sys/bus/pci/devices/*/driver
226 \end{verbatim}
228 После того как устройство освобождено от домена 0,
229 его можно передавать внутрь гостевого домена.
230 Для того чтобы передать устройство внутрь домена,
231 в его конфигурационном файле нужно указать строку:
233 \begin{verbatim}
234 pci=['05:02.0']
235 \end{verbatim}
237 Когда гостевой домен будет запущен,
238 проверить видит ли он проброшенное внутрь устройство,
239 можно командой:
241 \begin{verbatim}
242 %# lspci
243 \end{verbatim}
245 \subsection{Дополнительная информация}
246 \begin{itemize}
247 \item \htmladdnormallinkfoot{Распределение ресурсов между доменами Xen}{http://xgu.ru/wiki/xen/resources} (рус.)
248 \end{itemize}