Как одна строка кода увеличила производительность записи 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, и результаты выглядят великолепно: 

Samsung SSD 840 Pro 256 GB @ Cubietruck
 
iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2
 
Kernel 3.4.y
                                                               random   random
                  reclen    write  rewrite     read   reread     read    write
          102400       4    10714    15285    31921    32280    16328    14767
          102400      16    21757    25767    57812    58010    45695    25201
          102400     512    33403    32429   128245   116062   109591    33595
          102400    1024    34846    35240   129965   131121   129515    35227
          102400   16384    37895    37918   207564   204627   204340    38019
 
Kernel 4.19.y with SATA improvement patch
 
          102400       4    22876    32704    37686    39143    22571    30990
          102400      16    54254    69325    94749    97225    61354    68529
          102400     512   110670   113325   190346   163677   186012   112679
          102400    1024   113971   115928   206044   207406   184936   115069
          102400   16384   127084   127588   243400   253305   252148   127611
 
without
 
          102400       4    18053    22336    45249    46338    24860    22292
          102400      16    30692    32188   106052   106577    71526    32746
          102400     512    39632    39978   186433   185444   178097    39939
          102400    1024    39860    40163   189900   191076   188446    40098
          102400   16384    38875    41508   241939   244088   243405    41314

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

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

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

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

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

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