Сделать DUMP

27.02.2010

Что делать если Solaris завис намертво? На «break» с системного контроллера не реагирует, в OBP не переходит, если kmdb загружен – и в него не переходит, только reset спасает… Что подвесило – не понятно, походу баг в ядре, или драйвер кривой. Нужно понять в чем проблема, попробовать как-нибудь вытащить дамп при следующем подвисании.
Добавляем в /etc/system параметры:


set snooping=1
set snoop_interval=120000000

и перегружаем сервер.

Этот параметр включает Deadman таймер, который по 15-му прерыванию раз в секунду проверяет, обновилась ли переменная ядра lbolt. Если переменная lbolt не была увеличена за определенный период времени (по умолчанию 50 секунд, или 120 секунд, как в моем примере), то это вызовет панику.
Дальше – анализируем полученный дамп и делаем выводы.

Ссылки
Core Dump Management on the Solaris OS
Writing Device Drivers-Enable the Deadman Feature to Avoid a Hard Hang

ILOM или ALOM

12.01.2010

Как правильно отметил jsn – если привык к ALOM, то ILOM поначалу сильно раздражает ;) А на серверах t5240, t5440 итд – по умолчанию установлен как раз режим ILOM.
Итак как перейти к привычному виду команд на системном контроллере с ILOM? Создаем нового пользователя и устанавливаем ему режим alom:

-> create /SP/users/admin
Creating user...
Enter new password: ********
Enter new password again: ********
Created /SP/users/admin
-> set /SP/users/admin role=aucro
Set 'role' to 'aucro'
->set /SP/users/admin cli_mode=alom
Set 'cli_mode' to 'alom'

( Роль можно также устанавливается так: -> set /SP/users/admin role=Administrator)

UPDATE: 2010.01.26
Найдена табличка соответствия между командами ilom и alom в html-виде для T5140-T5240:
Локальная версия / версия на сайте docs.sun.com

Ссылки в тему:
Sun Integrated Lights Out Manager 3.0 Supplement for Sun SPARC Enterprise T5440 Server
Рекомендую также в этом документе посмотреть табличку «ILOM and ALOM CMT Command Comparison»

На новых серверах Sun с поддержкой LDOM (t5440, t5240 итд) просто так в {ok} не перейдешь. Т.е. когда все в порядке – ‘init 0′ и ты там, а вот если какие-нибудь проблемы – тут все и начинается. Когда посылаешь break – вываливаешься в меню типа «нефиг, нафиг, пофиг» (reset, sync, continue). Причем ни reset, ни sync – в {ok} ни разу не приведут.
Итак, танцы с бубном:
Заходим на системный контроллер.
Если установлен режиме ILOM:

set /HOST/bootmode script="setenv auto-boot? false"
reset /SYS
start /SP/console

Если установлен режиме ALOM:

bootmode bootscript="setenv auto-boot? false"
reset
console

Ссылки в тему:
Sun Integrated Lights Out Manager 3.0 Supplement for Sun SPARC Enterprise T5440 Server

UPDATE: 2010.01.12

Смотри также Когда навалом процессоров… Часть 1
Если процессоров не так прямо уж и много, или сервер состоит из системных плат, объединенных через общую шину (типа sf4800, sf6900, e25k итд) – то можно пойти другим путем – привязать процессы к процессорному сэту и запретить прерывания для этого сэта. Тем самым повышаем попадания в кэш, уменьшится трафик между системными платами, можно выделить как бы гарантированный квант процессорных ресурсов приложению.
Итак, пусть у нас средняя железка, 24 процессора. Создадим
процессорный сэт из процессоров 0-7
Читать полностью »

Смотри также Когда навалом процессоров… Часть 2
Для улучшения производительности в многопроцессорных (в том числе Multithreading ) системах с ОС Solaris можно использовать выделенные процессоры для обработки прерываний устройств ввода-вывода. Это позволяем снизить количество переключений контекста для процессоров, увеличить попадания в кэш, в конечном счете отдать больше ресурсов для обработки пользовательских задач.

Solaris 10:

Для того, чтобы привязать процессор к обработке прерываний устройства:
1.  Определяем процессор, на который попадает большинство системных прерываний по данному адаптеру (например по сетевому адаптеру nxge):
Читать полностью »

Несколько скриптов-однострочников для быстрого взгляда на то, как используется память в Solaris:

Физическая память:
kstat -n system_pages | nawk 'BEGIN{ "/usr/bin/pagesize" | getline pgsize ; } /physmem/ { print "Physical memory = " $2 * pgsize/1073741824 "Gb"}'

Память ядра:
kstat -n system_pages | nawk 'BEGIN{ "/usr/bin/pagesize" | getline pgsize ; } /pp_kernel/ { print "Kernel memory = " $2 * pgsize/1073741824 "Gb"}'

Разделяемая (shared) память:
ipcs -mb | awk '/^m/ {sm=sm+$7}END{ print "Shared memory " sm/1073741824 "Gb"}'

Свободная память:
kstat -n system_pages | nawk 'BEGIN{ "/usr/bin/pagesize" | getline pgsize ; } /freemem/ { print "Free memory = " $2 * pgsize/1073741824 "Gb"}'

И еще, если присмотреться, то можно увидеть, как в awk можно выполнить команду shell и прочитать ее вывод ;)

Updated: 29.09.2009/Добавлен однострочник для свободной памяти. Вообщем-то получился не плохой скриптик – все однострочники в одном файле:
solarismem
Пример вывода:
# ./solarismem.sh
Physical memory = 31.2031Gb
Kernel memory = 3.29826Gb
Shared memory 12.9697Gb
Free memory = 13.5944Gb

До Solaris10 управлять мультипатингом MPxIO можно было только с помощью luxadm, да и то, очень ограничено.
В Solaris 10 появилась командочка mpathadm, которая позволяет облагородить этот процесс,
не танцевать с бубном, а нормально админить ;)

Итак, вспоминаем – включение MPxIO на весь сервер:
stmsboot -e ; reboot
Можно включить на некоторые порты итд ( man stmsboot )
Обычно этим и ограничиваются все настройки ;) но попробуем заглянуть глубже.

Диски

Посмотреть диски:
Читать полностью »

Написал скриптик (точнее страничку), для определения слотов устройств ввода-вывода в Hi-End серверах Sun 12k,15k,20k,25k. Теперь достаточно скопировать строку из /devices или /etc/path_to_inst, чтобы определить где находится ваш HBA.

Пришлось разбираться с кучей wwn-устройств, а так как каждый вендор предпочитает выводить в том виде, каком ему удобнее, то по ходу прилось делать переводчик из одного вида в другой.
В результате получился вот этот переводчик. Позволяет преводить из вида типа 00:aa:bb:cc или 00aabbcc в друг друга, в верхний или нижний регистр, а также в сокращенную форму без ведущих нулей. Помогает при поиске совпадений для утилит различных вендоров.

Для тех, кто предпочитает командную строку могу предложить вариант на perl:

cat | perl -n -e 's/([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])/$1:$2:$3:$4:$5:$6:$7:$8/gi; print'

Ну и в продолжении предыдущей статьи добавляю сюда еще и скрипт для создания клона загрузочного диска в VxVM. Таким образом, если загрузочные диски под веритасом, можно пользоваться этим скриптом. В основе скрипта лежит блюпринт сановский Toward a Reference Configuration for VxVM Managed Boot Disks. Но скрипт творчески переработан в части выбора томов для зеркалирования.
Для инициализации нужно в VxVM инициализировать диск, и назвать его clone.
Ну например, так:

vxdisksetup -i c6t0d0s2
vxdg -g rootdg adddisk clone=c6t0d0s2

Для выбора томов, для зеркалирования на клон-диск, следует поправить в скрипте секцию
VOLUMES="rootvol:0:clone-rootvol:0x01:0x00 \
swapvol:1:clone-swapvol:0x03:0x01 \
var:5:clone-var:0x07:0x00 \
coredump:6:clone-coredump:0x00:0x00"

Качаем скрипт vxclonedisk