4gb seg fixup
Материал из Xgu.ru
У многих, кто обновил гостевые домены Xen,
но продолжает использовать старые ядра в гостевых доменах
(например, в Debian наиболее часто используется в Xen
ядро 2.6.18), может внезапно возникнуть проблема
визуально выражающаяся в сообщениях вида
4gb seg fixup, process ntpd (pid 1096), cs:ip 73:b7dc04b6
падающих на консоль, а фактически — приводящая к снижению производительности системы.
Здесь описывается почему так происходит, и как эту проблему устранить.
[править] Проблема
При переходе на паравиртуальное ядро Xen на экран начинают постоянно вываливаться сообщения:
printk: 716 messages suppressed. 4gb seg fixup, process ntpd (pid 1096), cs:ip 73:b7dc04b6 printk: 161 messages suppressed. 4gb seg fixup, process ntpd (pid 1096), cs:ip 73:b7dc04b6 printk: 349 messages suppressed. 4gb seg fixup, process cron (pid 1117), cs:ip 73:b7e6350e printk: 446 messages suppressed. 4gb seg fixup, process ntpd (pid 1096), cs:ip 73:b7dc04b6
Что делать?
[править] Решение
Простейшее, но совершенно неправильное решение, это отключить вывод сообщений на экран:
echo 4 4 1 7 > /proc/sys/kernel/printk
Это можно сделать только для того, чтобы временно погасить сообщения и попробовать решить проблему.
Дальнейшая процедура верна для Debian и Debian-based дистрибутивов. Для остальных сохраняется только идея, а процедура отличается |
Правильное решение таково: необходимо установить специальным образом модифицированные библиотеки, подготовленные для использования в паравиртуализированной среде.
%# apt-get install libc6-xen
Библиотеки устанавливаются в каталог /lib/i686/nosegneg.
Система сама распознаёт, когда нужно использовать библиотеки с поддержкой TLS, а когда нет.
Например, в Debian GNU/Linux есть файл:
/etc/ld.so.conf.d/libc6-xen.conf
Содержимое которого такое:
hwcap 0 nosegneg
(для паравиртуального ядра 2.6.18 и других до 2.6.24).
Или такое:
hwcap 1 nosegneg
(для паравиртуального ядра 2.6.24 и старше).
При обновлении системы файл изменяется, но если при этом продолжает использоваться старое ядро, начинают сыпаться сообщения на консоль.
Если вы вручную меняете этот файл, не забудьте сделать ldconfig -v и перестартовать виртуалку |
Эта директива говорит о том, что нужно использовать директиву, когда hwcap равен или не равен 1.
Такой пакет есть не во всех дистрибутивах. Если нет ни этого пакета, ни его аналога проблему можно решить путём отключения TLS-библиотек: %# mv /lib/tls /lib/tls.disabled |
Просмотреть, какие библиотеки используют программы, можно если включить отладку LD:
# LD_DEBUG=libs /bin/true 15655: find library=libc.so.6 [0]; searching 15655: search cache=/etc/ld.so.cache 15655: trying file=/lib/i686/nosegneg/libc.so.6 15655: 15655: 15655: calling init: /lib/i686/nosegneg/libc.so.6 15655: 15655: 15655: initialize program: /bin/true 15655: 15655: 15655: transferring control: /bin/true 15655:
Здесь видно, что используется библиотека nonsegneg.
Если же вывод напоминает такой, а при этом система работает под паравиртуализированным ядром, сообщения будут выводиться, и система будет работать не самым эффективным образом:
$ LD_DEBUG=libs /bin/true 14711: find library=libc.so.6 [0]; searching 14711: search cache=/etc/ld.so.cache 14711: trying file=/lib/libc.so.6 14711: 14711: 14711: calling init: /lib/libc.so.6 14711: 14711: 14711: initialize program: /bin/true 14711: 14711: 14711: transferring control: /bin/true 14711:
После перехода на специальным образом модифицированные библиотеки (не использующие TLS)
проблема должна исчезнуть.
|
Бывает, что сообщения вываливаются только для отдельно взятых процессов, например, beagle. В этой ситуации, проблема существует у этой отдельной программы или её библиотек, которые пока что не умеют работать без использования TLS. |
hypervisor emulates the -ve segment offset
|
---|