LINUX.ORG.RU

qemu и динамически выделяемая память

 , ,


1

3

Собственно сабж. Может кто подскажет, без пафосного balloon driver - как это по-человечески реализовать?
Есть гостевая система на винде, всю простыню писать не буду, но в двух словах:

qemu-system-x86_64: -device virtio-balloon

zcat /proc/config.gz | grep -ie CONFIG_MEMCG -e CONFIG_CGROUPS
CONFIG_CGROUPS=y
CONFIG_MEMCG=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG_SWAP_ENABLED=y

Само устройство определилось как VirtIO Balloon Driver, и guest agent'а я поставил. Теперь вопрос о том, как реализовать управление на хосте. Вот тут есть такая клевая штука http://www.linux-kvm.org/page/Projects/auto-ballooning Но мне стремно ставить, потому что уже двух летней давности, плюс (да, я арчевод), пока я разберусь, как там это воткнуть в PKGBUILD пройдет время(я сильно подозреваю, что зазря)

Задача простая - распределить ресурсы памяти между хостом и гостем, как это сделано в libvirt, который это умеет.


Ответ на: комментарий от Rockon

Там по сути то же самое, может надо просто драйвер в шиндошс переставить, из-за того, что контроллер стал в другом слоте

TheAnonymous ★★★★★
()
Ответ на: комментарий от TheAnonymous

Вообщем то дела такие: я просто подключил диск как блочное устройство

    <disk type='block' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='native'/>
      <source dev='/dev/md1'/>
      <target dev='sdc' bus='sata'/>
      <address type='drive' controller='0' bus='0' target='0' unit='2'/>
    </disk>
если ставить
<target dev='vdc' bus='virtio'/>
биос не определяет жесткий диск именно через либвирт. Грязным хаком добавить media=disk у меня не получилось..
http://vfio.blogspot.ru/2016/09/passing-qemu-command-line-options.html
Что делать - хз

Rockon
() автор топика
Ответ на: комментарий от TheAnonymous

я совсем забыл добавить - сейчас диск с gpt(с mbr было тоже самое), с шиной

<target dev='vdc' bus='virtio'/>
видится дальше и более того, в качестве эксперимента - на это блочное устройство была установлена винда. Но с биоса через либвирт оттуда не загрузится, только через чистный qemu Я делал грязный хак так:
 <qemu:commandline>
  <qemu:arg value='-set'/>
  <qemu:arg value='device.drive-virtio-disk0.media=disk'/>
</qemu:commandline>
потому что без этого media=disk - биос не может опознать блочное устройство для загрузки системы оттуда(я так думаю). Но конечно же он не сработал, потому что нет такого устройства(якобы). Я пробовал менять имя через алиас
 <alias name='hostdev3'/>
либвирт просто затирал эту строчку)) так как же грузится с блочного устройства с шиной virtio и проброшенной видеокартой, под чистым OVMF, а не медленным гибридом? =\

Rockon
() автор топика
Ответ на: комментарий от Rockon

потому что без этого media=disk - биос не может опознать блочное устройство для загрузки системы оттуда(я так думаю

Действительно из-за этого, если без libvirt убрать из параметров qemu, перестаёт работать?

Просто из man qemu:

media=media
This option defines the type of the media: disk or cdrom.

Видимо, по умолчанию и так disk, а не cdrom, поэтому libvirt не пишет явно, в конфиге же указано <disk type='block' device='disk'>

не может опознать блочное устройство для загрузки системы оттуда

А что грузится, efi shell?
Вручную загрузчик запустить нельзя? Там fs0:, потом команды dir, cd ... и запустить этот PE-файл
Файл с переменными efi тоже нужен тот же самый, что в qemu, загрузочная запись не пишется в MBR, если там будет чистая «флешка», грузиться не будет.

Ещё для загрузки есть параметры порядка загрузки, на отдельной вкладке virt-manager, надо отметить этот диск и переместить наверх.
В конфиге для этого можно написать в секции <os>

<os>
  ...
  <boot dev='hd'/>
  ...
</os>

А <boot order='1'/> из секции диска тогда убрать

The per-device boot elements cannot be used together with general boot elements in BIOS bootloader section.

и здесь то же https://serverfault.com/questions/313701/changing-boot-device-for-a-qemu-kvm-...

TheAnonymous ★★★★★
()
Ответ на: комментарий от TheAnonymous

map fs* показывает только сдром.

я думаю, что как грязный хак - сделаю минираздел на сата с загрузчиком, который будет грузить диск..))

Rockon
() автор топика
Ответ на: комментарий от TheAnonymous

Все вещи, что вы описали - уже пробовал, Да и.. собственно хак не помог, даже со старым добрым rEFInd При этом диски в режиме vfio становятся видны, когда прогружается виртуальная винда. Что за бред

Rockon
() автор топика
Ответ на: комментарий от TheAnonymous

Собственно боевые результаты
Виндовый C - это raid1 из двух sata2 дисков, подключенный как сата в либвирт

-----------------------------------------------------------------------
CrystalDiskMark 5.2.1 x64 (UWP) (C) 2007-2017 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :  1218.928 MB/s
  Sequential Write (Q= 32,T= 1) :  1336.134 MB/s
  Random Read 4KiB (Q= 32,T= 1) :    44.054 MB/s [ 10755.4 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :    46.128 MB/s [ 11261.7 IOPS]
         Sequential Read (T= 1) :  1352.559 MB/s
        Sequential Write (T= 1) :  1412.400 MB/s
   Random Read 4KiB (Q= 1,T= 1) :    30.161 MB/s [  7363.5 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :    30.237 MB/s [  7382.1 IOPS]

  Test : 100 MiB [C: 9.6% (22.3/232.2 GiB)] (x5)  [Interval=5 sec]
  Date : 2017/04/20 10:17:06
    OS : Windows 10 Professional [10.0 Build 14393] (x64)
  
Диск - терабайтник, подключенный как virtio диск.
  -----------------------------------------------------------------------
CrystalDiskMark 5.2.1 x64 (UWP) (C) 2007-2017 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :    19.687 MB/s
  Sequential Write (Q= 32,T= 1) :    18.271 MB/s
  Random Read 4KiB (Q= 32,T= 1) :     0.366 MB/s [    89.4 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     0.489 MB/s [   119.4 IOPS]
         Sequential Read (T= 1) :    83.256 MB/s
        Sequential Write (T= 1) :    70.853 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     0.361 MB/s [    88.1 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     0.470 MB/s [   114.7 IOPS]

  Test : 100 MiB [F: 84.2% (784.6/931.5 GiB)] (x5)  [Interval=5 sec]
  Date : 2017/04/20 10:11:07
    OS : Windows 10 Professional [10.0 Build 14393] (x64)
Теперь вопрос - как такое может быть? Откуда такие дикие иопсы на второй сате, близкие к реальным (если тестить с хоста)

Rockon
() автор топика
Ответ на: комментарий от TheAnonymous

Подключил его в либвирте так же, как и диск С который на программном рейде.

-----------------------------------------------------------------------
CrystalDiskMark 5.2.1 x64 (UWP) (C) 2007-2017 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :  1431.094 MB/s
  Sequential Write (Q= 32,T= 1) :  1195.487 MB/s
  Random Read 4KiB (Q= 32,T= 1) :    49.743 MB/s [ 12144.3 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :    43.625 MB/s [ 10650.6 IOPS]
         Sequential Read (T= 1) :  1197.543 MB/s
        Sequential Write (T= 1) :  1262.942 MB/s
   Random Read 4KiB (Q= 1,T= 1) :    26.257 MB/s [  6410.4 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :    29.612 MB/s [  7229.5 IOPS]

  Test : 100 MiB [F: 84.2% (784.6/931.5 GiB)] (x5)  [Interval=5 sec]
  Date : 2017/04/20 10:34:36
    OS : Windows 10 Professional [10.0 Build 14393] (x64)
  
может кто прояснить, что происходит?

Rockon
() автор топика
Ответ на: комментарий от TheAnonymous

Вообщем то подведу итог: libvirt лично для меня г*вно, во всяком случае из коробки. И походу надо читать кучу доков к нему. а теперь обосную:

  <cpu mode='host-model' check='partial'>
а либвирт запускает
-cpu Opteron_G3
И ничем это не исправить, во всяком случае мне. Он спайс сервером потребляет проц в простое + эмуляция проца жрет драгоценные такты.

Как его заставить запускать в режиме

taskset -c 2-5 qemu-system-x86_64
а спайс сервер закинуть на соседние ядра и тем самым поднять работу проца - черт его знает Честно говоря, если б не общая память (которая мне так нужна) - не пользовался бы libvirt вообще.

Вообщем то вопрос по прежнему открыт, да и непонятно, что делать с тем, что прописывается в запуск qemu Пойду читать доки, но буду рад любой дельной помощи

Rockon
() автор топика
Ответ на: комментарий от Rockon

Проблему с cpu решил довольно быстро. Собственно, что бы выставлялось правильно

<domain type='kvm'>
....
 <cpu mode='host-passthrough' check='none'/>

Rockon
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.