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
|   | 
 | 
|---|


 







