NanoPi R1 - High CPU wait I/O

Hi, running ipfire 153 test on NanoPi R1, booting & running from the SDCard (mmcblk0).

Overall runs at acceptable levels however when I/O is involved e.g. updating snorts rules, updating URL blacklists, non-transparent proxy logging, etc… the graph shows very high wait I/O time…

I have tried to make it boot from mmcblk2 (eMMC) using the instructions here with no luck; the instructions exec correctly but the NanoPi never boots without the external sdcard in place.

any ideas on how to fix this ?

I tracked down the instructions for installing u-boot to here and the instructions in the wiki seem to agree. The one thing that I didn’t understand is this line:

The boot device’s name recognized by system under NanoPi H3/H2+ is always “/dev/mmcblk0”.

The R1 apparently uses the Allwinner H3 chip.


loosely speaking, this means your disk is unable to process the amount of data handed over by the CPU in an appropriate amount of time. Especially on cheap SD cards, this is a common issue.

You might get better performance by using a different SD card (some of them are “optimised” for cameras saving raw images, which should be good enough, although they are more expensive). In the end, however, choosing a different hardware which is capable of booting from an SSD might be the more sustainable solution.

Thanks, and best regards,
Peter Müller

I use a Samsung 16GB HC class 10. Does it qualify as cheap ?

In any case I assume the internal eMMC should have better performance hence…

re: boot ipfire on eMMC, the instructions in the ipfire wiki do not work for me, however the above comment recommends the boot switch must happen against the SDCard rather against the eMMC… which means the correct boot switch instruction should be

dd if=/usr/share/u-boot/nanopi-r1/u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1K seek=8

I can mount /dev/mmcblk2/p1 and see the boot files incl. uENV.txt with the correct console settings, however when I remove the sdcard the nanopi doesn’t boot/start at all.

Does this make sense ?

I have now managed to boot from eMMC.

The only thing I did was to enable eMMC writing to the boot section by disabling eMMC boot partitions write protection as per guidelines here

echo 0 > /sys/block/mmcblk2boot0/force_ro
echo 0 > /sys/block/mmcblk2boot1/force_ro

Then I repeated the instruction in the ipfire wiki for NanoPi R1 against /dev/mmcblk2 (eMMC)

The I/O is now significantly less … I think problem solved, I’ll keep monitoring


Just to clarify, does it now boot without the SD card?

yes it does boot without an SDCard in the slot


Here is the eMMC (post-19Dec) vs Samsung Class 10 HC (pre-19Dec) performance and following a week of monitoring.