Pull to refresh
Dodo Engineering
О том, как разработчики строят IT в Dodo

Поддержка Apple Silicon в .NET 6.0: пробуждение силы

Reading time7 min
Views11K

8 ноября 2021 года вышел релиз .NET 6.0. В нём появилась поддержка архитектуры ARM на MacOS. И этому мы очень рады, потому что давно хотели использовать новые MacBook с процессорами ARM в работе, но не могли, т.к .NET на них сначала вообще не работал, а потом работал очень медленно.

В этой статье я расскажу о том, на каких компьютерах мы программируем сейчас, какие перспективы теперь перед нами открываются, как работать с инструментами в .NET 6 на компьютерах с M1, а перед этим немного погрузимся в историю развития процессоров ARM.

Начнём с истории процессоров x86 и ARM

Семейство процессоров x86 появилось в конце семидесятых и с тех пор надёжно закрепилось как основная архитектура персональных компьютеров. Успех x86 во многом состоялся благодаря компании Intel, которая течение почти 30 лет удерживала первенство в микропроцессорах как в плане технологий, так и в бизнесе. При этом x86 в основном использовался в персональных компьютерах и серверах. Но в середине 2000-х начали появляться новые классы устройств — коммуникаторы, смартфоны, планшеты. Они не могли использовать x86 по ряду причин, вот некоторые из них:

  • в первую очередь Intel сама не хотела, потому что не считала это перспективным;

  • существующие в тот момент процессоры х86 были не энергоэффективные и не подходили под носимую электронику;

  • у процессоров х86 — закрытая архитектура и невозможно вносить изменения без лицензии.

Производители носимой электроники стали использовать процессоры на архитектуре ARM, т.к. её проще лицензировать и можно производить по заказу — в общем, рынок был свободнее. Стали появляться новые игроки, такие как Qualcomm, Samsung, NVIDIA. Появились новые типы устройств (например, в большинстве контроллеров SSD-накопителей есть ARM-чип). И пусть ARM не мог ничего противопоставить Intel x86 на рынке компьютеров и серверов, но в эти процессоры начали вкладывать деньги.

В 2007 компания Apple выпустила первый iPhone с процессором ARM производства Samsung. Уже через три года вышел iPhone 4 с процессором собственной разработки на архитектуре ARM.

Apple купила компанию по проектированию процессоров в 2008 году и с тех пор для своей электроники старалась использовать только свои процессоры. Тогда же начал распространяться слух, что Apple будет переходить на собственные процессоры, в том числе и для ПК.

При сравнении мощности процессоров серии A с процессорами Intel становилось понятно, что Apple продолжит улучшать из года в год производительность и рано или поздно догонит Intel.

Из графика видно, что Apple каждый год увеличивает производительность раза в полтора, тогда как Intel замедляется.
Из графика видно, что Apple каждый год увеличивает производительность раза в полтора, тогда как Intel замедляется.

В iPad 2018 года выпуска процессор ARM был схож по производительности с Intel Core i7 — это явно говорило о том, что рано или поздно переход произойдёт.

Apple постепенно начала «ломать» обратную совместимость в операционной системе, как бы подготавливая всех к большим изменениям. Сначала они сделали нотаризацию, затем запретили пользоваться 32-битными приложениями, тем самым заставляя разработчиков постоянно обновлять приложения и работать на новых версиях MacOS. Было очевидно, что сама MacOS приближается к iOS, её смартфоновому брату.

Тут стоит отметить, что у Apple уже был опыт смены архитектуры процессоров: компьютеры Mac до 2006 года использовали PowerPC, а до 1997 – Motorola. Причиной перехода с PowerPC на Intel стала производительность и экономия энергии. Примечательно, что ровно те же причины подтолкнули к переходу c Intel на Apple Silicon.

Летом 2020 года Apple объявила о начале перехода, который должен занять около двух лет. Вместе с анонсом был выпущен бесплатный Developer Transition Kit (DTK), чтобы разработчики могли к этому переходу  подготовиться.

В ноябре того же года появились первые компьютеры с процессором Apple M1. Показанные процессоры Apple опережали аналоги от Intel и AMD практически по всем характеристикам:

  • Энергопотребление. При одинаковой мощности, Apple M1 потребляет гораздо меньше энергии. Это прямо влияет на время работы ноутбука от батареи — MacBook Pro с M1 может работать от неё 20 часов.

  • Мощность. До M1 все процессоры делились на десктопные и мобильные серии. Процессоры Intel для настольных компьютеров были мощнее, но потребляли больше энергии (примерно 100Вт). Ноутбучные, наоборот, были гораздо слабее, но и потребляли значительно меньше энергии (5-35Вт). M1 потребляет энергии как мобильный процессор, а работает как десктопный, полностью стирая грань между ними.
    У MacBook Air даже нет вентилятора охлаждения, при этом по разнообразным тестам он работает так же, как десктопные Intel — в компиляции, транскодировании видео и в других задачах. Но через 15-20 минут начинает замедляться, поэтому для продолжительной 100% нагрузки лучше брать MacBook Pro, так как у него есть вентилятор.

  • Цена. Для Apple такой процессор обходится дешевле, следовательно, стоимость компьютера тоже становится ниже.

За что мы любим ноутбуки от Apple

С 2015 года для менеджеров мы закупаем только MacBook Air. Причин для этого несколько:

  • это лучший компьютер за 55-60 тысяч рублей;

  • их практически не надо админить — не надо ничего переустанавливать, вероятность схватить вирус минимальна, сбросить настройки ноутбука может офис-менеджер;

  • их очень удобно закупать и чинить: есть всего одна модель, есть официальная гарантия и авторизованные сервис-центры, для их обслуживания и починки не требуется собственный персонал.

Для программистов закупаем MacBook Pro 16” или 13”. И тут есть нюанс. Дело в том, что у нас до сих пор не полностью распилен монолит на .NET Full Framework, и чтобы его разрабатывать, нужен Windows. Осталось всего 14 запускаемых проектов, и мы надеемся, что в первом квартале 2022 года переведём монолит на .NET 6 и сможем разрабатывать и запускать его на Linux и Mac.

Иногда мы покупали ноутбуки с Windows, но это сложный процесс: модели постоянно меняются или их снимают с производства, есть проблемы с доступностью нужных моделей, с качеством и обслуживанием, ремонтом. Мы перепробовали много разных вариантов, такие как Dell XPS, Lenovo ThinkPad, Dell Precision, но со всеми пришли к полному разочарованию и хотели бы полностью перейти только на закупки Mac.

К тому же MacBook Pro 16” с процессорами Intel — не самая удачная модель: она часто перегревается и громко шумит вентиляторами, если подключать внешний монитор.

Всё изменилось с появлением M1. Теперь компьютеры не перегреваются, всё быстро компилируется, вентиляторы не жужжат, ноутбуки долго работают — одно удовольствие. Поэтому мы планируем постепенно перевести всех сотрудников ноутбуки c Apple Silicon — в первую очередь, конечно же, повезёт iOS-разработчикам.

Что с поддержкой Apple Silicon у .NET?

Стоит отметить, что поддержка архитектуры ARM, на которой основан Apple Silicon, появилась в .NET Framework ещё в версии 4.5.2.  Её добавили в 2012 году вместе с версией Windows 8 (RT) для 32-битных ARM-процессоров. Тогда было выпущено несколько устройств на процессорах ARM, но к 2015 году Windows RT загнулась.

В 2014 году Microsoft анонсировала .NET Core, опенсорную и кроссплатформенную версию .NET Framework был приговорён к медленной смерти и не будет развиваться, все новые фичи языка и платформы будут только в .NET Core.

В 2018 году в .NET Core 2.1 появилась поддержка ARM32 для Linux, а в 2.2 — для Windows Nano Server.

Поддержка Apple Silicon в .NET Core оказалась нетривиальной задачей, т.к. Apple предъявляет строгие требования по безопасности и выставляет другие ограничения:

  • Hardened Runtime (поддержка нотаризации);

  • W^X support;

  • Universal Binaries;

  • Big Sur и выше;

  • процесс может быть запущен либо в ARM64, либо Intel.

Из-за этих требований в версии 3.1 и 5.0 решили не добавлять полноценную поддержку Apple Silicon, а сосредоточиться на обратной совместимости через трансляцию ARM на X86 (Rosetta2).

Полноценную поддержку Apple Silicon добавили только в .NET 6.

Как работать с инструментами разработки на новых компьютерах

Стоит отметить, что на М1 Macbook Pro 13” и MacBook Air доступен только один внешний монитор. На M1 Pro & M1 Max доступно три внешних монитора.

.NET 6 можно скачать здесь: get.dot.net

К сожалению, пока невозможно установить X86-64 и ARM64 версии параллельно. Я удалил все X86-версии .NET при помощи .NET Uninstall Tool.

Чтобы запустить какую-нибудь программу в режиме эмуляции Х86, нужно скачать Rosetta (ноутбук сам предложит это сделать при первом запуске), но чтобы запустить через командную строку, нужно ввести команду

 arch -x86_64 <command>

Чтобы воспользоваться всеми преимуществами нового компьютера, нужно убедиться, что все программы запущены в нативном режиме. Для этого достаточно открыть активити-монитор и выбрать в нём показ архитектуры.

IDE VSCode, Rider

Программировать можно в VSCode и Rider EAP UPD: уже  вышел Rider 2021.3.

Для полноценной работы с .NET потребуется обновить все сервисы и приложения на версию 6.0.

Docker

Docker работает, но есть нюансы:

  • он платный для компании;

  • есть два режима работы: с эмуляцией и без. Эмуляция x86 работает на QEMU и очень медленно. Есть режим без эмуляции, работает быстро, будет использовать ARM64 Linux, контейнеры тоже будут собраны на нём — изменить это нельзя. Если хочется использовать ARM64, придётся всё пересобрать. Например, официальный образ MySQL для ARM64 доступен только для версии 8.0.

Некоторые вещи просто так не получится пересобрать из-за их зависимостей. Тут ничего сделать нельзя. Мы пользуемся GitHub Codespaces для таких приложений.

Python

Тут сложно, потому что многие библиотеки в Python используют нативный код, написанный не на самом Python, и с этим ничего не поделаешь.

Мы, например, напоролись на библиотеку pyodbc — она не работает. То же самое может произойти с любой другой библиотекой.

Пара слов о производительности

Мы сравнили сборку нашего мобильного API (.NET 6) на MacBook Pro 16” 2019 6 core i7 и MacBook Pro 13” M1 (запускали три раза) и увидели следующие цифры:

M1: 20 секунд.

i7-9750H: 29 секунд.

Кажется, это потрясающий результат, так как Macbook Pro 13” M1 стоит гораздо дешевле 16”, дольше работает от батарейки и не перегревается.

Вот ещё  три хороших и релевантных для разработки статьи по бенчмаркам процессоров Apple Silicon:

Сравнение M1 Max с 5950X для разных Data Science нагрузок например, перемножение матриц или обучение сетей.

Сравнение скорости компиляции разных Rust-проектов

Сравнение скорости компиляции на server-side в Swift-проекте

Кстати, можно воспользоваться этим инструментом и посчитать, через сколько времени новые компьютеры окупятся с учётом экономии скорости компиляции — сделайте копию и подставьте свои данные в жёлтые ячейки.

Ещё раз повторюсь, что мы рады этому событию и собираемся переходить на Apple Silicon.

Only registered users can participate in poll. Log in, please.
Мы собираемся переходить на Apple Silicon. А вы?
34.78% Тоже будем переходить.48
2.9% Не можем, откажемся от «маков».4
52.17% У нас Windows и нам всё нравится.72
10.14% У нас Windows, но теперь заживём!14
138 users voted. 39 users abstained.
Tags:
Hubs:
Total votes 26: ↑23 and ↓3+25
Comments27

Articles

Information

Website
dodoengineering.ru
Registered
Founded
Employees
201–500 employees
Location
Россия