* Why can diffsigs take sometimes really looooong? @ 2018-07-13 16:18 Uwe Geuder 2018-07-15 10:38 ` Richard Purdie 0 siblings, 1 reply; 4+ messages in thread From: Uwe Geuder @ 2018-07-13 16:18 UTC (permalink / raw) To: yocto Hi! At times I find the diffsigs command useful/educational to understand what is going on in my build. $ bitbake-diffsigs -t myimage do_image Often the result is shown in no time. However, recently I got some cases were it takes 150 (!) minutes to show a simple difference (1 line changed in do_install of systemd). In comparision building after that change (with sstate) takes some 10 minutes. And building everything from scratch (no sstate) takes just a bit over 50 minutes on the same machine. Of course the build can make good use of my 8 cores / 16 threads, whereas diffsigs seems to run in only 1 core. Still, shouldn't every build calculate all the dependencies, so running diffsigs should only be a small fraction of that work? Is there a natural explanation why diffsigs can sometimes be so slow? Just curious to understand what is going on there. I am on Rocko 2.4.3 if that makes a difference. Regards, Uwe Geuder Neuro Event Labs Oy Tampere, Finland uwe.gexder@neuroeventlabs.com (Bot check: fix one obvious typo) ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Why can diffsigs take sometimes really looooong? 2018-07-13 16:18 Why can diffsigs take sometimes really looooong? Uwe Geuder @ 2018-07-15 10:38 ` Richard Purdie 2018-07-16 8:26 ` Uwe Geuder 0 siblings, 1 reply; 4+ messages in thread From: Richard Purdie @ 2018-07-15 10:38 UTC (permalink / raw) To: Uwe Geuder, yocto On Fri, 2018-07-13 at 19:18 +0300, Uwe Geuder wrote: > At times I find the diffsigs command useful/educational to understand > what is going on in my build. > > $ bitbake-diffsigs -t myimage do_image > > Often the result is shown in no time. However, recently I got some > cases were it takes 150 (!) minutes to show a simple difference (1 > line > changed in do_install of systemd). > > In comparision building after that change (with sstate) takes some 10 > minutes. And building everything from scratch (no sstate) takes just > a > bit over 50 minutes on the same machine. > > Of course the build can make good use of my 8 cores / 16 threads, > whereas diffsigs seems to run in only 1 core. Still, shouldn't every > build calculate all the dependencies, so running diffsigs should only > be > a small fraction of that work? > > Is there a natural explanation why diffsigs can sometimes be so slow? > Just curious to understand what is going on there. > > I am on Rocko 2.4.3 if that makes a difference. Is your sstate directory on something slow like NFS? Cheers, Richard ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Why can diffsigs take sometimes really looooong? 2018-07-15 10:38 ` Richard Purdie @ 2018-07-16 8:26 ` Uwe Geuder 2018-07-19 9:59 ` Richard Purdie 0 siblings, 1 reply; 4+ messages in thread From: Uwe Geuder @ 2018-07-16 8:26 UTC (permalink / raw) To: yocto Thanks for your reply! On Sun, Jul 15, 2018 at 1:38 PM, Richard Purdie wrote: > On Fri, 2018-07-13 at 19:18 +0300, Uwe Geuder wrote: >> At times I find the diffsigs command useful/educational to understand >> what is going on in my build. >> >> $ bitbake-diffsigs -t myimage do_image >> >> Often the result is shown in no time. However, recently I got some >> cases were it takes 150 (!) minutes to show a simple difference (1 >> line >> changed in do_install of systemd). >> >> In comparision building after that change (with sstate) takes some 10 >> minutes. And building everything from scratch (no sstate) takes just >> a >> bit over 50 minutes on the same machine. >> >> Of course the build can make good use of my 8 cores / 16 threads, >> whereas diffsigs seems to run in only 1 core. Still, shouldn't every >> build calculate all the dependencies, so running diffsigs should only >> be >> a small fraction of that work? >> >> Is there a natural explanation why diffsigs can sometimes be so slow? >> Just curious to understand what is going on there. >> >> I am on Rocko 2.4.3 if that makes a difference. > > Is your sstate directory on something slow like NFS? > No, it is on the same ext4 as the rest of my build area. Backed by an Intel NVMe flash drive, so hopefully that is of reasonable quality... Here is the output of the time command from a new "record" diffsigs run shortly after my first posting > real 244m8.594s > user 137m21.897s > sys 8m17.606s So there is already more than 2 hours of CPU usage. Because diffsigs seems to be single threaded, that is a lower bound even with the best filesystem/disk. This build environment has been in use in development work for a couple of days. So there are many different signatures. But that should not make any significant difference if I compare just the 2 last ones, should it? When I had such a long run for the first time I first thought I had run in an endless loop. strace showed that the same files were opened again and again. However, in the end the command completed. I haven't made an effort yet to understand the pattern how it opens these files. For clean builds with no previous sstate I need "only" something like > real 54m53.939s > user 3268446 - 103936 = 3164510 = 527m25.10s > system 820431 - 1345 = 136m30.86s (These numbers are from overlayfs over ext4 on the same disk. Don't have any numbers without the additional overlayfs handy right now. According to experience the additional overlayfs leads to very similar wall times, just significant extra system CPU time) Regards, Uwe Geuder Neuro Event Labs Oy Tampere, Finland uwe.gexder@neuroeventlabs.com (Bot check: fix one obvious typo) ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Why can diffsigs take sometimes really looooong? 2018-07-16 8:26 ` Uwe Geuder @ 2018-07-19 9:59 ` Richard Purdie 0 siblings, 0 replies; 4+ messages in thread From: Richard Purdie @ 2018-07-19 9:59 UTC (permalink / raw) To: Uwe Geuder, yocto On Mon, 2018-07-16 at 11:26 +0300, Uwe Geuder wrote: > On Sun, Jul 15, 2018 at 1:38 PM, Richard Purdie wrote: > > On Fri, 2018-07-13 at 19:18 +0300, Uwe Geuder wrote: > > > At times I find the diffsigs command useful/educational to > > > understand > > > what is going on in my build. > > > > > > $ bitbake-diffsigs -t myimage do_image > > > > > > Often the result is shown in no time. However, recently I got > > > some > > > cases were it takes 150 (!) minutes to show a simple difference > > > (1 > > > line > > > changed in do_install of systemd). > > > > > > In comparision building after that change (with sstate) takes > > > some 10 > > > minutes. And building everything from scratch (no sstate) takes > > > just > > > a > > > bit over 50 minutes on the same machine. > > > > > > Of course the build can make good use of my 8 cores / 16 threads, > > > whereas diffsigs seems to run in only 1 core. Still, shouldn't > > > every > > > build calculate all the dependencies, so running diffsigs should > > > only > > > be > > > a small fraction of that work? > > > > > > Is there a natural explanation why diffsigs can sometimes be so > > > slow? > > > Just curious to understand what is going on there. > > > > > > I am on Rocko 2.4.3 if that makes a difference. > > > > Is your sstate directory on something slow like NFS? > > > > No, it is on the same ext4 as the rest of my build area. Backed by an > Intel NVMe flash drive, so hopefully that is of reasonable quality... > > Here is the output of the time command from a new "record" diffsigs > run > shortly after my first posting > > > real 244m8.594s > > user 137m21.897s > > sys 8m17.606s > > So there is already more than 2 hours of CPU usage. Because diffsigs > seems to be single threaded, that is a lower bound even with the best > filesystem/disk. > > This build environment has been in use in development work for a > couple of days. So there are many different signatures. But that > should not make any significant difference if I compare just the 2 > last ones, should it? > > When I had such a long run for the first time I first thought I had > run in an endless loop. strace showed that the same files were opened > again and again. However, in the end the command completed. I haven't > made an effort yet to understand the pattern how it opens these > files. > > For clean builds with no previous sstate I need "only" something like > > > real 54m53.939s > > user 3268446 - 103936 = 3164510 = 527m25.10s > > system 820431 - 1345 = 136m30.86s > > (These numbers are from overlayfs over ext4 on the same disk. Don't > have > any numbers without the additional overlayfs handy right now. > According > to experience the additional overlayfs leads to very similar wall > times, > just significant extra system CPU time) Based on the above info, it seems there is something scaling badly in whatever algorithm that code is using :( I don't remember much about that code in particular, I do know I've never been happy with its chances of successfully reporting what the user actually wanted to know. Its been on my todo list for a while to go back and try and create a command which actually gives the user the information they wanted but there have been other more pressing issues... I'd certainly be interested in understanding where the current code is scaling badly... Cheers, Richard ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-07-19 9:59 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-07-13 16:18 Why can diffsigs take sometimes really looooong? Uwe Geuder 2018-07-15 10:38 ` Richard Purdie 2018-07-16 8:26 ` Uwe Geuder 2018-07-19 9:59 ` Richard Purdie
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.