Содержание

2.2. Lintel. Транслятор уровня системы.

Что отличает Lintel от RTC: вместо того, чтобы гармонично работать с Linux средой, из которой вы загружаетесь, Lintel сам выступает своего рода загрузчиком. Т.е. Lintel предполагает, что вы загружаетесь в полностью иную ОС, написанную для x86 машин. К слову, нет ограничений на то, в какую именно x86 систему загружаться. Те, кто сидят в Telegram-чате «Эльбрусы и с чем их едят» не могли ни разу не слышать о таком человеке, как ge0gr4f. Этот энтузиаст запустил и x86 версию Android на Эльбрусе. А значит что? Правильно, мы можем работать с Lintel не только с x86 Windows, но и с x86 Linux. И, что немаловажно, с Lintel у нас может исполняться как x64 код, так и x32 код. Нет никаких проблем с работой подсистемы WOW64, которую я описывал выше. Но есть нюанс. Дело в том, что в случае с Lintel у нас транслируется вообще всё, включая и ядро системы, и каждый драйвер в этой системе. Обращение к любому оборудованию сопровождается ощутимыми задержками. Есть мнение, что, если бы с Lintel работал в нативном режиме КПИ-2 (контроллер периферийных устройств, аналог южного моста), x86 системы с ним работали бы ощутимо быстрее. Однако, как вы понимаете, я не могу это проверить, так что не смогу ни подтвердить, ни опровергнуть.

Итак, начнём с особенностей и ограничений Lintel. Во-первых: для работы Lintel на данный момент требуется выделять целый SATA накопитель или SMART-карту. Не флешка, не карта памяти, а именно полноценный SATA-накопитель, или SMART-карта, которая не в каждом магазине есть. Сам по себе образ Lintel весит около 40 МБ, но при его записи на любой накопитель, тот перестаёт определяться при подключении к любому компьютеру, помимо Эльбруса. Вы увидите лишь битую таблицу разделов и ваша ОС предложит вам отформатировать диск. На данный момент в работе возможность накатки образа Lintel «в конец диска», т.е. чтобы он занимал не весь диск (в начале), а чтобы под Lintel выделялся небольшой раздел и сам по себе образ транслятора мог уживаться с ОС на одном SSD. Ещё, насколько мне известно, работают сейчас и над тем, чтобы Lintel можно было загружать не только с SATA-накопителя или SMART-карты, но и с обычной флешки.

Вторым существенным ограничением является то, что имитируется обычный BIOS, а не UEFI, и работать, соответственно, Lintel может только с дисками, отформатированными в таблицу разделов MBR. Т.е. никакого GPT, никакого неограниченного пространства под каждый раздел, никакого неограниченного числа разделов и т.д. При использовании Lintel вы имеете дело со всеми ограничениями старого MBR (в т.ч. лимит до 2 ТБ на диск).

x86 BIOS в Lintel.

Скриншот 25.x86 BIOS в Lintel.

Естественно, чтобы работать с виндой, да и любой другой x86 системой, надо имитировать классический BIOS вместо Программы Начального Старта на Эльбрусе, что позволяет делать Lintel. Я этот «BIOS» показывал на стриме с Эльбрусом, вкратце пройдёмся по нему здесь.

x86 BIOS в Lintel. Раздел периферии.

Скриншот 26. x86 BIOS в Lintel. Раздел периферии.

Третье существенное ограничение затрагивает только Windows, и только начиная с версии Windows 7: в винде просто нет драйверов под ближайший к таковому у Эльбруса Ethernet-контроллер. В Ubuntu вы можете имитировать Ethernet-контроллер AMD PCNET, и, на моей практике, вы с ним имеете довольно хорошую скорость по сети (от 250 до 300 Мбит у меня дома при тарифе в 300 Мбит). Но вот в винде, начиная с 7-ки, у вас 2 стула варианта: либо пользоваться экспериментальной мимикрией под Ethernet-контроллер Intel PRO, либо использовать отдельный Ethernet-контроллер стороннего производства, который будет совместим с виндой.

Мимикрия Ethernet-контроллера под Intel PRO.

Скриншот 27. Мимикрия Ethernet-контроллера под Intel PRO.

Если вы решите мимикрировать под Intel PRO, вы столкнётесь с тем, что у вас скорость интернет-соединения упадёт с 300 Мбит/сек до 5-10 Мбит/сек. Т.е. падение в 30-60 раз. Я не вижу никакого смысла в этой затее, уж лучше подключить смартфон в качестве USB-модема. Хотя, я в целом и в затее с виндой на Эльбрусе не вижу смысла и позже вам станет понятно, почему.

x86 BIOS в Lintel. Количество процессоров исполнения и трансляции.

Скриншот 28. x86 BIOS в Lintel. Количество процессоров исполнения и трансляции.

Ну и четвёртое важное ограничение: вам нужно заранее чётко определить, сколько ядер будет выделено на трансляцию кода, а сколько – на его исполнение. Оптимальный вариант из того, что я понял, это 2 ядра отвести под трансляцию. Тут просто логика: если вы выставите 1 ядро и у вас не хватит ядер под трансляцию кода, и команд будет недостаточно для своевременной нагрузки оставшихся 7 ядер, вы потеряете в скорости в 2 раза. Если же вы выделите 3 ядра вместо 2, потенциально вы выиграете ещё не более 30% производительности. Почему не все 50%? Потому, что у вас теперь меньше ядер отведено под исполнение кода. Поэтому балансом тут будут 2 ядра для трансляции, и все свои тесты я проводил именно с 2 ядрами.

Я хотел сперва затянуть и потом к этому мысль подвести, но транслировать целую систему – это бред. Слишком большая потеря производительности. Это не только Эльбруса касается. Это моя позиция касательно абсолютно любого процессора.

Видео 3. Установка и запуск iOS приложений на Macbook c Apple M1.

В прошлом году, когда я ставил iOS приложения на Macbook с чипом Apple M1 (к слову, использование стандартных средств в macOS, начиная с версии 11.3, стало невозможным для этих целей), я ставил старую версию iTunes для Windows, которая ещё позволяла выкачивать .ipa файлы из App Store? Версию для macOS я тогда не смог накатить, т.к. Apple запретили устанавливать старые версии iTunes на новые Macbook с чипом M1.

В общем, поставил я тогда iTunes через Crossover и... испытал боль... Я на 0:58 пытался быстро включить музыку, перемотать её и выключить, но настолько сильно всё затормозило, что на начало воспроизведения ушли пол минуты, и ещё пол минуты на перемотку. На остановку музыки ушли секунд 40. Мне из-за этого на ролик, доступный по скрытой ссылке, автоматически прилетела жалоба по Content ID и оттого на видео висит реклама от правообладателя... М-да.

А что являлось всему виной? Причина была в двойной трансляции: команды для Windows транслировались в команды для macOS при помощи CrossOver, а затем они все транслировались Rosetta 2 из x86 в ARM. Двойная трансляция – это извращение для настоящих садистов.

В случае с виндой на Эльбрусе трансляция не двойная, но так у вас транслируется вся система со всеми драйверами, со всем оборудованием, и даже обращения к КПИ-2 (аналог южного моста) здесь транслируются. Целая система в трансляции, да ещё и без двух ядер, которые лишними бы не были. Звучит даже страшнее, чем Crossover (Windows -> Linux) через Rosetta 2.

Видео 4. Стрим с Эльбрусом 8С. Часть 2

Я стримил свои посиделки с виндой на Эльбрусе, и на том стриме на 41:53 я пытался просто открыть окно PowerShell. Оно открывалось чуть более 10 секунд. Даже простой вызов панели с временем или панели уведомлений у вас может занять 10 секунд. Переход по папкам в проводнике выполняется очень долго. И ощущения очень напоминают те, что я испытывал, работая с виндовым x86 кодом на M1 при двойной трансляции.

Я-то бенчмарки вам покажу, вопросов нет. Но кто в здравом уме будет приобретать Эльбрус, чтобы затем ставить на него винду? Вы покупаете процессор, в первую очередь нацеленный на безопасность, и ставите на него винду, которая сливает все ваши данные компании Microsoft? И миритесь с тем, что система пашет в разы медленнее, чем родная под его архитектуру? Покажите мне этого сумасшедшего! Если бы в GTA San Andreas всеми нелюбимый Big Smoke к своему гигантскому заказу в фастфуде взял ещё диетическую колу, он бы и то у меня вызвал меньше вопросов!

Если вам в достаточной степени плевать на безопасность, чтобы винду ставить, может, лучше взять процессор, под который этот винда создавалась?