12 August 2012

Небольшой экскурс в Linux на ARM и ArchLinux на Mele A1000/A2000

Configuring Linux
Всем привет.
Смотря видео на youtube, как запускают ubuntu на одноплатных компьютерах вроде Mele A1000 или MK802, решил я, что нужно что-то делать с производительностью и заодно запустить ArchLinux на этом устройстве, т.к. этого, почему-то, пока еще никто не сделал.

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


Почему мы видим, что все устройства на ARM и MIPS работают так медленно в качестве десктопных систем? Причин множество:
  1. Все устройства разные. Некоторые поддерживают один набор команд, некоторые — другой. У некоторых есть FPU, у некоторых — нет. Некоторые ARMv5, другие ARMv6, третьи ARMv7
  2. Неоптимизированность компиляторов.
  3. Нерасторопность / бездействие производителей.
  4. Сложность поддержки и нерасторопность мейнтейнеров дистрибутивов.


Если для x86 первое практически не имеет значения, т.к. у всех есть FPU и оптимизации под конкретный процессор дают не более 5-10% производительности, то ARM устройства могут получить колоссальный прирост, для Mele это что-то вроде от 30% до 150% на сложных задачах с плавающей точкой (как, например, декодирование видео).
Так как полноценной поддержки в mainline-ядре реальных устройств, а не тестовых плат, практически нет, мы вынуждены пользоваться ядром от производителя, которое хорошо, если третей ветки. Причем зачастую изменения в ядро вносятся через зад, из-за чего мы получаем в меню конфигурации отсутствующие зависимости между опциями и практически невозможность портировать эти изменения на более свежие ядра средствами энтузиастов (это, конечно, не у всех).
Мейнтейнеры дистрибутивов не хотят тратить силы, вычислительную мощность и место на дисках для дополнительных репозиториев, и очень долгое время компилировали все либо с эмуляцией FPU, либо с softfp(позволяет использовать FPU, но совместимо с эмуляцией), и с оптимизациями под ARMv5, но, примерно чуть больше года назад, когда Cortex-A8 пошел в массы, мейнтейнеры задумались и решили попробовать все компилировать с hardware floating point. Так, ubuntu 12.04 стал первым массовым дистрибутивом, в котором появился armhf репозиторий. Это большой прогресс, только это дает Cortex-A8 прирост в 20%-40%, по сравнению с softfp, все приложения теперь собираются под ARMv7, но этого недостаточно.
На сегодняшний день, есть 3 дистрибутива, у которых есть репозитории с hardware floating point: ArchLinux-ARM, Ubuntu и Fedora. Т.к. я люблю ArchLinux, выбор для меня очевиден.

Устройства

«Почему мейнтейнеры собирают пакеты без NEON?», спросите вы:
ARMv7 без набора инструкций NEON (например, Marvell Armada в устройстве CuBox)
Cortex-A8 (ARMv7 + NEON, китайские устройства с Allwinner A10: Mele, MK802, MiniX)
Cortex-A9 без NEON (nVidia Tegra 2 в Toshiba AC100)
Cortex-A9 с NEON
Следует отметить, что VFP в Cortex-A9 уже практический такой же быстрый, как и NEON, и оптимизация под NEON скорее вопрос энергосбережения, нежели производительности.

Что было сделано

  • Взят последний U-Boot и ядро из dl.linux-sunxi.org/nightly/latest
  • Перекомпилированы важные пакеты с NEON и оптимизациями под Cortex-A8 (glibc, xz, bzip2, gzip, bash, openssl, zlib)
  • Перекомпилированы пакеты, до которых у меня дотянулись руки (mplayer2)
  • Добавлен видеодрайвер и GLES библиотеки (не уверен на счет работоспособности)
  • Все компилировалось Linaro GCC, т.к. он самый оптимизированный под ARM.

CFLAGS:
march=armv7-a -mfloat-abi=hard -mfpu=neon -ftree-vectorize -mvectorize-with-neon-quad -mcpu=cortex-a8 -mtune=cortex-a8 -mthumb -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2

Не работает аппаратное ускорение видео.
Пока непонятно, работает ли gles, т.к. glxinfo говорит, что direct rendering: yes, glxgears крутятся, но как-то не очень. В качестве сервера использовать можно.

Как все это записывать на флешку можно почитать по ссылке:
www.cnx-software.com/2012/07/20/nightly-builds-for-allwinner-a10-u-boot-linux-kernel-and-hardware-packs

Чтобы запустить интерфейс, нужно зайти по ssh root/root и набрать startx

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

И немножко еще информации: Allwinner работает с XBMC над видеоускорением в XBMC for Android. Будет настоящий STB, а то сейчас как-то даже нет ничего.

Скачать: rghost.ru/39743296
Tags:armlinuxandroidmelemele a1000mele a2000mk802minix
Hubs: Configuring Linux
+29
27.3k 71
Comments 12