null

Технологии Intel и Solaris.

Одной из основных маркетологических ошибок 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

К списку статей

 

Интересуюсь по большей части системным анализом программного обеспечения: поиском багов и анализом неисправностей, а также системным программированием (и не оставляю надежд запилить свою операционку, хотя нехватка времени сказывается :) ). Программированием увлекаюсь с 12 лет, но так уж получилось, что стал я инженером.

Основная сфера моей деятельности связана с поддержкой Solaris и оборудования Sun/Oracle, хотя в последнее время к ним прибавились технологии виртуализации (линейка Citrix Xen) и всякое разное от IBM - от xSeries до Power. Учусь на кафедре Вычислительной Техники НИУ ИТМО.

See you...out there!

http://www.facebook.com/profile.php?id=100001947776045
https://twitter.com/AnnoyingBugs

Ничего не найдено. n is 0