Если вы следите за этим блогом достаточно давно, вы, возможно, помните, что все работы сообщества 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, и результаты выглядят великолепно:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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.
Оригинал статьи вы можете прочитать здесь.