Одной из основных маркетологических ошибок Sun в 90х годах был отказ от полноценной поддержки стремительно развивающейся x86 платформы в пользу SPARC, однако сейчас все изменилось. Посмотрим как происходит интеграция технологий Intel и Solaris 10 (OpenSolaris), для лучшей поддержки платформы x86, в частности микроархитектур Core и Nehalem
Оптимизация уровня кода.
Если говорить об оптимизации уровня кода, но нельзя не сказать об Oracle Solaris Studio 13, которая должна выйти этой весной и содержать ряд оптимизаций для архитектуры Nehalem. В Oracle Solaris Studio 12 была добавлена поддержка архитектуры core, который позволяет оптимизировать код для Xeon, основанных на Core.
Я провел тест SciMark для системы Sun Fire X4150 (2xXeon E5440) для gcc и suncc:

Примечание: Опции компиляции:
SunCC (generic): -fast -xtarget=generic -m64
SunCC (woodcrest): -fast -xtarget=woodcrest -xipo -W u,-sched_first_pass=1 -m64
GCC: -O3 -mtune=core2 -m64
Виртуальная память и NUMA-архитектуры
Для операционной системы важно учитывать особенности архитектуры каждой ВС, на которой она работает. В частности, например, требуется более оптимально использовать таблицы TLB и большие страницы (для экономии таблиц страниц). Узнать поддерживаемые размеры страниц можно с помощью команды pagesize
myaut@sfx4150:~$ pagesize -a
4096
2097152
Таким образом, мы видим, что OpenSolaris поддерживает 2-мегабайтные страницы.
Также, так как для NUMA-архитектур (такой как Nehalem-EX, или архитектур Opteron) важно уменьшить нагрузку на шину, планируя потоки таким образом, чтобы они чаще обращались к локальной памяти Solaris использует MPO - Memory Placement Optimization. В ACPI 3.0 используются две таблицы: System Resource Affinity Table (SRAT), and System Locality Information Table (SLIT), позволяющие на этапе загрузки системы построить ее топологию. Об этом можно почитать например здесь: OpenSolaris Community Group Perfomance
Для X4600 M2 с двумя процессорными платами топология например будет выглядеть так:
myaut@sfx4600:~$ lgrpinfo
lgroup 0 (root):
Children: 1 2
CPUs: 0-7
Memory: installed 4,0G, allocated 983M, free 3,0G
Lgroup resources: 1 2 (CPU); 2 (memory)
Latency: 12
lgroup 1 (leaf):
Children: none, Parent: 0
CPUs: 0-3
Lgroup resources: 1 (CPU);
Load: 0,386
lgroup 2 (leaf):
Children: none, Parent: 0
CPUs: 4-7
Memory: installed 4,0G, allocated 983M, free 3,0G
Lgroup resources: 2 (CPU); 2 (memory)
Load: 0,199
Latency: 10
myaut@sfx4600:~$ lgrpinfo -Ta
0
|-- 1
| CPUs: 0-3
| Load: 0,288
`-- 2
CPUs: 4-7
Memory: installed 4,0G, allocated 982M, free 3,0G
Load: 0,128
Latency: 10
Умное энергопотребление.
OpenSolaris поддерживают P-States и C-States, позволяющие мягко регулировать производительность процессора и его энергопотребление в зависимости от нагрузки. C-State - это набор активных в данный момент компонентов процессора (от C0 - полной работоспособности процессора до C4 - режима глубокого сна), а P-State - соотношение частоты и напряжения ядра.
Мониторинг управления питания может быть осуществлен через DTrace, наиболее удобно для этого использовать утилиту powertop:
Cn Avg residency P-states (frequencies)
C0 (cpu running) (5,0%) 2003 Mhz 100,0%
C1 1,4ms (95,0%) 2336 Mhz 0,0%
2833 Mhz 0,0%
Wakeups-from-idle per second: 655,9 interval: 5,0s
no ACPI power usage estimate available
Top causes for wakeups:
50,1% (328,5) sched : <cross calls>
21,1% (138,3) <kernel> : genunix`cv_wakeup
15,2% (100,0) <kernel> : genunix`clock
2,3% ( 15,4) <kernel> : uhci`uhci_handle_root_hub_status_change
1,2% ( 8,0) <kernel> : cpudrv`cpudrv_monitor_disp
1,1% ( 7,0) <interrupt> : e1000g#0
0,6% ( 4,0) <kernel> : genunix`lwp_timer_timeout
0,6% ( 4,0) <kernel> : genunix`schedpaging
0,6% ( 4,0) <kernel> : ehci`ehci_handle_root_hub_status_change
0,6% ( 4,0) <kernel> : uhci`uhci_cmd_timeout_hdlr
0,4% ( 2,4) <kernel> : ip`tcp_time_wait_collector
<cut>
Доступность
Как и RISC-системы серверные процессоры x64 стараются применять различные RAS-технологии призванные повысить надежность оборудования. В Solaris 10 инфраструктура мониторинга системы была объединена в один большой сервис - FMA (Fault Management Architecture). Больше RAS-возможностей ожидается в Nehalem-архитектурах. Более подробную информацию можно найти например здесь:Fault Management on Xeon 5500-based systems
Также, недавно в OpenSolaris внесена поддержка DR. DR(Dynamic Reconfiguration) позволяет вносить в систему и отключать от нее компоненты прямо на лету, что может быть крайне полезно при сервисных операциях. Судя по всему OpenSolaris поддерживает еще и это: c0t0d0s0.org и PSARC/2009/104 - спецификация
Ссылки
Презентация Intel, посвященная технологиям Solaris на Sun Tech Days 2009: Solaris On Xeon
О поддержке Nehalem в Solaris:
5500: Using the Solaris systems to Optimize Xeon Processor 5500 Series
5600 и 7500: Oracle Solaris System - Optimized for Xeon 5600 and 7500 Processor Series