[U-Boot] [PATCH v3] fs/fs.c: do_fsload: measure throughput

Andreas Bießmann
2012-10-30T11:49:26Z

This patch adds time measurement and throughput calculation for all supported
fsload commands.

The output of ext2load changes from

---8<---
1830666 bytes read
--->8---

to

---8<---
1830666 bytes read in 237 ms (7.4 MiB/s)
--->8---

Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
---
since v1:
* use 'time' instead of 'time_start' as suggested by Wolfgang

since v2:
* rebase on top of 045fa1e1142552799ad3203e9e0bc22a11e866ea
Now there is some more overhead in the measurement caused by the respective
fs-type functions (detect fs-type, eventually do mount and so on).
Nevertheless I think such a measurement is good for further improvements
like increasing throughput by whatever measures.

fs/fs.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/fs/fs.c b/fs/fs.c
index 23ffa25..9f1cfed 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -246,6 +246,7 @@ int do_fsload(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
unsigned long pos;
int len_read;
char buf[12];
+ unsigned long time;

if (argc < 5)
return CMD_RET_USAGE;
@@ -280,11 +281,19 @@ int do_fsload(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
else
pos = 0;

+ time = get_timer(0);
len_read = fs_read(filename, addr, pos, bytes);
+ time = get_timer(time);
if (len_read <= 0)
return 1;

- printf("%d bytes read\n", len_read);
+ printf("%d bytes read in %lu ms", len_read, time);
+ if (time > 0) {
+ puts(" (");
+ print_size(len_read / time * 1000, "/s");
+ puts(")");
+ }
+ puts("\n");

sprintf(buf, "0x%x", len_read);
setenv("filesize", buf);
--
1.7.10.4