Skip to content

Latest commit

 

History

History
167 lines (147 loc) · 15 KB

perfd.md

File metadata and controls

167 lines (147 loc) · 15 KB

perfd системный демон

Актуальность

Человечество на сегодняшний день использует огромные вычислительные ресурсы. Энергопотребление датацентров по всему миру в 2018 году составляло приблизительно 200 ТВт/ч или 17 млн тонн нефтяного эквивалента в год. Много это или мало? На 2018 год вся Австралия потребляла электроэнергии приблизительно 18 млн тонн нефтяного эквивалента в год (источник).

Для сравнения, суммарный объем потребления электричества в 2018 по всему миру во всех отраслях составлял 1920 млн тонн нефтяного эквивалента в год согласно отчету Мирового энергетического агентства. Таким образом, датацентры потребляли порядка 0.8% мировой электроэнергии.

Ожидается, что объем вычислений и использование сетевых технологий только продолжит расти: согласно прогнозу шведского исследователя Андреса Андраэ (статья), к 2030 году потребление электричества всеми информационно-телекоммуникационными службами вырастет до 21% всей потребляемой человечеством электроэнергии. Таким образом в целях сокращения потребления энергоресурсов человечество заинтересовано в повышении эффективности компьютерных вычислений.

Экономия одного процента от текущего энергопотребления мировых датацентров равняется приблизительно 2 ТВт/ч или 0,17 млн тонн нефтяного эквивалента в год. В пересчете на нефть, это 1.16 млн баррелей нефти. По состоянию на 7 января 2022 года, один баррель нефти марки Брент стоил 81.93 доллара США. Итого, экономия одного процента электроэнергии в мировых датацентрах "стоит" 95 млн долларов США.

Технологические компании всех размеров заинтересованы в оптимизации собственных приложений с целью экономии электроэнергии и обслуживания большего числа пользователей. [Найти заявления об экологии от Google/Facebook.]

Самые крупные компании тратят существенные ресурсы на максимальную оптимизацию собственных приложений и инвестируют в разработку новых методов оптимизации. К примеру, Google инвестировал в разработку технологий AutoFDO и ThinLTO, Facebook инвестировал в разработку BOLT. Компании Intel и Apple инвестируют в разработку и улучшение компилятора Clang/LLVM, Red Hat - в улучшение компилятора GCC. Nvidia инвестирует в разработку компилятора Flang/LLVM для языка Fortran.

Многие улучшения, разработанные в корпорациях, напрямую применимы к клиентским и серверным приложениям, работающим на компьютерах конечных пользователей и в датацентрах. К таким улучшениям относятся компиляторные оптимизации, реализованные в компиляторах GCC и Clang. К примеру, браузеры Google Chrome и Firefox компилируются при помощи компилятора Clang.

С другой стороны, некоторые технологии оказываются плохо применимы к нуждам конечных пользователей, так как опираются на внутреннюю инфраструктуру корпораций. К таким технологиям относятся: бинарный оптимизатор BOLT (Facebook) и система Propeller (Google).

Технологии ускорения BOLT/Propeller позволяют достичь пиковой производительности приложений, так как направлены на оптимизацию раскладки бинарного кода приложения с учетом профиля исполнения, что невозможно выполнить с аналогичной точностью в компиляторе.

Существуют компании, которые оказывают услуги по оптимизации использования серверных ресурсов в облачных хостингах (optimyze.cloud). Такие компании настраивают сбор профильной информации и делают возможным применение технологий BOLT и AutoFDO. Однако они лишь воспроизводят подход, который применяется внутри корпораций, а не создают систему, пригодную для широкого круга пользователей.

На сегодняшний день не существует системы для автоматического сбора профильной информации и автоматического применения оптимизации раскладки кода для массовых компьютерных систем под управлением ОС Linux.

IBM ранее разрабатывал подобную систему для собственных серверов с процессорами Power под управлением z/OS и Linux под названием FDPR - Feedback-directed program reordering. Однако закрытость системы и нишевость процессоров Power (найти долю рынка) делают невозможным применение этой технологии к массовому рынку вычислений.

Экономическая оценка эффекта применения автоматической оптимизации

  1. Оценить количество компьютеров под управлением Linux
    • клиенты: ChromeOS, Ubuntu
    • серверы
  2. Оценить среднюю нагрузку клиентов (низкая) и серверов (средняя) - в процентах
  3. Предположить, что основным на клиентских машинах является веб-браузер (найти статистику), а на серверах - серверные приложения среднего/большого размера.
  4. Замерить/оценить эффект от ускорения при помощи BOLT (для браузера на бенчмарках, для серверных приложений - среднее из статей).
  5. Оценить уменьшение требуемого количества серверов, энергопотребления на клиентах.

Цель

Разработать систему для автоматического применения технологии BOLT на компьютере под управлением ОС Linux.

Задачи

  • Изучить методологию замера производительности в ОС Linux.
  • Выработать подход к автоматическому сбору профиля и мониторингу производительности.

Новизна

  • Практическая
    • Разработана методология замера производительности.
    • Реализованы средства автоматического замера производительности (скрипт, обработка результатов).
    • Реализована система автоматического сбора профильной информации и применения технологии BOLT:
      • Проект опубликован на Github.com,
      • с открытым кодом и свободной лицензией,
      • открытый для пользователей и сторонних разработчиков,
      • с возможностью установки и применения на компьютерах под управлением ОС Linux.
  • Научная
    • Собраны данные производительности для широкого спектра пользовательских программ (IPC, icache/itlb miss, branch mispredictions).
    • Собраны данные по эффекту применения технологии BOLT к широкому спектру пользовательских программ.

План

  1. Выбрать проекты для измерения производительности (Chromium, Clang)
  2. Измерить базовую производительность приложения.
  3. Разработать системный демон:
  • Сбор профильной информации с использованием Linux perf (perf record).
  • Анализ применимости оптимизации BOLT к приложению (размер секции кода (.text), количество icache/itlb промахов в кэш, ошибок предсказания переходов).
  • Ротация профильной информации: автоматическое очищение старых/неиспользуемых данных: log rotation.
  • Применение BOLT к приложению по достижении заданного объема профильной информации.
  • Замена оригинального приложения на оптимизированное с использованием символьных ссылок.
  • Мониторинг эффективности оптимизаций (анализ производительности до/после: среднее IPC, количество промахов в кэши).
  • Обработка ошибок (отслеживание падений BOLT, падений в оптимизированном приложении), исключение приложений из оптимизации, blacklist/whitelist.

Требования

  1. Компьютер с Linux, навыки работы в командной строке.
  2. Процессор: желательно Интел NHM и выше (наличие LBR).
  3. Программирование на Python/Go/любой скриптовый язык (скрипт запуска, обработка результатов, драйвер).

Трудоёмкость

7/10 и выше

План реализации

План реализации

Расширения

Добавить обмен профильной информации между несколькими компьютерами для уменьшения накладных расходов на сбор профиля и повышения качества профиля.

Задачи

  • Изучить технологии построения клиент-серверных приложений.

Новизна

  • Научная
    • Спроектирована система, позволяющая осуществлять обмен профильной информацией между многими компьютерами (либо клиент-серверная, либо peer-to-peer).

План

  1. Разработать систему обмена профильной информацией:
  • Спроектировать протокол обмена информацией между участниками, например:
    • клиент запрашивает у сервера наличие профиля для данного приложения (передает хэш приложения)
    • сервер отдает профильную информацию или сообщение об ошибке
    • если множество серверов исполняют одно приложение и на каждом имеется профильная информация, имеет смысл организовать обмен между компьютерами при помощи сети peer-to-peer (протокол BitTorrent):
      • широковещательный запрос по данному хэшу приложения
      • формирование ростера серверов с наличием профиля
      • сервера в ростере начинают обмен профилями, т.ч. каждый сервер держит копию профилей других компьютеров
      • клиент забирает профиль каждого сервера со всех серверов (BitTorrent)
      • на сервере: ротация временных профилей
  • Разработать реализацию, протестировать на физическом сервере + одной/двух/N виртуальных машинах, объединенных в локальную сеть.