Разгон microSD слота в Raspberry Pi

Существует возможность разгона microSD порта у Raspberry Pi что может дать существенный прирост скорости повседневных операций чтения и записи от 25% до 50%. Конечно же исправить плохую карту памяти этот метод никак не поможет, учитывая что в большинстве случаев скорость карты памяти существенно ниже максимальной скорости шини RPi. А так же, для успешного осуществления у Вас обязательно должен быть блок питания с выходными характеристиками 5V 2А, с плохим блоком питания есть высокий шанс потерять все данные на карте памяти.

Качественный блок питания (5V 2A) обязателен для успешного разгона microSD слота.
Не рекомендуется использовать не UHS карту памяти.
Даже в самом идеальном случае - сделайте бекап. Вы предупреждены.

Разгон

Добавьте директиву dtoverlay с параметром 100MHz (стандартно 50MHz) в свой /boot/config.txt

dtoverlay=sdhost,overclock_50=100

Перезагрузите плату sudo reboot и можете проводить тесты.

Тестирование

Тестирование hdparm, dd, iozone.

$ curl https://raw.githubusercontent.com/geerlingguy/raspberry-pi-dramble/master/setup/benchmarks/microsd-benchmarks.sh | sudo bash

Тестирование hdparm и чтение/запись больших файлов.

$ curl http://www.nmacleod.com/public/sdbench.sh | sudo bash

Я протестировал на обыкновенной SanDisk Ultra (UHS-1) 8GB и вот такие результаты у меня получились.

До разгона

$ curl https://raw.githubusercontent.com/geerlingguy/raspberry-pi-dramble/master/setup/benchmarks/microsd-benchmarks.sh | sudo bash
                                                              random    random     bkwd    record    stride                                    
              kB  reclen    write  rewrite    read    reread    read     write     read   rewrite      read   fwrite frewrite    fread  freread
          102400       4     1663     1678     5476     5462     5457      870                                                                

$ curl http://www.nmacleod.com/public/sdbench.sh | sudo bash
CONFIG: 
CLOCK : 50.000 MHz
CORE  : 400 MHz, turbo=0
DATA  : 512 MB, /root/test.dat

HDPARM:
======
 Timing O_DIRECT disk reads:  66 MB in  3.01 seconds =  21.91 MB/sec
 Timing O_DIRECT disk reads:  66 MB in  3.01 seconds =  21.93 MB/sec
 Timing O_DIRECT disk reads:  66 MB in  3.02 seconds =  21.87 MB/sec

WRITE:
=====
536870912 bytes (537 MB) copied, 25.7151 s, 20.9 MB/s
536870912 bytes (537 MB) copied, 25.5975 s, 21.0 MB/s
536870912 bytes (537 MB) copied, 25.645 s, 20.9 MB/s

READ:
====
536870912 bytes (537 MB) copied, 24.4688 s, 21.9 MB/s
536870912 bytes (537 MB) copied, 24.5011 s, 21.9 MB/s
536870912 bytes (537 MB) copied, 24.461 s, 21.9 MB/s

RESULT (AVG):
============
Overlay config                      core_freq   turbo   overclock_50    WRITE        READ        HDPARM
                                       400        0      50.000 MHz   19.96 MB/s   20.92 MB/s   21.90 MB/s

После разгона

$ curl https://raw.githubusercontent.com/geerlingguy/raspberry-pi-dramble/master/setup/benchmarks/microsd-benchmarks.sh | sudo bash

                                                    random    random     bkwd    record    stride                                    
    kB  reclen    write  rewrite    read    reread    read     write     read   rewrite      read   fwrite frewrite    fread  freread
102400       4     1760     1741     6000     6008     5974      890                                                                

$ curl http://www.nmacleod.com/public/sdbench.sh | sudo bash
CONFIG: dtoverlay=sdhost,overclock_50=100
CLOCK : 100.000 MHz
CORE  : 400 MHz, turbo=0
DATA  : 512 MB, /root/test.dat

HDPARM:
======
 Timing O_DIRECT disk reads: 106 MB in  3.01 seconds =  35.27 MB/sec
 Timing O_DIRECT disk reads: 106 MB in  3.01 seconds =  35.16 MB/sec
 Timing O_DIRECT disk reads: 106 MB in  3.02 seconds =  35.14 MB/sec

WRITE:
=====
536870912 bytes (537 MB) copied, 22.5354 s, 23.8 MB/s
536870912 bytes (537 MB) copied, 23.0092 s, 23.3 MB/s
536870912 bytes (537 MB) copied, 22.3843 s, 24.0 MB/s

READ:
====
536870912 bytes (537 MB) copied, 15.3637 s, 34.9 MB/s
536870912 bytes (537 MB) copied, 15.4424 s, 34.8 MB/s
536870912 bytes (537 MB) copied, 15.5618 s, 34.5 MB/s

RESULT (AVG):
============
Overlay config                      core_freq   turbo   overclock_50    WRITE        READ        HDPARM
dtoverlay=sdhost,overclock_50=100      400        0     100.000 MHz   22.61 MB/s   33.13 MB/s   35.18 MB/s

Проблемы и их решение

  • Если Ваш блок питания выдает напряжение менее 2А - Raspberry Pi может совсем не запустится или принудительно сбросить частоту MicroSD слота.
  • Если Вы заметите в dmesg сообщения “reducing overclock” связанные с mmc0 - это скорее всего означает что Ваша карта памяти не может работать на более высоких частотах.

В некоторых случаях помогала простая перезагрузка по питанию, если Вам это не помогло - попробуйте использовать другой БП и карту памяти. Так же, можно не задирать частоту на максимум, а поробовать одно из более низких значений.
Raspberry Pi 2: 63, 72, 84
Raspberry Pi 3: 50, 80, 100

Если у Вас есть проблемы с нормальным функционированием WiFi после разгона microSD порта или в Вашей ОС нет sdhost оверлея в /boot/overlays/ - вы можете скачать его sudo wget -O /boot/overlays/sdtweak-overlay.dtb http://piboard.io/uploads/files/1473172093809-sdtweak-overlay.dtb. В любом случае - не помешает его обновить. В случае обвновления файла в /boot/config.txt нужно использовать sdtweak директиву, а не sdhost.

Спасибо! Стало заметно быстрее работать. На Sandisk extreme 16GB - 40МБ чтения и почти 30МБ записи, рандом рид/райт 9966/2337

Всем привет. Ребята какую покупать флешку для ОС 16 или 32 гиг?

@viktor6 Привет! Если вопрос в обьеме - от 8 и выше, десятый класс.

Log in to reply