Bug 41475

Summary: не запускается и не работает LXC контейнер (libvirt)
Product: Альт Сервер Виртуализации Reporter: Gleb Kulikov <glebus>
Component: Ошибки работыAssignee: Alexey Shabalin <shaba>
Status: REOPENED --- QA Contact: Alexey Shabalin <shaba>
Severity: normal    
Priority: P5 CC: aen, obirvalger, shaba
Version: 9.2   
Hardware: x86_64   
OS: Linux   

Description Gleb Kulikov 2021-12-01 12:20:04 MSK
при попытке запустить LXC контейнер (не важно, из virsh или virt-manager), запуск проваливается с диагностикой error: error from service: GDBus.Error:org.freedesktop.machine1.NoMachineForPID: PID 7497 does not belong to any known machine

Похоже, это *исправленная* ошибка https://gitlab.com/libvirt/libvirt/-/issues/182

при передаче ядру параметра systemd.unified_cgroup_hierarchy=1 контейнер запускается, но оказывается практически бесполезным, так как приложения в контейнере не могут найти /sys/fs/cgroup/memory/memory.usage_in_bytes и прочую инфраструктуру.
Comment 1 Alexey Shabalin 2021-12-04 02:36:35 MSK
Предполагается, что p9 останется жить на cgroup1 (по-умолчанию).
С cgroup2 ничего не тестировалось на p9.

Можно попробовать таск #291274
Comment 2 Gleb Kulikov 2021-12-12 16:37:25 MSK
Ох, извиняюсь, письмо улетело в спам, только сейчас увидел.

таск сегодня попробую.

с p10 и cgroup ситуация такая, что в LXC контейнерах не запускается slapd, ns-slapd (из ipa):

дек 12 13:31:45 localhost.localdomain ns-slapd[11464]: [12/Dec/2021:13:31:45.919329303 +0000] - WARN - spal_meminfo_get - Unable to retrieve /sys/fs/cgroup/machine.slice/machine-lxc\x2d237225\x2>
дек 12 13:31:45 localhost.localdomain ns-slapd[11464]: [12/Dec/2021:13:31:45.944366134 +0000] - ERR - _spal_get_uint64_t_file - Unable to open file "/sys/fs/cgroup/machine.slice/machine-lxc\x2d2>
дек 12 13:31:45 localhost.localdomain ns-slapd[11464]: [12/Dec/2021:13:31:45.969329701 +0000] - WARN - spal_meminfo_get - Unable to retrieve /sys/fs/cgroup/machine.slice/machine-lxc\x2d237225\x2>
дек 12 13:31:45 localhost.localdomain ns-slapd[11464]: [12/Dec/2021:13:31:45.994390381 +0000] - ERR - _spal_get_uint64_t_file - Unable to open file "/sys/fs/cgroup/machine.slice/machine-lxc\x2d2>
дек 12 13:31:46 localhost.localdomain ns-slapd[11464]: [12/Dec/2021:13:31:46.027663362 +0000] - WARN - spal_meminfo_get - Unable to retrieve /sys/fs/cgroup/machine.slice/machine-lxc\x2d237225\x2>
дек 12 13:31:46 localhost.localdomain ns-slapd[11464]: [12/Dec/2021:13:31:46.061006939 +0000] - NOTICE - ldbm_back_start - cache autosizing: userRoot entry cache (3 total): 54043195080704k
дек 12 13:31:46 localhost.localdomain ns-slapd[11464]: [12/Dec/2021:13:31:46.098368210 +0000] - ERR - memory allocator - calloc of 1 elems of 864691121291328 bytes failed; OS error 12 (Cannot al>
дек 12 13:31:46 localhost.localdomain ns-slapd[11464]: The server has probably allocated all available virtual memory. To solve
дек 12 13:31:46 localhost.localdomain ns-slapd[11464]: this problem, make more virtual memory available to your server, or reduce
дек 12 13:31:46 localhost.localdomain ns-slapd[11464]: one or more of the following server configuration settings:
дек 12 13:31:46 localhost.localdomain ns-slapd[11464]:   nsslapd-cachesize        (Database Settings - Maximum entries in cache)
дек 12 13:31:46 localhost.localdomain ns-slapd[11464]:   nsslapd-cachememsize     (Database Settings - Memory available for cache)
дек 12 13:31:46 localhost.localdomain ns-slapd[11464]:   nsslapd-dbcachesize      (LDBM Plug-in Settings - Maximum cache size)
дек 12 13:31:46 localhost.localdomain ns-slapd[11464]:   nsslapd-import-cachesize (LDBM Plug-in Settings - Import cache size).
дек 12 13:31:46 localhost.localdomain ns-slapd[11464]: Can't recover; calling exit(1).
дек 12 13:31:46 localhost.localdomain systemd[1]: dirsrv@EUREKI-EUR.service: Main process exited, code=exited, status=1/FAILURE
Comment 3 Gleb Kulikov 2021-12-12 20:49:57 MSK
(Ответ для Alexey Shabalin на комментарий #1)
> Предполагается, что p9 останется жить на cgroup1 (по-умолчанию).
> С cgroup2 ничего не тестировалось на p9.
> 
> Можно попробовать таск #291274

результат следующий:

1. libvirt запускает контейнер lxc
2. контейнер запускается и как-то(!) работает, но:

$ free

              total        used        free      shared  buff/cache   available
Mem:    9007199254740991      349128 9007199254391863       10272           0 9007199254391863
Swap:      17824112           0    17824112

приложения видят сумасшедший объём доступной памяти, ни байта из которого нельзя выделить (от ограничений на память в контейнере ничего не меняется):

дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]: [12/Dec/2021:22:18:42.163975970 +0700] - NOTICE - ldbm_back_start - found 9007199252372576k available
дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]: [12/Dec/2021:22:18:42.180643625 +0700] - NOTICE - ldbm_back_start - cache autosizing: db cache: 1572864k
дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]: [12/Dec/2021:22:18:42.206313119 +0700] - NOTICE - ldbm_back_start - cache autosizing: userRoot entry cache (
3 total): 54>
дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]: [12/Dec/2021:22:18:42.238512996 +0700] - ERR - memory allocator - calloc of 1 elems of 864691121291328 bytes
 failed; OS >
дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]: The server has probably allocated all available virtual memory. To solve
дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]: this problem, make more virtual memory available to your server, or reduce
дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]: one or more of the following server configuration settings:
дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]:   nsslapd-cachesize        (Database Settings - Maximum entries in cache)
дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]:   nsslapd-cachememsize     (Database Settings - Memory available for cache)
дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]:   nsslapd-dbcachesize      (LDBM Plug-in Settings - Maximum cache size)
дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]:   nsslapd-import-cachesize (LDBM Plug-in Settings - Import cache size).
дек 12 22:18:42 ipa.eureki.eur ns-slapd[1421]: Can't recover; calling exit(1).
дек 12 22:18:42 ipa.eureki.eur systemd[1]: dirsrv@EUREKI-EUR.service: Main process exited, code=exited, status=1/FAILURE
дек 12 22:18:42 ipa.eureki.eur systemd[1]: dirsrv@EUREKI-EUR.service: Failed with result 'exit-code'.
дек 12 22:18:42 ipa.eureki.eur systemd[1]: Failed to start 389 Directory Server EUREKI-EUR..
дек 12 22:18:42 ipa.eureki.eur ipactl[1411]: Failed to start Directory Service: CalledProcessError(Command ['/sbin/systemctl', 'start', 'dirsrv@EUREKI-EUR.
service'] re>
дек 12 22:18:42 ipa.eureki.eur ipactl[1411]: Starting Directory Service
дек 12 22:18:42 ipa.eureki.eur systemd[1]: ipa.service: Main process exited, code=exited, status=1/FAILURE
дек 12 22:18:42 ipa.eureki.eur systemd[1]: ipa.service: Failed with result 'exit-code'.
дек 12 22:18:42 ipa.eureki.eur systemd[1]: Failed to start Identity, Policy, Audit

3. контейнер игнорирует высталвенные ограничения по числу ядер и памяти.
Comment 4 Alexey Shabalin 2021-12-13 02:16:48 MSK
Запущен ли сервис lcxfs?
Благодаря ему начинают работать различные ограничения для lxc контейнеров (cpu, mem).
Comment 5 Gleb Kulikov 2021-12-13 17:26:21 MSK
(Ответ для Alexey Shabalin на комментарий #4)
> Запущен ли сервис lcxfs?
> Благодаря ему начинают работать различные ограничения для lxc контейнеров
> (cpu, mem).

да. проверить ещё раз смогу только завтра
Comment 6 Gleb Kulikov 2021-12-17 07:26:50 MSK
(Ответ для Alexey Shabalin на комментарий #4)
> Запущен ли сервис lcxfs?
> Благодаря ему начинают работать различные ограничения для lxc контейнеров
> (cpu, mem).

Итак, действительно, lxcfs *запущен*.
Результат: ограничения по cpu и памяти НЕ применяются,
в контейнере рапортуется неправдоподобно большой объём памяти. выделить из которого память нельзя.

cat /proc/meminfo на хосте:

MemTotal:       16281916 kB
MemFree:        10628704 kB
MemAvailable:   13940648 kB
Buffers:            2484 kB
Cached:          3536200 kB
SwapCached:            0 kB
Active:          3216628 kB
Inactive:        2012828 kB
Active(anon):    1692348 kB
Inactive(anon):    25904 kB
Active(file):    1524280 kB
Inactive(file):  1986924 kB
Unevictable:         136 kB
Mlocked:               0 kB
SwapTotal:      17824112 kB
SwapFree:       17824112 kB
Dirty:              2052 kB
Writeback:             0 kB
AnonPages:       1674252 kB
Mapped:           747740 kB
Shmem:             27484 kB
KReclaimable:     108892 kB
Slab:             242128 kB
SReclaimable:     108892 kB
SUnreclaim:       133236 kB
KernelStack:       16096 kB
PageTables:        27712 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    25965068 kB
Committed_AS:    6635136 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       41000 kB
VmallocChunk:          0 kB
Percpu:            20864 kB
HardwareCorrupted:     0 kB
AnonHugePages:    704512 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:     24576 kB
FilePmdMapped:     22528 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      379092 kB
DirectMap2M:     7895040 kB
DirectMap1G:     8388608 kB

А вот в контейнере

MemTotal:       9007199254740991 kB
MemFree:        9007199254200083 kB
MemAvailable:   9007199254200083 kB
Buffers:               0 kB
Cached:           512328 kB
SwapCached:            0 kB
Active:            66264 kB
Inactive:         462188 kB
Active(anon):        132 kB
Inactive(anon):    15896 kB
Active(file):      66132 kB
Inactive(file):   446292 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:      17824112 kB
SwapFree:       17824112 kB
Dirty:              3076 kB
Writeback:             0 kB
AnonPages:       1675208 kB
Mapped:           748000 kB
Shmem:             27484 kB
KReclaimable:     108908 kB
Slab:                  0 kB
SReclaimable:          0 kB
SUnreclaim:            0 kB
KernelStack:       16080 kB
PageTables:        27704 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    25965068 kB
Committed_AS:    6635044 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       41016 kB
VmallocChunk:          0 kB
Percpu:            20864 kB
HardwareCorrupted:     0 kB
AnonHugePages:    710656 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:     24576 kB
FilePmdMapped:     22528 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      379092 kB
DirectMap2M:     7895040 kB
DirectMap1G:     8388608 kB

(dist-upgrade сделан).

Поведение одинаковое на p9 и p10
Comment 7 Alexey Shabalin 2021-12-17 15:57:04 MSK
на p10 попробуйте подключить таск #291659.
Мне кажется в p10 устаревший lxcfs.
Comment 8 Gleb Kulikov 2022-01-21 16:14:53 MSK
(Ответ для Alexey Shabalin на комментарий #7)
> на p10 попробуйте подключить таск #291659.
> Мне кажется в p10 устаревший lxcfs.

К сожалению, никаких изменений.
free
              total        used        free      shared  buff/cache   available
Mem:    9007199254740991      319900 9007199254087411        9992      333680 9007199254087411
Swap:      17824112       59136    17764976


[21/Jan/2022:20:08:03.733879409 +0700] - ERR - _spal_get_uint64_t_file - Unable to open file "/sys/fs/cgroup/memory/memor
y.limit_in_bytes". errno=2
[21/Jan/2022:20:08:03.758866690 +0700] - WARN - spal_meminfo_get - Unable to retrieve /sys/fs/cgroup/memory/memory.limit_
in_bytes. There may be no cgroup support on this platform
[21/Jan/2022:20:08:03.783881614 +0700] - ERR - _spal_get_uint64_t_file - Unable to open file "/sys/fs/cgroup/memory/memor
y.usage_in_bytes". errno=2
[21/Jan/2022:20:08:03.808874603 +0700] - WARN - spal_meminfo_get - Unable to retrieve /sys/fs/cgroup/memory/memory.limit_
in_bytes. There may be no cgroup support on this platform
[21/Jan/2022:20:08:03.833843667 +0700] - NOTICE - ldbm_back_start - found 9007199254740991k physical memory
[21/Jan/2022:20:08:03.858825893 +0700] - NOTICE - ldbm_back_start - found 9007199253886375k available
[21/Jan/2022:20:08:03.883871105 +0700] - NOTICE - ldbm_back_start - cache autosizing: db cache: 1572864k
[21/Jan/2022:20:08:03.910749326 +0700] - ERR - _spal_get_uint64_t_file - Unable to open file "/sys/fs/cgroup/memory/memor
y.soft_limit_in_bytes". errno=2
[21/Jan/2022:20:08:03.933877172 +0700] - WARN - spal_meminfo_get - Unable to retrieve /sys/fs/cgroup/memory/memory.soft_l
imit_in_bytes. There may be no cgroup support on this platform
[21/Jan/2022:20:08:03.958878490 +0700] - ERR - _spal_get_uint64_t_file - Unable to open file "/sys/fs/cgroup/memory/memor
y.limit_in_bytes". errno=2
[21/Jan/2022:20:08:03.991400527 +0700] - WARN - spal_meminfo_get - Unable to retrieve /sys/fs/cgroup/memory/memory.limit_
in_bytes. There may be no cgroup support on this platform
[21/Jan/2022:20:08:04.058900471 +0700] - ERR - _spal_get_uint64_t_file - Unable to open file "/sys/fs/cgroup/memory/memor
y.usage_in_bytes". errno=2
[21/Jan/2022:20:08:04.117220698 +0700] - WARN - spal_meminfo_get - Unable to retrieve /sys/fs/cgroup/memory/memory.limit_
in_bytes. There may be no cgroup support on this platform
[21/Jan/2022:20:08:04.150572600 +0700] - NOTICE - ldbm_back_start - cache autosizing: userRoot entry cache (3 total): 540
43195080704k
[21/Jan/2022:20:08:04.185422791 +0700] - ERR - memory allocator - calloc of 1 elems of 864691121291328 bytes failed; OS e
rror 12 (Cannot allocate memory)
Comment 9 obirvalger@altlinux.org 2022-01-26 16:06:10 MSK
При использовании хостовой машины с p9 и p10, проблем с выделением памяти в контейнерах не обнаружено. Команды free и cat /proc/meminfo показывают заданный объем памяти.
Comment 10 Gleb Kulikov 2022-01-27 05:00:07 MSK
(Ответ для obirvalger@altlinux.org на комментарий #9)
> При использовании хостовой машины с p9 и p10, проблем с выделением памяти в
> контейнерах не обнаружено. Команды free и cat /proc/meminfo показывают
> заданный объем памяти.

ну как же так?
хорошо, в чём может быть причина? Извиняюсь за назойливость, но эта проблема мешает приобретению коммерческой лицензии.
Comment 11 Gleb Kulikov 2022-01-27 05:00:56 MSK
(Ответ для obirvalger@altlinux.org на комментарий #9)
> При использовании хостовой машины с p9 и p10, проблем с выделением памяти в
> контейнерах не обнаружено. Команды free и cat /proc/meminfo показывают
> заданный объем памяти.

и да, какиим образом формировался и запускался контейнер?
Comment 12 Gleb Kulikov 2022-01-27 09:04:07 MSK
(Ответ для obirvalger@altlinux.org на комментарий #9)
> При использовании хостовой машины с p9 и p10, проблем с выделением памяти в
> контейнерах не обнаружено. Команды free и cat /proc/meminfo показывают
> заданный объем памяти.

и да, какиим образом формировался и запускался контейнер?
Comment 13 Gleb Kulikov 2022-01-27 14:10:03 MSK
У меня на 2 тестовых машинах и виртуалке в p10 воспроизводится стабильно.
Возможно, разные условия запуска контейнеров?
Что и как запускалось?
Comment 14 obirvalger@altlinux.org 2022-01-27 17:04:16 MSK
(Ответ для Gleb Kulikov на комментарий #13)
> У меня на 2 тестовых машинах и виртуалке в p10 воспроизводится стабильно.
> Возможно, разные условия запуска контейнеров?
> Что и как запускалось?

Самым удобным, на мой взгляд, является конвертация из обычного lxc контейнера:
1. Запустить сервис lxc-net;
2. Создать lxc контейнер
  `lxc-create -t download -n p10` Выбрать alt, p10 и amd64;
3. Сконвертировать его в понятный для virsh формат
  `virsh -c lxc:/// domxml-from-native lxc-tools /var/lib/lxc/p10/config > p10.xml`
4. Отредактировать полученый файл p10.xml:
  4.1. Вместо тэгов memory и currentMemory сдлеать один тэг
    "memory>700000</memory>"
  4.2. Тэг source заменить на следующий "<source dir='/var/lib/lxc/p10/rootfs'/>"
  4.3. После закрытия тэга interface добавить "<console type='pty' />"
5. Добавить возможность заходить в контейнер:
  5.1. Задать пароль: `chroot /var/lib/lxc/p10/rootfs passwd`
  5.2. Добавить /dev/console в список девайсов, с которых разрешен логин рута:
    `echo console >>  /var/lib/lxc/p10/rootfs/etc/securetty`
6. Создать контейнер:
  `virsh -c lxc:/// create p10.xml`
7. Зайти в него:
  `virsh -c lxc:/// console p10`
Comment 15 Gleb Kulikov 2022-02-11 17:33:50 MSK
(Ответ для obirvalger@altlinux.org на комментарий #14)

извиняюсь за задержку с ответом, болен.

> (Ответ для Gleb Kulikov на комментарий #13)
> > У меня на 2 тестовых машинах и виртуалке в p10 воспроизводится стабильно.
> > Возможно, разные условия запуска контейнеров?
> > Что и как запускалось?
> 
> Самым удобным, на мой взгляд, является конвертация из обычного lxc
> контейнера:

>   `lxc-create -t download -n p10` Выбрать alt, p10 и amd64;

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


> 4. Отредактировать полученый файл p10.xml:
>   4.1. Вместо тэгов memory и currentMemory сдлеать один тэг
>     "memory>700000</memory>"

Это не работает: при запуске запись автоматически меняектся на 
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>

если стартовать virt-manager и попробоватьв нём отредактировать xml, происходит в точности то-же самое: <memory>xxx</memory> меняется на 
<memory unit='KiB'>xxxxx</memory>
<currentMemory unit='KiB'>xxxxx</currentMemory>
>   `virsh -c lxc:/// create p10.xml`
> 7. Зайти в него:
>   `virsh -c lxc:/// console p10`

независмо от способа входа, через virsh или virt-manager:

free
              total        used        free      shared  buff/cache   available
Mem:    9007199254740991      598824 9007199254095151      607288       47016 9007199254095151
Swap:      17824112      552008    17272104