binman: Increase default fitImage data section resize step from 1k to 64k
authorMarek Vasut <marex@denx.de>
Tue, 12 Jul 2022 17:41:29 +0000 (19:41 +0200)
committerSimon Glass <sjg@chromium.org>
Tue, 26 Jul 2022 08:30:56 +0000 (02:30 -0600)
commit109dbdf042e2a034edd8ed7b711143c522cb1465
tree81007f0febba353c84cadd5471bd2de24ab8db63
parent54e89a8beb0edc6135586fed2a71139830d94974
binman: Increase default fitImage data section resize step from 1k to 64k

Currently the fitImage data area is resized in 1 kiB steps. This works
when bundling smaller images below some 1 MiB, but when bundling large
images into the fitImage, this make binman spend extreme amount of time
and CPU just spinning in pylibfdt FdtSw.check_space() until the size
grows enough for the large image to fit into the data area. Increase
the default step to 64 kiB, which is a reasonable compromise -- the
U-Boot blobs are somewhere in the 64kiB...1MiB range, DT blob are just
short of 64 kiB, and so are the other blobs. This reduces binman runtime
with 32 MiB blob from 2.3 minutes to 5 seconds.

The following can be used to trigger the problem if rand.bin is some 32 MiB.
"
/ {
  itb {
    fit {
      images {
        test {
          compression = "none";
          description = "none";
          type = "flat_dt";

          blob {
            filename = "rand.bin";
            type = "blob-ext";
          };
        };
      };
    };
  };

  configurations {
    binman_configuration: config {
      loadables = "test";
    };
  };
};
"

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Cc: Simon Glass <sjg@chromium.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
tools/binman/etype/fit.py