From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Amit Kumar Mahapatra <amit.kumar-mahapatra@xilinx.com>
Cc: <richard@nod.at>, <vigneshr@ti.com>,
<linux-mtd@lists.infradead.org>, <linux-kernel@vger.kernel.org>,
<git@xilinx.com>,
David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Subject: Re: [RFC PATCH] mtd: tests: Fix eraseblock read speed miscalculation for lower partition sizes
Date: Thu, 3 Feb 2022 17:56:16 +0100 [thread overview]
Message-ID: <20220203175616.14f85dc1@xps13> (raw)
In-Reply-To: <20220203132434.25769-1-amit.kumar-mahapatra@xilinx.com>
Hi Amit,
+Cc: David, who's maintaining the tools. Please keep him in the
recipients list!
amit.kumar-mahapatra@xilinx.com wrote on Thu, 3 Feb 2022 18:54:34 +0530:
> While calculating speed during mtd_speedtest, the time interval
> (i.e., start - finish) is rounded off to the nearest milliseconds by
> ignoring the fractional part. This leads to miscalculation of speed.
> The miscalculation is more visible while running speed test on small
> partition sizes(i.e., when partition size is equal to eraseblock size or
> twice the eraseblock size) at higher spi frequencies.
>
> For e.g., while calculating eraseblock read speed for a mtd partition with
> size equal to the eraseblock size(i.e., 64KiB) the eraseblock read time
> interval comes out to be 966490 nanosecond. This is then converted to
> millisecond(i.e., 0.966 msec.). The integer part (i.e., 0 msec) of the
> value is considered and the fractional part (i.e., 0.966) is ignored,for
> calculating the eraseblock read speed. So the reported eraseblock read
> speed is 0 KiB/s, which is incorrect.
>
> There are two approaches to fix this issue.
>
> First approach will be to keep the time interval in millisecond. and round
> up the integer value, with this approach the 0.966msec time interval in the
> above example will be rounded up to 1msec and this value is used for
> calculating the speed. Downside of this approach is that the reported speed
> is still not accurate.
>
> Second approach will be to convert the time interval to microseconds
> instead of milliseconds, with this approach the 966490 nanosecond time
> interval in the above example will be converted t0 966.490usec and this
> value is used for calculating the speed. As compared to the current
> implementation and the suggested First approach, this approach will report
> a more accurate speed. Downside of this approach is that, in future if the
> mtd size is too large then the u64 variable, that holds the number of
> bytes, might overflow.
>
> In this patch we have gone with the second approach as this reports a more
> accurate speed. With this approach the eraseblock read speed in the above
> example comes out to be 132505 KiB/s when the spi clock is configured at
> 150Mhz.
>
> Signed-off-by: Amit Kumar Mahapatra <amit.kumar-mahapatra@xilinx.com>
> ---
> BRANCH: mtd/next
> ---
> drivers/mtd/tests/speedtest.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/mtd/tests/speedtest.c b/drivers/mtd/tests/speedtest.c
> index 93e76648f676..2b76e7750c68 100644
> --- a/drivers/mtd/tests/speedtest.c
> +++ b/drivers/mtd/tests/speedtest.c
> @@ -161,13 +161,13 @@ static inline void stop_timing(void)
> static long calc_speed(void)
> {
> uint64_t k;
> - long ms;
> + long us;
Should this be an explicit 64-bit value? And unsigned?
unsigned long long int or uint64_t? I believe we are now 1000x closer
to the 4GiB limit so we might need to enlarge this variable.
>
> - ms = ktime_ms_delta(finish, start);
> - if (ms == 0)
> + us = ktime_us_delta(finish, start);
> + if (us == 0)
> return 0;
> - k = (uint64_t)goodebcnt * (mtd->erasesize / 1024) * 1000;
> - do_div(k, ms);
> + k = (uint64_t)goodebcnt * (mtd->erasesize / 1024) * 1000000;
> + do_div(k, us);
> return k;
> }
>
Otherwise lgtm!
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Thanks,
Miquèl
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
WARNING: multiple messages have this Message-ID (diff)
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Amit Kumar Mahapatra <amit.kumar-mahapatra@xilinx.com>
Cc: <richard@nod.at>, <vigneshr@ti.com>,
<linux-mtd@lists.infradead.org>, <linux-kernel@vger.kernel.org>,
<git@xilinx.com>,
David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Subject: Re: [RFC PATCH] mtd: tests: Fix eraseblock read speed miscalculation for lower partition sizes
Date: Thu, 3 Feb 2022 17:56:16 +0100 [thread overview]
Message-ID: <20220203175616.14f85dc1@xps13> (raw)
In-Reply-To: <20220203132434.25769-1-amit.kumar-mahapatra@xilinx.com>
Hi Amit,
+Cc: David, who's maintaining the tools. Please keep him in the
recipients list!
amit.kumar-mahapatra@xilinx.com wrote on Thu, 3 Feb 2022 18:54:34 +0530:
> While calculating speed during mtd_speedtest, the time interval
> (i.e., start - finish) is rounded off to the nearest milliseconds by
> ignoring the fractional part. This leads to miscalculation of speed.
> The miscalculation is more visible while running speed test on small
> partition sizes(i.e., when partition size is equal to eraseblock size or
> twice the eraseblock size) at higher spi frequencies.
>
> For e.g., while calculating eraseblock read speed for a mtd partition with
> size equal to the eraseblock size(i.e., 64KiB) the eraseblock read time
> interval comes out to be 966490 nanosecond. This is then converted to
> millisecond(i.e., 0.966 msec.). The integer part (i.e., 0 msec) of the
> value is considered and the fractional part (i.e., 0.966) is ignored,for
> calculating the eraseblock read speed. So the reported eraseblock read
> speed is 0 KiB/s, which is incorrect.
>
> There are two approaches to fix this issue.
>
> First approach will be to keep the time interval in millisecond. and round
> up the integer value, with this approach the 0.966msec time interval in the
> above example will be rounded up to 1msec and this value is used for
> calculating the speed. Downside of this approach is that the reported speed
> is still not accurate.
>
> Second approach will be to convert the time interval to microseconds
> instead of milliseconds, with this approach the 966490 nanosecond time
> interval in the above example will be converted t0 966.490usec and this
> value is used for calculating the speed. As compared to the current
> implementation and the suggested First approach, this approach will report
> a more accurate speed. Downside of this approach is that, in future if the
> mtd size is too large then the u64 variable, that holds the number of
> bytes, might overflow.
>
> In this patch we have gone with the second approach as this reports a more
> accurate speed. With this approach the eraseblock read speed in the above
> example comes out to be 132505 KiB/s when the spi clock is configured at
> 150Mhz.
>
> Signed-off-by: Amit Kumar Mahapatra <amit.kumar-mahapatra@xilinx.com>
> ---
> BRANCH: mtd/next
> ---
> drivers/mtd/tests/speedtest.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/mtd/tests/speedtest.c b/drivers/mtd/tests/speedtest.c
> index 93e76648f676..2b76e7750c68 100644
> --- a/drivers/mtd/tests/speedtest.c
> +++ b/drivers/mtd/tests/speedtest.c
> @@ -161,13 +161,13 @@ static inline void stop_timing(void)
> static long calc_speed(void)
> {
> uint64_t k;
> - long ms;
> + long us;
Should this be an explicit 64-bit value? And unsigned?
unsigned long long int or uint64_t? I believe we are now 1000x closer
to the 4GiB limit so we might need to enlarge this variable.
>
> - ms = ktime_ms_delta(finish, start);
> - if (ms == 0)
> + us = ktime_us_delta(finish, start);
> + if (us == 0)
> return 0;
> - k = (uint64_t)goodebcnt * (mtd->erasesize / 1024) * 1000;
> - do_div(k, ms);
> + k = (uint64_t)goodebcnt * (mtd->erasesize / 1024) * 1000000;
> + do_div(k, us);
> return k;
> }
>
Otherwise lgtm!
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Thanks,
Miquèl
next prev parent reply other threads:[~2022-02-03 16:57 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-03 13:24 [RFC PATCH] mtd: tests: Fix eraseblock read speed miscalculation for lower partition sizes Amit Kumar Mahapatra
2022-02-03 13:24 ` Amit Kumar Mahapatra
2022-02-03 16:56 ` Miquel Raynal [this message]
2022-02-03 16:56 ` Miquel Raynal
2022-02-08 5:24 ` Amit Kumar Kumar Mahapatra
2022-02-08 5:24 ` Amit Kumar Kumar Mahapatra
-- strict thread matches above, loose matches on Subject: below --
2022-02-03 13:21 Amit Kumar Mahapatra
2022-02-03 13:21 ` Amit Kumar Mahapatra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220203175616.14f85dc1@xps13 \
--to=miquel.raynal@bootlin.com \
--cc=amit.kumar-mahapatra@xilinx.com \
--cc=david.oberhollenzer@sigma-star.at \
--cc=git@xilinx.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=richard@nod.at \
--cc=vigneshr@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.