Процессор Baikal T1 MIPS — последний из могикан?

CNXSoft: пост от гостя Blu о плате для разработчиков Baikal T1 и SoC, одной из последних платформ потребительского класса MIPS.

Нам потребовалось много времени, чтобы начать писать эту статью, хотя уже несколько месяцев мы тестировали процессор и есть выводы, которыми стоит поделиться с другими разработчиками. То, что нас удерживало — это мыслью о том, что это, возможно, один из последних образцов процессоров потребительского класса с первоклассным ISA, когда-то перевернувший мир процессоров. Отсюда смешанные чувства — частично печали, частично нерешительность — чтобы не оценить несправедливо, возможно, последнее, в своем роде, устройство. С такими чувствами мы взялись за эту статью. Но, для начала, короткая личная история.

Пару лет назад мы с одним из наших товарищей обсуждали архитектуры процессоров и гипотезы о будущих достижениях в отрасли.  Тогда мы упомянули о том, что последний MIPS P5600 Imagination Technologies — MIPS32r5 — разместил интересное расширение SIMD — ранее невидимое в мире MIPS. Нас впечатлили документы для этого расширения — MIPS SIMD Architecture (MSA). Мы обсудили, как P5600 нашел свой путь в SoC российского поставщика полупроводников Baikal Electronics и как они выпускали плату для разработки, которая, из-за производства ограниченной серией, была бы недоступна простым разработчикам.

Перенесемся в это лето, когда мы получили сообщение от нашего друга — он находился в то время в Санкт-Петербурге, Россия, и, просматривая один интернет-магазин, обнаружил плату Baikal T1 BFK 3.1 , стоимостью около 500 евро. Если вы когда-либо хотели ее получить, сейчас самое время.

Разве только мы хотим этого? Последний MIPS. Наш опыт пользования платой Imagination CI20, в которой было реализовано приложение Ingenic JZ4780 SoC — двухъядерная реализация MIPS32r2, был смешанным. У нас были более высокие ожидания от SoC, по нашему мнению, ни поставщик SoC, ни Imagination не оправдали ожидания пользователей. Единственная интересная часть этого SoC, с нашей точки зрения, это полноценный стек GLESv2/EGL для стареющего SGX540. То, что мы ожидаем на этот раз, это «более содержательный» MIPS, которое был бы ближе к современному уровню ISA, и P5600 был именно таким.

Итак, да, мы очень хотели заполучить этот процессор. Но цена была довольно высока, поэтому мы немного колебались. На что наш друг предложил подарить нам его.  [Огромное спасибо ему, за доброту и щедрость!]

BFK 3.1 — это плата sub-uATX, в форм-факторе flexATX — немного больше, чем mini-ITX. Это означает, что он компактный, не такой как RPi, заметьте, но все же. Baikal T1 является компактным SoC — не намного большим, чем Ingenic JZ4780. Последний — 17×17 мм BGA390 (40 нм), против 25×25 мм BGA576 (28 нм) для T1. Но, T1 — это правильный SoC, который содержит все необходимое для небольшого универсального компьютера (без GPU), чего и добивается BFK 3.1. В сочетании с универсальным MCU STM32F205 (ARM Cortex-M3 @ 120MHz), T1 позволяет использовать версию с двумя чипами. Помимо формы SoC и его компаньона MCU, в BFK 3.1 размещается разъем PCIe x16 коннектор (4x активные полосы), слот SO-DIMM, разъем питания ATX, 2x 1 Гбит Ethernet и 2x SATA 3 разъема, USB2.0, UART (через мини-USB), это то, что кажется USB OTG, несколькими JTAG и даже разъемом RPi GPIO — остальная, верхняя часть платы, практически чистая. Есть еще один разъем — для дополнительного 10Gb Ethernet, но это, скорее,  курьез с нашей точки зрения.

Подача питания BFK 3.1 осуществляется через 24-контактный разъем ATX — без блока питания для любого типа, но у нас также имелся 20-контактный ATX picoPSU (80 Вт DC-DC , 12 В вход) и запасной DC-DC 12В-конвертер (60 Вт). У нас также был оставшийся DDR3 SO-DIMM на 4 ГБ из выведенного из эксплуатации ноутбука, тоже есть RAM. «Небольшая» деталь ускользнула от нашего внимания — SO-DIMM был разновидностью 1333 мегатранзакции в секунду (667 МГц), тогда как плата заняла 1600 мегатранзакции в секунду (800 МГц) — поэтому первая загрузка платы заставила нас задуматься о контроллере RAM.

Плата оснащена «неподходящий» SO-DIMM @ 667 МГц

Одно посещение местного магазина и плата была усовершенствована отличной DDR3 на 8 ГБ.

Еще одна незначительная деталь о оперативной памяти, первоначально ускользнувшая из нашего внимания и не имеющая решающего значения для загрузки платы, о которой мы узнали только после первой загрузки: у SoC была 32-разрядная RAM-шина, это половина емкости 64-битного DIMM. Возможно, можно было бы увидеть полную емкость DIMM — мы не инженеры по аппаратной части, чтобы знать такие вещи, а дизайнеры BFK 3.1 явно не позаботились об этом. Что немного прискорбно для платы для разработчиков. Ну ладно — вернемся к «4 ГБ ОЗУ».

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

Плата поставляется с Busybox в SPI-flash, а Baikal Electronics предоставляет две версии образов Debian Stretch с ядром 4.4 для повседневного использования с диска SATA. Все доступные загрузочные носители доступны через самый чистый интерфейс меню U-Boot, который когда либо нас встречался.

Приечание: помимо использования образа Debian на SSD, все взаимодействия с BFK 3.1 выполнялись без участия ПК — представленный выше скриншот — из нашего надежного chromebook.

Обязательный сброс основных настроек:

blu@baikal:~$ uname -a
Linux baikal 4.4.100-bfk3 #4 SMP Thu Feb 15 17:25:02 MSK 2018 mips GNU/Linux
blu@baikal:~$
 
blu@baikal:~$ cat /proc/cpuinfo 
system type             : Baikal-T Generic SoC
machine                 : Baikal-T1 BFK3 evaluation board
processor               : 0
cpu model               : MIPS P5600 V3.0  FPU V2.0
BogoMIPS                : 1196.85
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 576
extra interrupt vector  : yes
hardware watchpoint     : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa                     : mips1 mips2 mips32r1 mips32r2
ASEs implemented        : vz msa eva xpa
shadow register sets    : 1
kscratch registers      : 3
package                 : 0
core                    : 0
VCED exceptions         : not available
VCEI exceptions         : not available
 
processor               : 1
cpu model               : MIPS P5600 V3.0  FPU V2.0
BogoMIPS                : 1196.85
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 576
extra interrupt vector  : yes
hardware watchpoint     : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa                     : mips1 mips2 mips32r1 mips32r2
ASEs implemented        : vz msa eva xpa
shadow register sets    : 1
kscratch registers      : 3
package                 : 0
core                    : 1
VCED exceptions         : not available
VCEI exceptions         : not available
 
blu@baikal:~$

Рассматривало ли ядро это как машину MIPS32r2 или оно использовало расширения адресов — это выходит за рамки первого знакомства с устройством. Нам хотелось изучить производительность uarch, и пока компиляторы были в курсе истинных возможностей ISA процессора, я был установлен.

Расширение VZ — это вещь для виртуализации — и далека от наших интересов. EVA и XPA расширения адресации — расширенный виртуальный адрес и расширенный физический адрес, соответственно. Первый позволяет более эффективное сопоставление виртуального пространства между ядром и пользовательским пространством для 32-битного/4 ГБ пространства для обработки адресов. И последнее — это расширение физического адреса. Из руководства P5600:

Расширенный физический адрес (XPA), который позволяет увеличить физический адрес от 32 бит до 40 бит.

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

Как насчет производительности FS?

root@baikal:/home/blu# hdparm -tT /dev/sda1
 
/dev/sda1:
 Timing cached reads:   2352 MB in  2.00 seconds = 1176.26 MB/sec
 Timing buffered disk reads: 1206 MB in  3.00 seconds = 401.89 MB/sec
root@baikal:/home/blu#

Как говорят мудрые люди, «приличная производительность SATA будет использоваться для сборки».

И, наконец, наблюдение, связанное с прерываниями, которое может помочь нам получить более чистые результаты бенчмаркинга:

blu@baikal:~$ cat /proc/interrupts 
           CPU0       CPU1       
  1:      16906       9097  MIPS GIC Local   1  timer
  2:          0          0  MIPS GIC Local   0  watchdog
  8:       5428          0  MIPS GIC   8  IPI resched
  9:          0       4970  MIPS GIC   9  IPI resched
 10:       4693          0  MIPS GIC  10  IPI call
 11:          0      15118  MIPS GIC  11  IPI call
 23:          0          0  MIPS GIC  23  be-apb
 31:          0          0  MIPS GIC  31  timer0
 38:          0          0  MIPS GIC  38  1f200000.pvt
 40:          0          0  MIPS GIC  40  1f046000.i2c0
 41:        191          0  MIPS GIC  41  1f047000.i2c1
 47:          5          0  MIPS GIC  47  dw_spi0
 48:          0          0  MIPS GIC  48  dw_spi1
 55:       2464          0  MIPS GIC  55  serial
 56:         10          0  MIPS GIC  56  serial
 63:          0          0  MIPS GIC  63  dw_dmac
 71:      21832          0  MIPS GIC  71  1f050000.sata
 75:          0          0  MIPS GIC  75  xhci-hcd:usb1
 79:        652          0  MIPS GIC  79  eth1
 87:          0          0  MIPS GIC  87  eDMA-Tx-0
 88:          0          0  MIPS GIC  88  eDMA-Tx-1
 89:          0          0  MIPS GIC  89  eDMA-Tx-2
 90:          0          0  MIPS GIC  90  eDMA-Tx-3
 91:          0          0  MIPS GIC  91  eDMA-Rx-0
 92:          0          0  MIPS GIC  92  eDMA-Rx-1
 93:          0          0  MIPS GIC  93  eDMA-Rx-2
 94:          0          0  MIPS GIC  94  eDMA-Rx-3
 95:          0          0  MIPS GIC  95  MSI PCI
 96:          0          0  MIPS GIC  96  AER PCI
103:          0          0  MIPS GIC 103  emc-dfi
104:          0          0  MIPS GIC 104  emc-ecr
105:          0          0  MIPS GIC 105  emc-euc
134:          0          0  MIPS GIC 134  be-axi
ERR:          0
blu@baikal:~$

Обратите внимание, что все последовательные и SATA-прерывания обслуживаются 1-м ядром? Мы могли бы это использовать.

Теперь самое интересное! Поскольку мы фанаты контрольных тестов, мы, как правило, запускаем несколько мини-тестов производительности при тестировании новых микроархитектур — один «общего назначения» и один на «устойчивой fp». Оба они были однопоточными, поэтому мы могли сосредоточиться на деталях uarch.

К сожалению, передо нами было последнее препятствие ‒ Debian Stretch поставляется с gcc-6.3, который не знает о расширении MSA в P5600. Для этого нам понадобился еще один крупный компилятор — gcc-7.3 полностью осведомленный новым набором инструкций, и поэтому следующим шагом было создание gcc-7.3 для платформы. Очень просто, как нам казалось.

У нас возникли трудности с пониманием того, что самозагружаемая сборка по умолчанию для компилятора завершилась неудачей с «незаконной инструкцией» на этапе начальной загрузки. Так обстоит дело с g ++ — 7.3 в Debian Stretch при создании самостоятельной --target=mipsel-linux-gnu на BFK 3.1, и именно поэтому мы обратились к списку рассылки gcc-dev с неправильной постановкой вопроса, к которому, к счастью, мы получил полезные ответы.

Вернемся к BFK 3.1, где в итоге мы получили хорошую сборку g ++ — 7.3 через следующую конфигурацию, в значительной степени скопированную с g ++ — 6.3 Debian:

$ CPATH=/usr/include/mipsel-linux-gnu/ LIBRARY_PATH=/usr/lib/mipsel-linux-gnu/ ../gcc-7.3.0/configure --enable-languages=c,c++ --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --disable-multiarch --with-arch-32=mips32r2 --with-fp-32=xx --with-madd4=no --with-lxc1-sxc1=no --enable-checking=release --build=mipsel-linux-gnu --host=mipsel-linux-gnu --target=mipsel-linux-gnu
$ CPATH=/usr/include/mipsel-linux-gnu/ LIBRARY_PATH=/usr/lib/mipsel-linux-gnu/ make -j2

Что дало нам:

blu@baikal:~$ /usr/bin/g++ --version
g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
blu@baikal:~$ g++ --version
g++ (GCC) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
blu@baikal:~$

Ура, поддержка компилятора MSA получена! Теперь мы могли сделать все, что хотели (и не только).

Выражаем свою благодарность источнику с которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments