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

    Всем привет.
    Смотря видео на 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

    Средняя зарплата в IT

    113 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 5 314 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 12

      +2
      Векторизация под NEON не будет работать для вычислений с плавающей точкой без -ffast-math, т.к. NEON не совсем соотвествует стандарту IEEE754 (не поддерживает денормализованные числа).
        +1
        И ещё одно, что-то я не увидел в данной заметке самого интересного: сравнение производительности системы с вашими оптимизациями и без них, хотя бы с помощью синтетических тестов. Хочется понять, стоила ли овчинка выделенки.
          0
          > glxgears крутятся, но как-то не очень.
          На софте они крутятся
            0
            Решил попробовать один из таких мини-компьютеров как замену PC, чтобы общался с USB устройством и какие-то данные отправлял по сети, CPU и памяти должно хватить для задач.
            Заказал на eBay AK802 (MK802?) за $62 (торги) с бесплатной доставкой. Попробовал Android который идёт вместе с ним, как-то сыро. Angry birds тормозят, видео встроенное в страничку через браузер в одном случае не пошло, в другом рывками, потом вообще браузер упал. Как это всё должно работать у пользователей не понятно.

            Когда игрался с Android заметил глюки с железом. Бывает не запускается с первого раза, приходится вытыкать питение и пробовать сного. Потом вставляю USB трансивер от радиомышки, либо всё пропадает, либо изображение начинает моргать раз в секунду, вроде в разьёме OTG заработала более стабильно. Также заметил что не грузится устройство если USB трансивер уже вставлен, если вставлять позже то всё хорошо. Это проблемы с питанием, не тянет? У меня у одного такие глюки?

            Начал пробовать Linux на устройстве с готовой сборки, качнул Ubuntu 12.04, завелась, счастье. Решил попробовать Puppy Linux, не запустился, попробовал Fedora, тоже не запустилась, но как оказалось на устройстве и родной Android не грузится у меня. Вот теперь и не знаю, мог ли я убить AK802 просто пробуя разные Линуксы на MicroSD? Или это Китайское качество такое.

            Главное впечатление от устройства в качестве поиграться с аля-Linux Embedded проектом — это отсутствие консоли по серийному порту. Ни какой textmode он на HDMI не выводит. Что там пишет загрузчик, что там пишет U-Boot, как ядро грузится… тишина до тех пор, пока ОС не поднимет графику, до этого момента чёрный ящек. Или я что-то упустил?
              +1
              Хм. У меня Mele A1000, никаких проблем, которые вы описываете, нет, да и UART есть.
                0
                Смотрю на популярном сайте картинки устройста, а где там UART или он на плате и не выведен наружу?

                Еще не понятно из описания немного, там одновременно и WiFi и Ethernet присутствует?
                (на картинках виден разъём Ethernet, в описание слово WiFi)
                0
                Кстати, интересно почему вы не выбрали скажем MiniX какой-нибудь, он помельче размером и чуть дешевле, хотя почти тоже самое, Ethernet нет правда, только WiFi.
                  0
                  Хотелось SATA
              0
              Скачать: rghost.ru/39743296

              По ссылке дают торрент файл у которого ноль сидеров.

              Не плохо было бы упомянуть где взять tool-chain (кросскомпилятор).

              Может быть дать заодно ссылки на готовые образы ubuntu/fedora/arch_linux в интернете?
                0
                Тулчейн я использовал linaro, как самый оптимизированный для ARM. Сейчас уже девайсом не занимаюсь, да и под него появился официально archlinuxarm.
                0
                >с hardware floating point: ArchLinux-ARM, Ubuntu и Fedora.

                Забыли gentoo :)

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое