[PATCH] cmd: mtd: fix speed measurement in the speed benchmark

Mikhail Kshevetskiy mikhail.kshevetskiy at iopsys.eu
Tue Aug 26 16:35:24 CEST 2025


and maybe benchmark feature should be documented

On 26.08.2025 17:32, Michael Nazzareno Trimarchi wrote:
> Hi 
>
> On Tue, Aug 26, 2025 at 4:23 PM Miquel Raynal
> <miquel.raynal at bootlin.com> wrote:
>
>     Hello Mikhail,
>
>     On 26/08/2025 at 02:48:29 +03, Mikhail Kshevetskiy
>     <mikhail.kshevetskiy at iopsys.eu> wrote:
>
>     > The shown speed inverse linearly depends on size of data.
>     > See the output:
>     >
>     >   spi-nand: spi_nand nand at 0: Micron SPI NAND was found.
>     >   spi-nand: spi_nand nand at 0: 256 MiB, block size: 128 KiB, page
>     size: 2048, OOB size: 128
>     >   ...
>     >   => mtd read.benchmark spi-nand0 $loadaddr 0 0x40000
>     >   Reading 262144 byte(s) (128 page(s)) at offset 0x00000000
>     >   Read speed: 63kiB/s
>     >   => mtd read.benchmark spi-nand0 $loadaddr 0 0x20000
>     >   Reading 131072 byte(s) (64 page(s)) at offset 0x00000000
>     >   Read speed: 127kiB/s
>     >   => mtd read.benchmark spi-nand0 $loadaddr 0 0x10000
>     >   Reading 65536 byte(s) (32 page(s)) at offset 0x00000000
>     >   Read speed: 254kiB/s
>     >
>     > In the spi-nand case 'io_op.len' is not the same as 'len',
>     > thus we divide a size of the single block on total time.
>     > This is wrong, we should divide on the time for a single
>     > block.
>     >
>     > Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy at iopsys.eu>
>
>
> Add a fixes with commit reference, when you post v2 and address al the
> other comments
>
> Michael
>  
>
>     Happy to see this is useful :-) But you're totally right, it
>     didn't use
>     the correct length. Maybe I would rephrase a bit the last two
>     sentences
>     to make the commit clearer:
>
>     "In the spi-nand case 'io_op.len' is not always the same as 'len',
>     thus
>     we are using the wrong amount of data to derive the speed."
>
>     However, regarding the diff,
>
>     > @@ -594,9 +594,10 @@ static int do_mtd_io(struct cmd_tbl *cmdtp,
>     int flag, int argc,
>>     >       if (benchmark && bench_start) {
>     >               bench_end = timer_get_us();
>     > +             block_time = (bench_end - bench_start) / (len /
>     io_op.len);
>     >               printf("%s speed: %lukiB/s\n",
>     >                      read ? "Read" : "Write",
>     > -                    ((io_op.len * 1000000) / (bench_end -
>     bench_start)) / 1024);
>     > +                    ((io_op.len * 1000000) / block_time) / 1024);
>
>     Why not just dividing the length by the benchmark time instead of
>     reducing and rounding the denominator in the first place, which I
>     believe makes the final result less precise?
>
>     Thanks,
>     Miquèl
>
>
>
> -- 
> Michael Nazzareno Trimarchi
> Co-Founder & Chief Executive Officer
> M. +39 347 913 2170
> michael at amarulasolutions.com
> __________________________________
>
> Amarula Solutions BV
> Joop Geesinkweg 125, 1114 AB, Amsterdam, NL
> T. +31 (0)85 111 9172
> info at amarulasolutions.com
> http://www.amarulasolutions.com/
> <http://www.amarulasolutions.com/>


More information about the U-Boot mailing list