Как стать автором
Обновить
VK
Технологии, которые объединяют

Tarantool на процессорах Apple M1: первые результаты

Время на прочтение4 мин
Количество просмотров9.2K


Spiderman + Youtube speedpaint by RowenHebing


Процессоры M1 от Apple уже давно не новость. Многие знают об их быстродействии и о том, что приложения для MacOS нужно адаптировать под новую архитектуру. В команде разработки платформы Tarantool мы тоже недавно поставили перед собой такую задачу.


Я, Алексей Корякин, технический директор Tarantool, входящего в экосистему VK. Расскажу, зачем нам вообще это было нужно (ведь macOS не устанавливают на продакшен-серверы), как мы решали задачу, и покажу результаты бенчмарков.


Как появилась задача и как ее решали


Tarantool — высокопроизводительная платформа in-memory-вычислений, которая состоит из базы данных и application-сервера. Зачастую разработчики устанавливают Tarantool на свои рабочие машины и пишут код там. Для многих это удобней, чем работать на отдельном сервере, особенно если у них один рабочий компьютер.


Некоторые разработчики из нашей команды тоже устанавливают себе Tarantool локально. Так же делает и наш product-менеджер, который в начале года купил новый MacBook Air с процессором M1. И вот однажды он пришел к технической команде с вопросом: «А почему Tarantool не работает нативно на процессоре M1? Я недавно купил новый MacBook Air, а Tarantool запускается только через Rosetta. Нативная поддержка процессоров Apple M1 могла бы стать отличным плюсом Tarantool для нашего комьюнити, чтобы коллеги, переехавшие на перспективные маки, могли эффективно разрабатывать системы под Tarantool».


Техническая команда подумала и решила:


  1. Tarantool известен тем, что он очень быстрый. M1 известен тем же. Нам стало интересно, а насколько быстрее может стать Tarantool, если посадить его на M1?
  2. Apple активно обновляет всю линейку компьютеров Mac, переводя их на M1 (а теперь и на M1 Max), а разработчики и другие ИТ-специалисты по всему миру активно пересаживаются на новую платформу. Существующий x86_64-софт запускается через прослойку эмуляции Rosetta, которая не позволяет полноценно использовать всю мощь софта (включая Tarantool) на новых процессорах Apple. Надо это исправлять.

Именно так у нас появилась новая приоритетная задача — поддержка процессора M1🙃


Примерно в то же время мы работали над поддержкой ARM64 для Linux. Так как M1 — это тоже, по сути, ARM64 со своей спецификой, мы решили, что сможем просто реализовать поддержку M1. Это оказалось близко к правде: большую часть задач по поддержке M1 мы закрыли поддержкой ARM64 для Linux. Основные проблемы были связаны со спецификой инструкций RISC архитектуры ARM (например, директ-передача управления от одного участка машинного кода другому возможна только в рамках 2 Мб смещений). Отличительной особенностью поддержки M1 стало Apple ABI, отличающееся от ARM Linux ABI. Пришлось тюнить код Tarantool специально под новые процессоры, подглядывая в открытую документацию Apple.


В целом поддержка ARM64 и M1 в частности — относительно простая инженерная задача. Были небольшие особенности, но они решались просто, без чтения тонны спецификаций и работы по ночам. На все у нас ушло примерно 4 месяца, с мая по август.


Бенчмарк производительности


M1 известен своим быстродействием. Даже код, запускаемый через Rosetta, работает быстро. Мы тоже не обошли вопрос производительности стороной, решили проверить, насколько же быстрее стал наш Tarantool.


Мы сравнивали именно macOS на доступных commodity-устройствах с разной начинкой. У нас не было задачи сравнить разные ОС или гоняться с серверными процессорами вроде Xeon. Мы хотели узнать, насколько быстрее станет Tarantool для разработчика, который пересядет на новый макбук, а также предварительно оценить перспективы новой Mac-платформы. Для теста использовались несколько компьютеров, которые сейчас можно встретить у разработчиков или купить в re:Store:


  • MacBook Pro 16,2 (2020),
  • Mac mini 8,1 (2018),
  • MacBook Air 10,1 (2020), Apple M1.

Мы написали простой бенчмарк, у которого есть три составляющие:


  1. Это код на Lua, а значит, задействуется application-сервер.
  2. Этот код пишет в базу данных, а значит, задействуется транзакционный движок БД.
  3. Этот код работает на М1 и не падает :)

Бенчмарк работает в одном системном треде, который запускает 50 файберов, каждый из которых вставляет по 100 операций за одну транзакцию. Такой сценарий выдает больше нагрузки на CPU, чем на память или диск. А раз мы тестируем процессор, это именно то, что нам нужно. Если бы транзакция состояла из одного или 3–4 апдейтов, тогда нагрузка сместилась бы скорее на RAM или диск, а не на CPU.


Мы проводили несколько тестов, вставляя от 1 до 20 миллионов записей. Причем каждый тест мы проводили по 15 раз и потом рассчитали медианное значение. Вот полные результаты, там можно детально посмотреть на все запуски. А тут для наглядности мы покажем медианные значения в виде графиков.



Wall Clock Benchmark, медианное значение 15 запусков. Чем меньше значение, тем быстрее отработал код


Видим, что Tarantool на ноутбуке с процессором M1 показывает в 2 раза лучшие результаты, чем на ноутбуке того же года с другим процессором.


Также мы протестировали M1 при работе через транслятор Rosetta. По уровню производительности он оказался примерно равным Mac mini 2018 года, но заметно быстрее MacBook Pro 2020 года.



Wall Clock Benchmark. Те же устройства плюс запуск через Rosetta


Мы понимаем, что это не означает ускорение всех приложений в два раза. У всех специфичный код, разные задачи и условия. Но в любом случае можно ожидать, что ваша локальная инсталляция Tarantool будет работать быстрее.


Что в итоге?


Начиная с версии 2.10.0-beta, Tarantool можно нативно запускать на процессорах M1. Пока что это preliminary-поддержка: что-то может сломаться или работать нестабильно. Сейчас мы закрыли почти все известные нам баги, осталось только несколько некритичных. Например, есть некоторые проблемы с JIT-компилятором. Но это не помешало product-менеджеру команды установить Tarantool на свой новый MacBook Air и каждый день с ним работать.


Дальше мы будем закрывать известные нам баги, а также те, которые будут присылать разработчики. Если у вас есть новый мак на процессоре M1, предлагаем попробовать новую версию Tarantool. Если у вас что-то не заработает — пишите баг-репорт, мы поможем.


Попробовать кластер Tarantool можно на try.tarantool.io, а получить помощь — в Telegram-чате.
Теги:
Хабы:
Всего голосов 37: ↑35 и ↓2+33
Комментарии9

Публикации

Информация

Сайт
team.vk.company
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия
Представитель
Руслан Дзасохов