Red Hat Enterprise Linux 6 Оптимизация производительности



Pdf просмотр
страница3/7
Дата04.11.2016
Размер0.66 Mb.
Просмотров1286
Скачиваний1
1   2   3   4   5   6   7
m an valgrind. Дополнительная д окументация:
/usr/share/doc/valgrind-<версия>/valgrind_m версия l/index.htm Раздел, Профилирование памяти при помощи Valgrind»
содержит дальнейшую информацию. Perf

perf предоставляет набор счетчиков, с помощью которых пользователь может оценить результаты выполнения команд в системе Сбор стандартной статистики системных событий, включая сведения об инструкциях и временных циклах. Флаги помогут получить информацию од ополнительных событиях. В Hat Enterprise Linux 6 Оптимизация производительности команда стала работать с контрольными группами. Подробную информацию можно найти на справочной странице man perf-
stat.
perf Осуществляет сбор данных и сохраняет их в файл, анализ которого может быть выполнен с помощью perf report. Подробную информацию можно найти на справочной странице man perf-record.
perf Получает сведения о производительности из файла и формирует отчет. Подробную информацию можно найти на справочной странице man perf-report.
perf Возвращает список доступных событий. События могут отличаться в зависимости от оборудования мониторинга и конфигурации системы. Подробную информацию можно найти на справочной странице man perf-list.
perf Осуществляет сбор статистики в реальном времени аналогично top. Подробную информацию можно найти на справочной странице man Зад альнейшей информацией обратитесь к руководству по управлению ресурсами по адресу включает инструмент Tuna для изменения настраиваемых параметров системы. Tuna изначально разрабатывался для работы в окружении Realtime, но может использоваться и для настройки стандартных систем Red Hat Enterprise Linux.
Tuna управляет следующими характеристиками:
настройки питания, прерываний и обнаружения ошибок в сетевые параметры, включая использование TCP и объединение прерываний;
вед ение журналов в файловых системах с журналированием;
системное журналирование;
опред еляет процессоры, которые будут обрабатывать прерывания и пользовательские процессы;
использование пространства подкачки обработка исключений нехватки памяти.
За дальнейшей информацией обратитесь к руководству пользователя Tuna и руководству по
настройке Realtime по адресу Глава 3. Анализ производительности Глава 4. Процессор

Современные компьютеры могут быть оборудованы несколькими процессорами, которые представляют собой интегральные схемы, вставляемые в специальный разъем (сокет)
материнской платы. Сокет соединяется с другими сокетами, контроллерами памяти и другими периферийными устройствами. Сточки зрения операционной системы сокет логически объединяет процессоры и их ресурсы Hat Enterprise Linux включает множество инструментов для отслеживания активности процессора. Полученная информация помогает разработать стратегию оптимизации производительности (см. Раздел, Коррекция производительности процессора»
).
Топология
Раньше компьютеры были оборудованы меньшим числом процессоров, что допускало использование симметричной многопроцессорной схемы доступа к памяти (SMP, Symmetric Multi-
Processor). Со временем число процессоров на сокет увеличивалось, и стоимость такой схемы значительно возросла. На сегодняшний день многопроцессорные системы используют неравномерный доступ к памяти (NUMA, Non-Uniform Memory Процессоры AMD уже раньше имели такую инфраструктуру за счет технологии HT (Hyper
Transport), в то время как Intel начал внедрять возможности NUMA в схемы QPI (Quick Path
Interconnect). Конфигурация SMP и NUMA отличается, так как при выделении ресурсов должна учитываться топология системы.
Потоки
В терминологии Linux поток — абстракция для обозначения передачи данных. Потоку выделяется сегмент исполняемого кода, который он может выполнять на процессоре.
Планирование обработки потоков на свободных процессорах осуществляется на уровне операционной системы.
Операционная система распределяет нагрузку между процессорными ядрами, тем самым стараясь максимизировать занятость процессора, но это не означает, что производительность приложений также улучшится. Например, перенос потока на процессор в другой сокет вместо того, чтобы дождаться освобождения текущего процессора, только замедлит работу. Это следует учесть при проектировании высокопроизводительных приложений (см. Раздел Планирование занятости процессоров»
).
Прерывания
Прерывания также могут оказывать влияние на производительность. Запросы прерываний обрабатываются операционной системой и обычно сообщают о наступлении событий, будь то получение данных или завершение операции записи в сеть.
В этой главе будет рассказано, как повысить эффективность обработки прерываний. Топология процессоров. Топология Изначально компьютеры были оборудованы одним процессором. Иллюзия параллельных вычислений создавалась на уровне операционной системы за счет переключения потоков Hat Enterprise Linux 6 Оптимизация производительности Однако увеличение скорости обработки растущего числа заданий не могло продолжаться бесконечно, поэтому впоследствии стали добавляться дополнительные процессоры, что позволило на самом деле реализовать возможности параллелизма.
Ранние многопроцессорные системы использовали параллельную шину для соединения процессора с памятью, выделяя одинаковые сегменты времени для доступа к памяти. Это носит название симметричной многопроцессорности и подходит для небольшого числа процессоров.
Но при увеличении числа процессоров до требования к полосе пропускания существенно возрастают, что оставляет меньше места для периферийных компонентов.
Увеличение числа процессоров возможно за счет объединения следующих компонентов. Последовательные шины. Топологии Последовательные шины характеризуются высокой скоростью передачи пакетов д анных.
Изначально они служили для организации высокоскоростного сообщения между процессорами,
межд у процессорами и контроллерами памяти, и другими периферийными компонентами.
Теперь одна шина может объединять соединений, что существенно сокращает место на плате.
Со временем вместо подключения отдельных процессоров к плате разработчики стали объединять ядра процессоров вод ин модуль, а вместо предоставления равноправного доступа к памяти была разработана стратегия неравномерного доступа. В этой схеме реализации компьютерной памяти каждому сокету выделяется отдельный сегмент памяти для высокоскоростного доступа. Дополнительно сокеты соединены друг с другом, что позволяет им обращаться к памяти других сокетов.
В качестве простого примера рассмотрим плату с двумя сокетами, в каждый из которых подключен ядерный процессорный модуль. Таким образом, общее число процессоров составляет 8. Каждый сокет соединен с модулем памяти размером 4 ГБ, то есть общий объем
ОЗУ составляет 8 ГБ. Представим, что процессоры 0-3 размещены в сокете 0, а 4-7 в сокете Дополнительно каждый сокет сопоставлен отдельному узлу Для доступа процессора c номером 0 к памяти из банка 0 требуется 3 такта один такт для передачи адреса контроллеру памяти, второй для установки доступа к памяти, третий — для выполнения операции записи или чтения. В тоже время для доступа процессора 4 потребуется тактов, так как он расположен в другом сокете, что добавляет две операции — обращение к контроллеру локальной памяти в сокете 1 и обращение к контроллеру удаленной памяти в сокете
0. Если в это время к памяти обращается другой процессор, контроллеры должны будут установить порядок доступа, что, естественно, замедлит работу. Синхронизация кэша процессора с памятью еще больше усложняет зад ачу.
Послед ние модели процессоров Intel (Xeon) и AMD (Opteron) используют функции NUMA. Роль межпроцессорной шины для процессоров AMD выполняет HyperTransport (HT), ад ля Intel —
QuickPath Interconnect (Так как системные архитектуры могут значительно отличаться, точно предсказать снижение производительности вследствие обращения к памяти в других сокетах довольно сложно. Каждое межпроцессорное соединение увеличивает задержку. Так, если для доступа к памяти надо осуществить два перехода по шине, формула расчета времени доступа будет выглядеть так 2N
+ время доступа к памяти где время задержки при подключении к шине).
Принимая это во внимание, высокопроизводительные приложения должны избегать доступа к удаленной памяти в схемах с топологией NUMA, предпочитая локальную память.
Глава 4. Процессор
27
Для этого при проектировании приложений надо ответить наследующие вопросы. Какова топология системы. Где выполняется приложение. Где размещен ближайший банк памяти. Коррекция производительности процессора
В этой секции рассматриваются способы коррекции производительности процессора.
Изначально схема NUMA предназначалась для организации доступа одного процессора к разным банкам памяти. Позднее появились многоядерные процессоры, где ядра получают равные отрезки времени для доступа к локальной памяти и могут совместно использовать кэш.
Нед остаток такого подхода состоит в том, что каждое подключение к памяти, ядру и кэшу над ругом сокете добавляет небольшую зад ержку.
Рисунок 4.1, Локальный иуд аленный доступ к памяти демонстрирует два узла NUMA. Каждый узел включает 4 процессора, контроллер и банк памяти. Последовательность действий при обращении процессоров с узла 1 к памяти. Процессор ядро) передает адрес памяти локальному контроллеру. Контроллер устанавливает доступ к памяти. Процессор выполняет операции чтения и записи в область памяти с заданным ад ресом.
Рисунок 4 .1. Локальный иуд аленный доступ к памяти Hat Enterprise Linux 6 Оптимизация производительности Если процессор на одном узле обращается к банку памяти над ругом узле, цикл выполнения будет таким. Процессор ядро) передает адрес памяти удаленному контроллеру. Удаленный контроллер памяти получает запрос доступа. Контроллер устанавливает доступ к локальному банку памяти. Процессор выполняет операции чтения и записи область памяти с заданным ад ресом.
Таким образом, обращение к удаленной памяти может занять почтив два раза больше времени.
При проектировании высокопроизводительных приложений такие соединения следует минимизировать.
При этом следует учитывать:
топологию системы (схему связи компонентов);
процессорное ядро, на котором запускается программа;
расположение банка памяти Hat Enterprise Linux 6 предоставляет инструменты для коррекции производительности систем NUMA. Они будут рассмотрены ниже .1.2.1. taskset

taskset позволяет привязать процесс к определенному процессору. Недостаток состоит в том,
что taskset не гарантирует выделение локальной памяти. Эту функцию успешно выполняет (см. Раздел, Процессоры определяются с помощью маски. Минимальное значение соответствует первому процессору, максимальное — последнему. Например, 0x00000001 может обозначать процессор с номером 0, а 0x00000003 — процессоры 0 и Ниже приведена команда привязки работающего процесса к процессору, заданному с помощью маски taskset -p маска Следующая команда привяжет заданную программу к процессору. Значение программа может содержать ее имя и аргументы taskset маска -- программа
Аргумент -c позволяет определить список или диапазон процессоров taskset -c 0,5,7-9 -- Подробную информацию можно найти на справочной странице man taskset.
4 .1.2.2. numactl
num actl выполняет процессы в соответствии с политикой распределения памяти. Политика определяет правила для заданного процесса и его дочерних процессов. numactl получает топологию системы из Глава 4. Процессор
29
Файловая система /sys содержит схему соединения процессоров, памяти и периферийных устройств. Так, например, /sys/devices/system/cpu содержит информацию о процессорах, а
/sys/devices/system /node — об узлах NUMA и их взаимном расположении.
В системах NUMA расстояние между процессором и памятью имеет огромное значение — чем дальше они расположены, тем медленнее доступ. Поэтому при проектировании требовательных к производительности приложений следует выбирать память из наиболее близкого банка.
Высокопроизвод ительные приложения — особенно многопоточные — должны выполняться на нескольких процессорных ядрах. Так как размер кэша первого уровня небольшой, то при выполнении нескольких потоков на одном ядре не исключена вероятность того, что один поток вытеснит из кэша данные, используемые предыдущим потоком. Таким образом, часть времени будет затрачена на поочередную запись в кэш. Чтобы этого не случилось, рекомендуется привязать приложение не код ному процессорному ядру, а к узлу, что позволит потокам совместно использовать кэш на разных уровнях. Исключение составляют приложения,
использующие одни и те же данные в кэше, — их производительность при выполнении на одном процессорном ядре не пострадает позволяет привязать приложение код ному процессорному ядру или узлу NUMA и выделить локальную память. Доступные параметры включают:
--show
Возвращает настройки правил NUMA для текущего процесса. Пример numactl -Возвращает список доступных узлов.
--membind
Выд еляет память только назад анных узлах. Если памяти недостаточно, команда вернет ошибку. Формат numactl --membind=список_узлов программа. Список узлов может содержать разделенные запятой номера узлов и диапазоны. Подробную информацию можно найти на справочной странице man Выполнение программы и дочерних процессов на процессорах, принадлежащих указанным узлам. Формат numactl --cpunodebind=список_узлов программа. Список узлов содержит разделенные запятой номера узлов и диапазоны. Подробную информацию можно найти на справочной странице man Выполнение программы и дочерних процессов на указанных процессорах. Формат
num actl --physcpubind=список_процессоров программа. Список содержит разделенные запятой номера процессоров (номера можно получить из
/proc/cpuinfo.) Подробную информацию можно найти на справочной странице m an
num Память должна выделяться только на текущем узле Hat Enterprise Linux 6 Оптимизация производительности Если возможно, память будет выделяться назад анном узле. В случае неудачи будут выбираться другие узлы. Формат numactl --preferred=номер_узла. Подробную информацию можно найти на справочной странице man Пакет numactl включает в свой состав библиотеку libnuma, которая предоставляет интерфейс для создания собственной политики NUMA. За подробной информацией обратитесь к справочной странице man numa(3).
4.1.3. Важно был разработан Энд и Клином и изначально представлял собой сценарий Впоследствии он был существенно доработан и добавлен в Red Hat Enterprise Linux Несмотря на то что утилита numastat полностью совместима со своей ранней версией, их параметры и результаты работы могут значительно отличаться выводит статистику распределения памяти (включая попадание и промахи) для процессов и операционной системы. По умолчанию numastat покажет число занятых страниц памяти и список событий для каждого узла Оптимальная производительность характеризуется низкими значениями numa_miss и
num a_foreign.
numastat также возвращает информацию о распределении памяти между узлами Можно сопоставить результаты numastat и top, чтобы убедиться, что потоки выполняются на тех же узлах, где была выделена память.
Станд артная статистика
numa_hit
Число успешно выделенных страниц на узле.
numa_miss
Число страниц, которые должны были быть выделены над ругом узле, но из-за нехватки памяти были выделены на текущем узле. Каждому событию numa_miss соответствует событие numa_foreign над ругом узле.
numa_foreign
Число страниц, выделенных над ругом узле, которые изначально были предназначены для текущего узла. Каждому событию numa_foreign соответствует событие
num a_m iss над ругом узле.
interleave_hit
Число успешно выделенных страниц с использованием черед ования.
Глава 4. Процессор
31
Число успешно выделенных страниц памяти для локального процесса.
other_node
Число страниц, выделенных на этом узле процессу, выполняемому над ругом узле.
Д алее перечислены параметры, которые в качестве единиц измерения используют мегабайты.
-c
Компактное представление таблицы данных. Обычно используется при наличии большого числа узлов NUMA, однако ширину столбцов и расстояние между ними предсказать невозможно. Размер памяти будет округляться до ближайшего мегабайта.
-m
Возвращает статистику памяти для каждого узла. Формат аналогичен Возвращает туже информацию что и исходная версия numastat (numa_hit, numa_miss,
numa_foreign, interleave_hit, local_node, other_node) в обновленном формате с использованием мегабайт в качестве единиц измерения шаблон

Возвращает информацию о распределении памяти в соответствии с заданным шаблоном. Если шаблон содержит цифры, numastat интерпретирует их как идентификатор процесса. В противном случае numastat будет искать совпадение в строках команд За параметром -p следуют дополнительные фильтры.
-s
Сортировка результатов по убыванию, то есть процессы, потребляющие больше всего ресурсов в соответствии с содержимым столбца total, будут приведены вначале списка.
Если дополнительно указать узел, таблица будет отсортирована по узлам. Пример -Параметр и значение нед олжны разделяться пробелом.
-v
Под робный вывод Возвращает версию numastat.
Red Hat Enterprise Linux 6 Оптимизация производительности Исключает строки и столбцы с нулевыми значениями. При этом значения, которые округляются до нуля, не будут отфильтрованы. numad

numad — средство для привязки процессов к процессорам исходя из топологии NUMA. следит за топологией и динамически подстраивается к изменениям конфигурации, тем самым поддерживая должный уровень производ ительности.
В некоторых случаях numad может улучшить производительность до периодически запрашивает информацию из /proc и пытается поместить критические процессы на узлы со свободными ресурсами, где производительность будет максимальна. Минимальные требования составляют 50% ресурсов одного процессора и 300 МБ памяти. Необходимый уровень производительности поддерживается за счет переноса процессов между узлами NUMA по мере освобождения их ресурсов также предоставляет рекомендации, которые могут использоваться другими инструментами управления задачами. За более подробной информацией обратитесь к описанию параметра -w на справочной странице man numad.
4 .1.4 .1. Достоинства особенно подходит для продолжительных ресурсоемких процессов, особенно если область их выполнения ограничена лишь подмножеством ресурсов может улучшить производительность приложений, выполняющихся на нескольких узлах. Но приросте потребляемых ресурсов эффективность numad пад ает.
Д ля коротких процессов, не потребляющих много ресурсов, numad не требуется — также как и для систем с непоследовательным обращением к памяти .1.4 .2. Режимы работы

Примечание
При объединении больших объемов памяти службой KSM статистика ядра может оказаться непоследовательной. В будущих выпусках функции работы св будет усовершенствованы, нона сегодняшний день в системах в большими объемами свободной памяти рекомендуется отключить KSM.
numad может работать как:
служба,
исполняемый модуль как служба
Работающая служба numad будет динамически корректировать нагрузку.
Запуск службы service numad Глава 4. Процессор
33
Чтобы запуск происходил при каждой загрузке системы chkconfig numad on
4 .1.4 .2.2. numad как исполняемый модуль Команда запуска numad
numad будет работать, пока он не будет остановлен. События будут регистрироваться в
/var/log/num Для управления конкретным процессом выполните numad -S 0 -p PID
-p Добавляет заданный процесс в список обработки. Добавленный процесс будет обработан, только если он удовлетворяет минимальным требованиям обслуживания режим
Параметр -S определяет режим проверки процессов. Так, значение 0 ограничивает управление процессами, включенными в список обработки.
Остановка numad:
# numad -i После остановки numad изменения сопоставлений NUMA не будут отменены. При значительном изменении нагрузки numad динамически перераспределит ресурсы.
Под робную информацию о numad можно найти на справочной странице man numad.
4.2. Планирование занятости процессоров
Планировщик распределяет нагрузку между процессорами в соответствии с существующими правилами, поддерживая их максимальную занятость. Правила определяют время выполнения потока на одном процессорном яд ре.
Политики планирования подразделяются над ве категории. Планирование в реальном времени. Стандартное планирование Hat Enterprise Linux 6 Оптимизация производительности. Планирование в реальном времени

Планирование выполнения потоков реального времени выполняется в первую очеред ь.
Эти правила применяются к критическим процессам, которые должны завершены как можно быстрее.
SCHED_FIFO
Это правило присваивает потокам фиксированный приоритет отд о 99. Планировщик проверяет список потоков SCHED_FIFO и запускает поток с наивысшим приоритетом.
Поток будет выполняться до тех пор, пока не завершит работу или не будет вытеснен другим потоком с более высоким приоритетом.
Д аже потоки с наименьшим приоритетом будут выполняться до потоков других типов.
При наличии единственного потока, работающего в реальном времени, значение
SCHED_FIFO будет игнорироваться.
SCHED_RR
Это циклический вариант правила SCHED_FIFO. Потокам также присваивается приоритет отд о 99, и потоки с одинаковым приоритетом будут последовательно выполняться в рамках выделенного интервала. Пользователь не может изменить интервал, но может его узнать при помощи sched_rr_get_interval(2). Обычно это правило применяется при наличии потоков с одинаковым приоритетом.
Под робную информацию о планировании выполнения потоков можно найти в описании стандарта по адресу Изначально рекомендуется выбирать низкий приоритет и увеличивать его только в том случае,
если была обнаружена заметная задержка при выполнении. Потокам реального времени не выделяются фрагменты времени потоки SCHED_FIFO будут выполняться до тех пор, пока они не завершат работу или не будут вытеснены другими потоками с более высоким приоритетом. Не рекомендуется присваивать значение 99, так как высокий приоритет обычно имеют процессы миграции и мониторинга. Если они будут вытеснены другими процессами, это может привести к блокированию вод нопроцессорных системах.
В ядре правило SCHED_FIFO также предусматривает механизм ограничения, который предотвращает монопольное использование процессорных ресурсов. Его конфигурацию можно изменить с помощью:
/proc/sys/kernel/sched_rt_period_us
Интервал времени в микросекундах, характеризующий 100% полосы пропускания. По умолчанию равен 1000000 мкс (1 сек Интервал выполнения потоков реального времени (в микросекундах. По умолчанию равен 950000 мкс, что эквивалентно 0.95 сек. Стандартное планирование

Глава 4. Процессор
35
Стандартные правила включают SCHED_OTHER, SCHED_BATCH и SCHED_IDLE. При этом
SCHED_BAT CH и SCHED_IDLE предназначены для задач с низким приоритетом и подробно рассматриваться не будут или Используется по умолчанию. Распределение ресурсов осуществляется при помощи планировщика CFS (Completely Fair Scheduler), который приоритизирует потоки в зависимости от значения niceness (более подробно об этом рассказывается в
руководстве по развертыванию. Несмотря на то что пользователь в определенной мере может управлять приоритетом, его динамическое изменение возможно только при помощи CFS.

Каталог: documentation -> ru-RU -> Red Hat Enterprise Linux
Red Hat Enterprise Linux -> Руководство по установке Установка Red Hat Enterprise Linux 7 на разных платформах
Red Hat Enterprise Linux -> Red Hat Enterprise Linux 6 Примечания к выпуску
Red Hat Enterprise Linux -> Red Hat Enterprise Linux 6 Администрирование виртуального сервера
Red Hat Enterprise Linux -> Red Hat Enterprise Linux 5 Обзор Cluster Suite
Red Hat Enterprise Linux -> Руководство по установке Установка Red Hat Enterprise Linux 6 на разных платформах Редакция 0
Red Hat Enterprise Linux -> Red Hat Enterprise Linux 6 Администрирование кластера
Red Hat Enterprise Linux -> Red Hat Enterprise Linux 6 Управление энергопотреблением


Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал