Человечество на сегодняшний день использует огромные вычислительные ресурсы. Энергопотребление датацентров по всему миру в 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 (найти долю рынка) делают невозможным применение этой технологии к массовому рынку вычислений.
- Оценить количество компьютеров под управлением Linux
- клиенты: ChromeOS, Ubuntu
- серверы
- Оценить среднюю нагрузку клиентов (низкая) и серверов (средняя) - в процентах
- Предположить, что основным на клиентских машинах является веб-браузер (найти статистику), а на серверах - серверные приложения среднего/большого размера.
- Замерить/оценить эффект от ускорения при помощи BOLT (для браузера на бенчмарках, для серверных приложений - среднее из статей).
- Оценить уменьшение требуемого количества серверов, энергопотребления на клиентах.
Разработать систему для автоматического применения технологии BOLT на компьютере под управлением ОС Linux.
- Изучить методологию замера производительности в ОС Linux.
- Выработать подход к автоматическому сбору профиля и мониторингу производительности.
- Практическая
- Разработана методология замера производительности.
- Реализованы средства автоматического замера производительности (скрипт, обработка результатов).
- Реализована система автоматического сбора профильной информации и
применения технологии BOLT:
- Проект опубликован на Github.com,
- с открытым кодом и свободной лицензией,
- открытый для пользователей и сторонних разработчиков,
- с возможностью установки и применения на компьютерах под управлением ОС Linux.
- Научная
- Собраны данные производительности для широкого спектра пользовательских программ (IPC, icache/itlb miss, branch mispredictions).
- Собраны данные по эффекту применения технологии BOLT к широкому спектру пользовательских программ.
- Выбрать проекты для измерения производительности (Chromium, Clang)
- Измерить базовую производительность приложения.
- Разработать системный демон:
- Сбор профильной информации с использованием Linux perf (perf record).
- Анализ применимости оптимизации BOLT к приложению (размер секции кода (.text), количество icache/itlb промахов в кэш, ошибок предсказания переходов).
- Ротация профильной информации: автоматическое очищение старых/неиспользуемых данных: log rotation.
- Применение BOLT к приложению по достижении заданного объема профильной информации.
- Замена оригинального приложения на оптимизированное с использованием символьных ссылок.
- Мониторинг эффективности оптимизаций (анализ производительности до/после: среднее IPC, количество промахов в кэши).
- Обработка ошибок (отслеживание падений BOLT, падений в оптимизированном приложении), исключение приложений из оптимизации, blacklist/whitelist.
- Компьютер с Linux, навыки работы в командной строке.
- Процессор: желательно Интел NHM и выше (наличие LBR).
- Программирование на Python/Go/любой скриптовый язык (скрипт запуска, обработка результатов, драйвер).
7/10 и выше
Добавить обмен профильной информации между несколькими компьютерами для уменьшения накладных расходов на сбор профиля и повышения качества профиля.
- Изучить технологии построения клиент-серверных приложений.
- Научная
- Спроектирована система, позволяющая осуществлять обмен профильной информацией между многими компьютерами (либо клиент-серверная, либо peer-to-peer).
- Разработать систему обмена профильной информацией:
- Спроектировать протокол обмена информацией между участниками, например:
- клиент запрашивает у сервера наличие профиля для данного приложения (передает хэш приложения)
- сервер отдает профильную информацию или сообщение об ошибке
- если множество серверов исполняют одно приложение и на каждом имеется
профильная информация, имеет смысл организовать обмен между компьютерами при
помощи сети peer-to-peer (протокол BitTorrent):
- широковещательный запрос по данному хэшу приложения
- формирование ростера серверов с наличием профиля
- сервера в ростере начинают обмен профилями, т.ч. каждый сервер держит копию профилей других компьютеров
- клиент забирает профиль каждого сервера со всех серверов (BitTorrent)
- на сервере: ротация временных профилей
- Разработать реализацию, протестировать на физическом сервере + одной/двух/N виртуальных машинах, объединенных в локальную сеть.