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-icon.png

Дальнейшая процедура верна для 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 и старше).

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


Icon-caution.gif

Если вы вручную меняете этот файл, не забудьте сделать

ldconfig -v

и перестартовать виртуалку

Эта директива говорит о том, что нужно использовать директиву, когда hwcap равен или не равен 1.

Icon-caution.gif

Такой пакет есть не во всех дистрибутивах. Если нет ни этого пакета, ни его аналога проблему можно решить путём отключения 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) проблема должна исчезнуть.


Note-icon.gif

Бывает, что сообщения вываливаются только для отдельно взятых процессов, например, beagle. В этой ситуации, проблема существует у этой отдельной программы или её библиотек, которые пока что не умеют работать без использования TLS.

hypervisor emulates the -ve segment offset

Xen
Xen

Виртуализация и паравиртуализация
Эмуляция | Виртуализация | Паравиртуализация | Рекурсивная виртуализация
Паравиртуальные драйверы | Виртуализация ввода/вывода

Общие вопросы по Xen
Аппаратные требования Xen | Поддержка Xen операционными системами | Поддерживаемые аппаратные архитектуры |
Примеры использования Xen | Сравнение виртуальных машин |
Хостинг на Xen
Альтернативы Xen

свободные: KVM | LXC | OpenVZ | VServer | QEMU | VirtualBox
проприетарные: Hyper-V | VMware ESX Server

Технические вопросы
Инсталляция Xen | Конфигурационный файл домена
ОС в Xen: Linux small icon.png Linux | Solaris small icon.png OpenSolaris | Freebsd small icon.png FreeBSD | Openbsd small icon.png OpenBSD | Netbsd small icon.png NetBSD | Windows xp small icon.png Windows XP | Windows vista small icon.png Windows Vista
Устройства: Блочные | USB | SCSI | Сеть | PV-драйверы для Linux | PV-драйверы для Windows | Консоль

Распределение ресурсов между доменами | Перенос системы внутрь Xen | HVM -> PV

Управление и кластеризация | Enomalism | Xen+DRBD | Ganeti | Convirt 2.0 | SkyCover Infrastructure
Источник — «http://xgu.ru:81/wiki/4gb_seg_fixup»