Как одна строка кода увеличила производительность записи Allwinner A20 SATA в три раза

Если вы следите за этим блогом достаточно давно, вы, возможно, помните, что все работы сообщества linux-sunxi, направленные на улучшение поддержки программного обеспечения u-boot и Linux на процессорах Allwinner, начались с процессора Allwinner A10, который был установлен в телевизионной приставке MeLE A1000 еще в 2012 году, представляющей, в то время, ​​интересную альтернативу плате Raspberry Pi, которая была в дефиците во время запуска и спустя несколько месяцев.

Одной из наиболее интересных функций, обнаруженных в одноядерном процессоре Arm Cortex-A8 Allwinner A10, был интерфейс SATA, а через несколько месяцев был объявлен Allwinner A20 с двухъядерным процессором Cortex-A7 и практически такими же периферийными устройствами, что и Allwinner A10, включая SATA. Однако, когда мы тестировали плату CubieTruck, подключенную к механическому приводу, то заметили, что последовательная производительность SATA была хорошей для чтения (~ 180 МБ/с), но запись была довольно медленной — около 36 МБ/с.

Многие люди жаловались на это, поскольку максимальная производительность записи SATA для Allwinner A10/A20 составляла 45 МБ/с из-за проблем с кремнием и драйверами.

Оказывается, это может быть просто проблема с драйвером, поскольку недавний патч, изменяющий одну строку кода, позволяет ускорить запись примерно в три раза (улучшение на 200%).

Большинство из нас не знакомы с регистрами Allwinner SATA DMA, но, к счастью, патч объясняет, что здесь происходит:

Увеличение SATA/ AHCI DMA TX / RX FIFO (P0DMACR.TXTS и .RXTS) со значения, по умолчанию, 0x0 каждый до 0x3 каждый, дает увеличение скорости записи до 120 МБ/с с 36 — 45 МБ/с, которые были ранее. Производительность чтения составляет около 200 МБ/с [протестировано на SSD с использованием dd bs = 4K count = 512K].

Испытано на SBC Banana Pi R1 (он же Lamobo R1) и Banana Pi M1 
с 32-битными SoC Allwinner A20 (ARMv7-a/arm-linux-gnueabihf).

Мы попытался заглянуть в общедоступную документацию Allwinner A20, но не смогли найти ничего о P0DMACR или подробностях о SATA registers, так как документация имелась только на SATA clock. Может быть, это объясняет, почему потребовалось 7 лет, чтобы решить проблему производительности…

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

Последовательная запись 38875 КБ/с в Linux 4.19 была значительно улучшена до 127084 КБ/с благодаря применению этого однострочного патча. Это здорово, и побочных эффектов пока не наблюдается. Патч выглядит довольно новым, поэтому может потребоваться дополнительное тестирование. Если вы используете Armbian и можете немного подождать вам не нужно будет применять патч самостоятельно, поскольку он является частью выпуска Debian 10. Унал Мулту (Uenal Mutlu) также представил свой патч в список рассылки Linux Kernel, он должен быть частью Linux 5.2.

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

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


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

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

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

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