Архитектура e2k что такое
Перейти к содержимому

Архитектура e2k что такое

  • автор:

Архитектура «Эльбрус»

Elbrus arch.jpg

Оригинальная 64-битная Little Endian VLIW; также известна как «Эльбрус-2000» (сокращённо e2k).

Не путать со SPARC и иными RISC, а также x86 (CISC).

Архитектура ядра Эльбрус

Версии

Микропроцессоры «Эльбрус» различаются версиями микроархитектуры и системы команд; на март 2022 года известны следующие:

  • v2: «Эльбрус-2С+», «Эльбрус-2СМ» (устарела с лета 2018 [1] )
  • v3: «Эльбрус-4С» (уходящая) e4c, он же e2s
  • v4: «Эльбрус-8С», «Эльбрус-1С+» (предыдущая серийная) e8c, он же p1; и e1cp, он же e1c+ или p2
  • v5: «Эльбрус-8СВ» (серийная, расширенные векторные вычисления) e8c2, он же p9
  • v6: «Эльбрус-16С», «Эльбрус-12С», «Эльбрус-2С3» (инженерные образцы, аппаратнаявиртуализация) e16c, e12c, e2c3
  • v7: «Эльбрус-32C», «Эльбрус-4C3» (перспективная) e32c, e4c3

Безопасность

Одной из ключевых особенностей e2k в любом режиме является наличие трёх аппаратных стеков — с одной стороны это исключает срыв стека, с другой — добавляет проблем при переносе ПО, которое пытается с предположительно единственным стеком крутить свои «штучки» (начиная с JIT).

В защищённом режиме добавляется тегирование памяти, исключая ещё и переполнение массива.

Совместимость

В процессе портирования Альта была отмечена отличная практическая совместимость процессоров четвёртого поколения с бинарным кодом e2kv3, включая ядро, видеоподсистему и даже бинарный транслятор; официально она не гарантируется, хотя неофициально и подтверждается.

Также наблюдается хорошая совместимость v5-машин с кодом v4+ и достаточная как минимум для rescue-образа работоспособность кода v3+ на v6.

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

При сборке под e2k для производительности и совместимости следует применять компилятор, настроенный под конкретную версию архитектуры (начиная с lcc 1.23 — возможна настройка и под конкретный процессор).

При этом разница по 7za b , собранным под v3 и v4, на v4 составила у нас порядка процента.

Известно, что при переходе на e2kv6 «штраф» бинарникам, оптимизированным под предыдущие версии архитектуры, в ряде случаев вырастет, т.к. вследствие значительного роста тактовой частоты сильно изменятся планируемые задержки при работе с памятью и не ожидающий этого код будет чаще попадать на останов конвейера.

В то время как компилируемый код благодаря большим возможностям оптимизации (в т.ч. выявления и задействования скрытого параллелизма) во время компиляции находится в потенциально выигрышном положении по сравнению с суперскалярными архитектурами, виртуальные машины для байткода и интерпретаторы симметрично находятся в положении проигрышном (для их работы характерна высокая степень зависимости по данным в циклах). Это стоит учитывать при планировании разработки.

Ссылки

  • Руководство по эффективному программированию на платформе «Эльбрус»
    • Система команд микропроцессора «Эльбрус»
    • Основные принципы архитектуры Е2К (2001)

    E2K: от истоков до нюансов Российской архитектуры [ч. 1]

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

    Эльбрус 2000 — это микропроцессорная архитектура, разработка которой началась в России в 1998 году. Процессоры на основе архитектуры Эльбрус 2000 сейчас используются в высокопроизводительных безотказных серверах и компьютерах, например, в решениях для банков, государственных учреждений и научных центров.

    Предисловие

    В этой статье (или заметке?) я попробую обьяснить простым и понятным языком в чем «соль» этой архитектуры. Сразу оговорюсь, базовое понимание математики, информатики и принципов работы компьютера или телефона с которого читается статья — обязательна.

    Статья разбита на части, пишу в свободное от работы и личных забот время. Эта творчество, скажем, пробник в первую очередь — себя. Если будет положительный фидбэк — то проба пера успешная:3

    Процессор, сгенерированный очередной моделью, силамиЭльбрус-8С на сервере ЯХОНТ-УВМ 312.

    Историческая справка

    Московский центральный научно‑исследовательский институт информатики и автоматизации (МЦСТ, первоначально Московский центр SPARC-технологий) был создан в 1992 году в результате реорганизации Московского научно‑производственного объединения «Электроника». Основной целью создания института было развитие отечественной вычислительной техники и программного обеспечения.

    Вольные соображения сеткина изложенное выше.

    В свое время СССР добился достаточно серьезных достижений в создании компьютерной техники. Примером этому может служить серия советских суперкомпьютеров «Эльбрус», которые были созданы в Институте точной механики и вычислительной техники (ИТМиВТ) в 1970-1990-х годах прошлого века, это же название носит серия микропроцессоров и систем, созданных на их основе и выпускаемых сегодня ЗАО МЦСТ (Московский центр SPARC-технологий).

    При этом история «Эльбруса» достаточно обширна. Работы над первым компьютером с таким названием велись с 1973 по 1978 год в ИТМиВТ им. Лебедева, руководил этими работами Б. С. Бурцев, разработка велась при участии Бориса Бабаяна, который являлся одним из замов главного конструктора. В то время основным заказчиком данной продукции, конечно же, выступали военные.

    Первый компьютер «Эльбрус» обладал модульной архитектурой и мог включать в себя от 1 до 10 процессоров на базе схем средней интеграции. Быстродействие данной машины достигало 15 миллионов операций в секунду. Объем оперативной памяти, которая была общей для всех 10 процессоров, составлял до 2 в 20 степени машинных слов или, если применять принятые сейчас обозначения, 64 Мб. Однако самым интересным в «Эльбрусе-1» была именно его архитектура. Созданный в СССР суперкомпьютер стал первой в мире коммерческой ЭВМ, которая применяла суперскалярную архитектуру. Ее массовое применение за рубежом началось только в 90-х годах прошлого века с появлением на рынке доступных процессоров Intel Pentium.

    Позднее выяснилось, что подобные разработки существовали еще до «Эльбруса», ими занималась компания IBM, но работы по данным проектам не были завершены и так и не привели к созданию конечного коммерческого продукта. По словам В.С. Бурцева, являвшегося главным конструктором «Эльбруса», советские инженеры старались применять самый передовой опыт как отечественных, так и зарубежных разработчиков. На архитектуру компьютеров «Эльбрус» повлияли не только компьютеры компании Burroughs, но и разработки такой известной фирмы, как Hewlett—Packard, а также опыт разработчиков БЭСМ-6.

    После завершения работ над ЭВМ «Эльбрус-2» в ИТМиВТ взялись за разработку ЭВМ на базе принципиально новой процессорной архитектуры. Проект, который был назван достаточно просто – «Эльбрус-3», также значительно опередил аналогичные разработки на Западе. В «Эльбрусе-3» впервые был реализован подход, который Борис Бабаян называет «постсуперскалярным». Именно такой архитектурой в будущем обладали процессоры Intel Itanium, а также чипы компании Transmeta. Стоит отметить, что в СССР работы над данной технологией были начаты в 1986 году, а Intel, Transmeta и НР присупили к реализации работ в этом направлении лишь в середине 1990-х годов.

    К сожалению, «Эльбрус-3» так никогда и не был запущен в серийное производство. Его единственный работающий экземпляр был построен в 1994 году, но в это время он был никому не нужен. Логическим продолжением работ над данным компьютером стало появление процессора «Эльбрус-2000», известного также как Е2К. У российской компании имелись большие планы по серийному производству данного процессора, который должен был пойти в серию одновременно или даже еще раньше, чем Itanium. Но из-за отсутствия необходимого объема инвестиций, все данные планы не были реализованы и так и остались на бумаге.

    Архитектура Эльбрус 2000 была создана в России в начале 2000-х годов. Проект разработки новой архитектуры был запущен в 1999 году в рамках программы «Эльбрус» Министерства промышленности, науки и технологий Российской Федерации.

    Основной целью программы было создание отечественного высокопроизводительного процессора, который мог бы конкурировать с зарубежными аналогами. В рамках программы были разработаны несколько поколений процессоров, начиная с Эльбрус-1 и заканчивая Эльбрус-4.

    Однако основным достижением программы стала архитектура Эльбрус 2000, которая была представлена в 2002 году, в основе которой лежит подход VLIW. Эта архитектура была разработана с учетом современных требований к производительности и энергопотреблению, а также с учетом возможности выполнения параллельных вычислений.

    VLIW больше похоже на RISC, нежели на CISC, т.к., хоть команды и шире намного, чем даже в CISC, но у VLIW ширина команд фиксирована. К слову, Эльбрус – не единственный в мире, кто имел VLIW подход. Был ещё TILE64, MAJC, RAW, Transmeta, TMS320 и так далее.

    Архитектура Эльбрус 2000 была успешно протестирована на различных задачах, включая математические расчеты, обработку изображений и видео, а также на задачах, связанных с обработкой больших объемов данных.

    Сегодня архитектура Эльбрус 2000 продолжает развиваться и улучшаться. На ее основе создаются новые процессоры, которые успешно используются в различных областях, включая научные и промышленные вычисления, обработку данных и телекоммуникации. А МЦСТ является одним из ведущих отечественных разработчиков компьютеров и программного обеспечения. Институт занимается разработкой вычислительных систем для различных областей применения, включая научные исследования, проектирование, финансы, государственное управление и т. д. Компьютеры МЦСТ используются во многих отечественных организациях и предприятиях, а также экспортируются за рубеж.

    Основные особенности

    Начнем с основных особенностей архитектуры Эльбрус 2000:

    1. Многопоточность — каждое ядро процессора может обрабатывать несколько потоков одновременно, что позволяет значительно увеличить производительность системы.
    2. Симметричная мультипроцессорность — архитектура поддерживает одновременную работу нескольких процессоров, что также способствует арифметическому увеличению производительности.
    3. Использование эффективных алгоритмов обработки данных, таких как алгоритмы сжатия данных и алгоритмы сортировки, параллельных вычислений, что позволяет ускорить выполнение задач. Например, определение ацикличных участков с дальнейшим разделением на суб‑процессинг, или же использование эффективных алгоритмов предварительного чтения данных из памяти, что снижает задержку при исполнии кода.
    4. Наличие защиты от ошибок и сбоев, что обеспечивает высокую надежность работы системы. А так же особый режим выполнения и матрицы доступа к памяти, который аппаратно исключает вмешательство в соседние страницы памяти ПО. (Вспомним со слезами о Meltdown и Spectra на x86-архитектуре и потере в среднем 15% производительности)
    5. Архитектура Эльбрус 2000 поддерживает ВСЕ операционные системы Linux и Windows, так как спокойно кушает 64-битные инструкции, а так же спокойно может переваривать ассемблер (двоичные инструкции процессора) Intel или AMD64 платформ. Lintel — более производительное решение, даже чем от Купертиновских конкурентов (Apple со своей Rosetta любого поколения.)

    Архитектура Эльбрус 2000 имеет ряд преимуществ перед другими архитектурами, такими как высокая производительность и надежность, но также имеет и недостатки, такие как ограниченная поддержка со стороны производителей программного обеспечения и высокая стоимость производства, а также (на момент написания) отсутствие локализации производства на территории РФ.

    Давайте начнем разбираться с описанными преимуществами и почему они таковыми являются.

    Мультипоточность

    Мультипоточность в процессорах Эльбрус — это возможность одновременного выполнения нескольких потоков инструкций на одном процессоре. Каждый поток может выполняться независимо от других потоков, что позволяет увеличить производительность и эффективность работы процессора.

    https://www.altlinux.org/Images.www.altlinux.org/9/97/E2k_internals.web.svg

    Процессоры Эльбрус поддерживают два типа мультипоточности: аппаратную и программную.

    Аппаратная мультипоточность

    Аппаратная мультипоточность в процессорах Эльбрус реализуется с помощью технологии Hyper‑Threading. Она позволяет процессору выполнять два потока инструкций на каждом ядре, используя различные ресурсы процессора, такие как регистры и функциональные блоки.

    Hyper-Threading наглядно

    Но тут я остановлюсь подробнее, так как с каждым годом всё больше и больше транзисторов задействуется в процессорах, но производителям постоянно приходится идти на ухищрения для роста производительности, т.к. больше параллелизма им со старым подходом не выжать. Поэтому в 2002-м году свет увидели процессоры Intel Pentium 4, которые первыми на потребительском рынке получили поддержку виртуальной многоядерности или многопоточности, которую назвали Intel Hyper‑Threading. Суть этой технологии в том, что ядро физически у вас одно, но система его видит как 2 разных ядра, и ваши программы работают с одним ядром так, словно их 2.

    И, если ранее программы не могли задействовать все вычислительные возможности каждого из ядер процессора, то теперь они на каждом ядре старались задействовать больше ALU (до 2 раз больше).

    2 виртуальных ядра делят между собой один и тот же набор арифметико‑логических устройств (АЛУ), один и тот же кэш, но разные регистры, тогда как в случае с двумя обычными ядрами у вас разделены для каждого из ядер и АЛУ, и кэш, и все регистры. За счёт того, что на АЛУ приходится больше параллельных команд (8 вместо 4 в случае с современным суперскалярным подходом CISC процессоров), у вас удаётся загрузить одно ядро процессора в большей мере, и таким образом вы добиваетесь роста производительности в расчёте на каждое из ядер. Но по итогу, да, логические ядро, как правило, медленнее, чем физическое.

    Программная мультипоточность

    Программная мультипоточность в процессорах Эльбрус реализуется с помощью технологии OpenMP. Она позволяет разделять задачи на несколько потоков, которые выполняются параллельно на разных ядрах процессора. Это позволяет ускорить выполнение задач, которые могут быть разделены на независимые подзадачи.

    Мультипоточность в процессорах Эльбрус позволяет увеличить производительность и эффективность работы процессора. Она позволяет выполнять несколько задач одновременно, что уменьшает время выполнения задач и увеличивает общую производительность системы.

    Кроме того, мультипоточность позволяет использовать ресурсы процессора более эффективно, что уменьшает нагрузку на систему и повышает ее стабильность и надежность.

    В целом, мультипоточность является важной технологией для повышения производительности и эффективности работы процессоров Эльбрус. Она позволяет использовать ресурсы процессора более эффективно и выполнять несколько задач одновременно, что делает систему более быстрой и стабильной.

    Симметричная мультипроцессорность

    Симметричная мультипроцессорность (SMP) — это архитектура компьютерной системы, в которой два или более процессоров работают параллельно и независимо друг от друга, обмениваясь данными через общую память. В этой архитектуре каждый процессор имеет доступ к общей памяти и периферийным устройствам, что позволяет им выполнять задачи более эффективно, чем в случае использования одного процессора.

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

    Архитектура Эльбрус 2000 представляет собой симметричную мультипроцессорную систему, которая имеет ряд преимуществ перед другими архитектурами.

    1. Высокая производительность. Симметричная мультипроцессорность Эльбрус 2000 позволяет использовать несколько процессоров одновременно, что повышает производительность системы. Каждый процессор может выполнять свои задачи независимо друг от друга, что увеличивает скорость обработки данных и снижает время ожидания.
    2. Гибкость системы Архитектура Эльбрус 2000 позволяет легко добавлять или удалять процессоры в системе в зависимости от потребностей пользователя. Это позволяет гибко настраивать систему под конкретные задачи и обеспечивает масштабируемость.
    3. Надежность. Симметричная мультипроцессорность Эльбрус 2000 обеспечивает высокую надежность системы. Если один из процессоров выходит из строя, остальные процессоры могут продолжать работу без проблем. Это позволяет избежать сбоев в работе системы и обеспечивает бесперебойную работу.
    4. Энергоэффективность. Архитектура Эльбрус 2000 потребляет меньше энергии, чем другие архитектуры. Это достигается за счет использования более эффективных алгоритмов обработки данных и оптимизации работы процессоров.
    5. Высокая безопасность. Симметричная мультипроцессорность Эльбрус 2000 обеспечивает высокую безопасность системы. Каждый процессор имеет свой собственный набор инструкций и операционную систему, что делает невозможным взлом системы через один процессор.

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

    Алгоритмы обработки данных

    Prefetching и аппаратная асинхронная подгрузка данных (APB)

    Архитектура Эльбрус 2000 имеет ряд особенностей, которые позволяют эффективно обрабатывать данные. Одной из главных особенностей является наличие нескольких ядер процессора, которые могут работать параллельно. Это позволяет распараллеливать задачи и ускорять обработку данных, но что бы убрать ожидание данных для дальнейшей обработки — реализовано использование эффективных алгоритмов предварительного чтения данных из памяти, что в свою очередь снижает задержку при исполнии кода.

    Предварительное чтение данных из памяти (Prefetching) является одним из методов оптимизации производительности в архитектуре Эльбрус 2000. Он позволяет загрузить данные из памяти в кэш процессора заранее, до того, как они будут фактически использоваться в вычислениях. Это может существенно ускорить выполнение программы, так как время доступа к кэшу намного меньше, чем к памяти.

    В Эльбрус 2000 предусмотрено несколько способов предварительного чтения данных.

    Один из них — это использование инструкций PREFETCH. Эти инструкции позволяют загрузить данные из памяти в кэш процессора заранее, до того, как они будут фактически использоваться. Инструкции PREFETCH могут быть использованы как для чтения, так и для записи данных.

    Еще один способ предварительного чтения данных — это использование аппаратной поддержки предварительного чтения в кэше процессора, отдельный параллельно работающий модуль для подкачки данных, APB (Asynchronous Prefetch Buffer). В Эльбрус 2000 кэш оборудован специальным механизмом, который автоматически загружает данные из памяти в кэш заранее, если он обнаруживает, что эти данные скоро будут использоваться. Это происходит благодаря анализу обращений к данным и прогнозированию будущих обращений.

    Предварительное чтение данных из памяти особенно полезно в случае работы с большими объемами данных или при обработке данных в циклах. Оно позволяет уменьшить время доступа к памяти и ускорить выполнение программы. Однако, необходимо учитывать, что неправильное использование предварительного чтения может привести к ухудшению производительности, так как может привести к загрузке ненужных данных в кэш. Поэтому, необходимо выбирать правильные параметры для инструкций PREFETCH и настраивать аппаратную поддержку предварительного чтения в соответствии с характеристиками программы и алгоритма.

    То есть Эльбрус чётко знает, с какими данными ему предстоит работать. Это ещё до того, как он с этими данными начал работу. Работает ли он с данными или же с указателем на данные, заранее известно из тэга, которым помечаются данные в регистрах. И эта информация также позволяет добиться более высокой защищённости. Есть ещё интересный момент с работой памяти. При работе с любым процессором у вас при выполнении цикла может процессор стопориться на большое количество тактов из‑за ожидания подгрузки данных для обработки.

    Single Instruction Multiple Data

    Архитектура Эльбрус 2000 использует специальные инструкции SIMD (Single Instruction Multiple Data), которые позволяют выполнять одну операцию над несколькими данными одновременно. Это особенно полезно в задачах, связанных с обработкой графики, звука и видео.SIMD‑инструкции в Эльбрус 2000 реализуются через специальные регистры, называемые векторными регистрами. Каждый векторный регистр может содержать несколько элементов данных одного типа, например, 16 целых чисел или 8 чисел с плавающей точкой.Для выполнения операций над векторными регистрами в Эльбрус 2000 используются специальные команды, которые могут выполнять операции над всеми элементами векторного регистра одновременно. Например, команда ассемблера «ADDV» складывает все элементы двух векторных регистров и сохраняет результат в третий векторный регистр. (Я прям чувствую как начали закипать мозги:D)

    SIMD‑инструкции в Эльбрус 2000 могут быть использованы в различных областях, например:

    • Обработка графики и видео: SIMD‑инструкции позволяют быстро применять эффекты к видео и изображениям, например, изменять яркость и контрастность, применять фильтры и т. д.
    • Обработка звука: SIMD‑инструкции могут быть использованы для обработки аудиосигналов, например, для уменьшения шума или изменения тональности.
    • Математические вычисления: SIMD‑инструкции позволяют быстро выполнять математические операции над большим количеством данных, например, для расчета физических моделей или статистических анализов.

    Использование SIMD‑инструкций позволяет значительно ускорить выполнение задач, связанных с обработкой больших объемов данных. В Эльбрус 2000 SIMD‑инструкции реализованы эффективно и позволяют достичь высокой производительности при работе с векторными данными.

    Также в архитектуре Эльбрус 2000 используется кэш‑память, которая позволяет ускорить доступ к данным. Кэш‑память хранит наиболее часто используемые данные, что позволяет уменьшить время доступа к ним. Смешно? Тогда вспомните, что огромное число процессоров до сих пор не умеют в L3-cache.

    В целом, архитектура Эльбрус 2000 имеет ряд особенностей, которые позволяют эффективно обрабатывать данные. Применение различных алгоритмов и использование SIMD инструкций и кэш‑памяти позволяет ускорить обработку данных и повысить производительность системы.

    Текстовый процессинг

    Архитектура Эльбрус 2000 предоставляет несколько алгоритмов для обработки текстовых данных, которые могут быть использованы в различных приложениях.

    Один из таких алгоритмов — это алгоритм сжатия данных LZO (Lempel‑Ziv‑Oberhumer). Он используется для сжатия текстовых данных и может быть применен для уменьшения размера файлов или передачи данных по сети. Алгоритм LZO работает на основе словарного кодирования, когда повторяющиеся последовательности символов заменяются одним кодом. В Эльбрус 2000 реализована оптимизированная версия алгоритма LZO, которая позволяет достигать высокой скорости сжатия и декомпрессии.

    Еще один алгоритм для обработки текстовых данных — это алгоритм поиска подстроки в строке. Он может использоваться для поиска слов или фраз в тексте, а также для обработки запросов в поисковых системах. В Эльбрус 2000 реализована оптимизированная версия алгоритма Бойера‑Мура, который работает на основе сравнения символов справа налево.

    Также в Эльбрус 2000 реализованы алгоритмы сортировки данных, которые могут быть использованы для обработки текстовых данных. Например, алгоритм быстрой сортировки (QuickSort) может быть использован для сортировки больших массивов строк. В Эльбрус 2000 реализована оптимизированная версия алгоритма QuickSort, которая работает на основе разделения массива на подмассивы и их параллельной сортировки.

    В целом, архитектура Эльбрус 2000 предоставляет широкий набор алгоритмов для обработки текстовых данных, которые могут быть использованы в различных приложениях. Они отличаются высокой производительностью и оптимизацией под архитектуру процессора Эльбрус 2000.

    Источники

    1. PDF: Руководство по эффективному программированию на платформе «Эльбрус»
    2. PDF: Кремнивые секреты
    3. Полезное: Шпаргалка по Assembler x86
    4. Видео: Архитектура процессора Эльбрус 2000 / Дмитрий Завалишин (Digital Zone)
    5. История: История компьютеров Эльбрус

    Особенности реализации ОС Linux для архитектуры «Эльбрус»

    Введение. Состав ПО вычислитетльного комплекса, место ядра ОС, краткий обзор подсистем ядра.

    Введение. Дистрибутив ОС. Системные библиотеки (glibc). Компилятор. Ядро Linux: планирование процессов, управление памятью, ввод-вывод, системные вызовы, сеть, драйверы устройств. Поддержка архитектур. Архитектурно-зависимая и архитектурно-независимая части ядра.

    Синхронизация, планирование, файловые системы

    Механизмы синхронизации. Планировщики обменов. Файловые системы. Что происходит при включении питания машины: различные варианты старта системы.

    Подсистема памяти, подсистема прерываний, системные вызовы

    Виртуальная память, типы исключительных ситуаций, обработка исключений по данным. Прерывания, обработчики прерываний. Системные вызовы: набор входов в таблицы системных вызовов.

    II

    Реальное время

    Приложения реального времени и ядро ОС реального времени

    Приложения реального времени. Критерий ОС реального времени. Поддержка режима реального времени в Linux. Патч PREEMPT_RT. Механизмы синхронизации для системы реального времени. Обработка прерываний на специальном потоке ядра.

    Оптимизации ядра ОС реального времени

    Оптимизации поддержки режима реального времени в ядре Linux. Патч MCST_RT.

    Библиотеки для поддержки приложений реального времени

    Системные библиотеки el_phtread, mcst_rt для создания приложений реального времени. Особенности реализации, обзор интерфейсов, пример приложения реального времени.

    III

    Драйверы

    Сущности device и driver и их взаимодействие в рамках драйверной модели linux.

    Драйверы простейших устройств

    Реализация универсального драйвера устройства, использующего порты ввода-вывода общего назначения (GPIO). Реализация обработчика прерывания GPIO. Взаимодействие с программами пользователя через подсистему input layer.
    Реализация драйвера датчика температуры семейства lm63, являющегося клиентом шины i2c. Подсистема i2c-core.

    IV

    Особенности архитектуры E2K и их поддержка в ядре ОС

    Краткий обзор архитектуры «Эльбрус»

    Система команд. Широкая команда. Форматы данных. Стеки. Регистры. Обращения в память. Прерывания.

    Прерывания в архитекутре «Эльбрус»

    Реализация обработки прерываний. Регистры TIR. Отложенные прерывания. Устройство cellar. Спекулятивный, неспекулятивный и полуспекулятивный режимы обращения в память.

    Устройства в процессоре «Эльбрус»

    Устройство Array Prefetch Buffer (APB). Поддержка APB в ядре: обработка исключения page_miss, поддержка полуспекулятивного режима в ядре.
    Устройство SLT. Реализация механизмов синхронизации в архитектуре «Эльбрус».

    Поддержка подсистемы памяти в архитеткуре «Эльбрус»

    Виртуальная память, особенности реализации дескриптора станицы.
    SMP и NUMA системы. Поддержка NUMA (Non Uniform Memory Access) в архитектуре E2K и в ядре Linux
    Производительность NUMA системы процессоров «Эльбрус». Оптимизация на уровне ядра: раздублирование исполняемого кода ядра Linux по узлам. Библиотека libnuma.
    Поддержка бинарного компилятора приложений в архитектуре «Эльбрус» и в ядре Linux. Вторичное пространство адресов. Системный вызов sys_el_binary. Устройство MLT (Memory Lock Table). Исключительная ситуация exc_mem_lock. Сохранение точки перезапуска. Использование механизма сигналов.
    Защищенный режим в архитектуре «Эльбрус».. Тэги. Поддержка защищенного режима в ядре Linux: реализация системных вызовов для защищенного режима, чистка глобальных указателей, откачка/подкачка тэгов. Библиотека libc для защищенного режима. Использование защищенного режима для отладки программ.
    Контрольные точки в ядре Linux. Алгоритмы создания контрольной точки и восстановления с контрольной точки. Быстрый старт ОС с контрольной точки.

    V

    Перспективы развития ядра ОС для архитектуры «Эльбрус»

    Перспективы развития Linux на базе архитектуры «Эльбрус».

    Переходы на новые версии ядра Linux. Использование бинарной трансляции для загрузки закрытых firmware модулей новых устройств. Возможности виртуализации. Управление энергопотреблением.

    © АО «МЦСТ», 2013-2024
    117437, Москва, ул. Профсоюзная, д. 108
    телефон: +7 (495) 363 96 65
    факс: +7 (495) 363 95 99
    электронная почта: mcst@mcst.ru

    5. Архитектура e2k. Мп Эльбрус-2000

    Подход, близкий к IA-64, уже был реализован в России — в произведенном в единственном экземпляре суперкомпьютере Эльбрус-3, выпущенном в 1991 году.

    В E2K используются команды переменной длины. Общий формат команд E2K представлен в таблице 3.1.

    Таблица 5.1. Общий формат команд E2K

    Команда E2K состоит из слогов длиной 32 разряда каждый. Число этих слогов может меняться от 2 до 16, причем данную архитектуру можно еще расширить — до 32 слогов.

    Любая команда всегда включает 1 слог заголовка и еще от 1 до 15 слогов, указывающих на операции, которые могут выполняться параллельно. Слог заголовка содержит информацию о структуре команды и ее длине, что облегчает дешифрацию команды переменной длины. Применение заголовка позволяет не проводить предварительного декодирования команд перед их помещением в кэш команд.

    В архитектуре E2K представлен сверхбольшой файл регистров. Все регистры E2K являются универсальными и могут содержать как целочисленные данные, так и числа с плавающей запятой. Всего имеется 256 регистров длиной по 64 разряда каждый.

    В E2K есть два почти симметричных кластера, каждый из которых содержит по 256 регистров. Всего в этом процессоре имеется 30 регистровых портов: 20 портов чтения (по 10 портов на кластер) и 10 портов записи.

    В Alpha 21264 применяется реализованное во многих суперскалярных процессорах динамическое переименование регистров. Этого механизма в E2K нет, так как в нем подобные задачи возлагаются на компилятор. Однако в циклах с постоянным шагом используется аналогичная схема циклической замены используемых регистров.

    Еще одна особенность E2K — регистровое окно для процедуры. Это решение стало традиционным для машин серии «Эльбрус», однако особенно важным оно является для E2K, поскольку он содержит сверхбольшое количество регистров — 256.

    Затраты на сохранение/восстановление регистров в данной ситуации становятся весьма значительными. Поэтому реализация в E2K аппаратного механизма переключения окон представляется актуальной. Окно регистров в E2K имеет переменную длину (до 192 регистров). Адресация регистров внутри контекста происходит относительно текущей базы, и при вызове другой процедуры достаточно сменить значение базы.

    Кэш данных первого уровня в E2K имеет емкость всего 8 Кбайт и продублирован в каждом из кластеров. Этот кэш является прямоадресуемым, использует алгоритм сквозной записи данных.

    Кэш данных второго уровня в E2K имеет емкость 256 Кбайт при времени доступа в 8 тактов. Он является двухканальным частично-ассоциативным и имеет 4 банка, то есть обеспечивает 4-кратное расслоение кэш-памяти. В кэше данных второго уровня применяется алгоритм обратной записи. Он также является неблокирующим.

    Кроме этого, в E2K представлен специализированный кэш предварительной выборки, который разработчики назвали буфером предварительной подкачки. Он является частью устройства доступа к массивам и задействуется только при работе с массивами в циклах. Его емкость составляет всего 4 Кбайт, и он состоит из 2 банков с 2 портами в каждом из них. За один такт в буфер можно считать, следовательно, до 4 слов длиной 8 байт. Буфер организован как очередь FIFO и имеет до 64 зон предварительной выборки.

    В Е2К предусматриваются два варианта подключения третьего уровня кэш: непосредственно к процессору Е2К, что позволяет разгрузить «системную шину» — коммутатор, или через набор коммутаторных микросхем.

    Функциональные устройства (ФУ) E2K разнесены по двум кластерам. Эти кластеры содержат по 3 одинаковых целочисленных конвейера — АЛУ (правда, один из кластеров имеет также ФУ деления — целочисленного и с плавающей запятой).

    В каждом кластере представлены также адресные сумматоры, которые имеются для 2 из 3 путей («каналов») данных. В результате каждый кластер может одновременно выполнять до 2 операций загрузки регистров или 1 операцию записи в оперативную память. Возможен и смешанный случай: 2 загрузки плюс одна запись.

    Кроме того, имеется 4 канала для данных с плавающей запятой, по 2 на кластер. В каждом канале может выполняться команда типа MADD — «умножить-и-сложить», что дает темп 8 результатов с плавающей запятой за такт.

    Сам набор команд E2K «богаче», чем у традиционных RISC-процессоров: в нем представлены четырехадресные команды, например, типа d = a + b + c. Такого нет и в IA-64. Что касается команд с плавающей запятой, то кроме полной поддержки IEEE754 в E2K реализована работа с 80-разрядным представлением Intel x86. При этом операнды хранятся в парах 64-разрядных регистров E2K. Правда, сложение/умножение таких чисел не полностью конвейеризовано. Кроме того, для приближения системы команд E2K к x86 в E2K реализованы также команды расширения ММХ.

    В E2K целочисленный конвейер имеет длину 8 тактов (собственно выполнение идет на седьмом такте, а обратная запись — на восьмом) против 7 тактов в Alpha 21264.

    Е2К обеспечивает очень высокий уровень одновременно выполняемых операций: в команде их кодируется до 23 (сюда, кроме арифметико-логических операций, входят также доступ в оперативную память, приращение индекса массива и т.п.). Эффективные показатели параллельной работы ФУ у E2K выше, чем у всех суперскалярных процессоров.

    В архитектуре E2K, как и в IA-64, делается все, чтобы по возможности исключить обычные операции перехода. Для этого в E2K имеется 32 одноразрядных регистра-предиката, причем команда способна сформировать до 7 предикатов: 4 в операциях сравнения в АЛУ и еще 3 — в операциях логики.

    Хотя в IA-64 предикатных регистров формально в 2 раза больше, чем в E2K, реально их столько же, так как в IA-64 хранятся пары — предикат и его отрицание. В IA-64 поля предикатов всегда представлены в команде, а в E2K — могут отсутствовать. Предикаты могут использоваться в канале АЛУ или в канале доступа к массивам; для указания на это применяются условные слоги, содержащие маски предикатов и ФУ. Всего в этих слогах может кодироваться до 6 предикатов, указывающих на то, нужно ли выполнять соответствующие операции из «широкой» команды.

    Компилятор E2K порождает коды для обеих ветвей программы, возникающих при условном переходе, и, пользуясь большим числом ФУ и регистров, заставляет процессоры выполнять обе ветви программы. Та же процедура применяется и в IA-64. До тех пор, пока условие перехода остается неизвестным, обе ветви выполняются спекулятивно. Когда, наконец, условие найдено, выбираются нужные результаты. Признак спекулятивного выполнения взводится при этом в специальном бите в коде операции в соответствующем слоге. При возникновении ситуации исключения (exception) результат снабжается тегом недействительного значения.

    В файле предикатов E2K, как и в регистровом файле, используются окна.

    Еще некоторые особенности архитектуры E2K:

    • тегирование данных, поддерживаемое во всей линейке процессоров ЭВМ «Эльбрус»;
    • сегментно-страничная организация памяти;
    • поддержка мультипрограммирования в стиле x86. В сочетании с разработанными средствами двоичной компиляции и специальными аппаратными средствами ее поддержки, это позволяет выполнять x86-коды на E2K.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *