On Tue, Jul 13, 2021 at 12:42 AM Carl-Daniel Hailfinger <
c-d.hailfinger.devel.2...@gmx.net> wrote:

> Hi,
>
> Am 12.07.21 um 13:14 schrieb Patrick Star:
> > On Mon, Jul 12, 2021 at 5:53 PM Daniel Thompson
> > <daniel.thomp...@linaro.org <mailto:daniel.thomp...@linaro.org>> wrote:
> >
> >     On Sat, Jul 10, 2021 at 11:45:19AM +0800, Patrick Star wrote:
> >     > I saw flashrom process use too many cpu time when I use it to write
> >     > flashchip.
> >     > Then I strace the process, and found too many
> >     > "clock_gettime(CLOCK_MONOTONIC...)" system call.
> >
> >     This is odd.
> >
> >     clock_gettime(CLOCK_MONOTONIC...) shouldn't normally show up in
> strace
> >     (since most architectures arrange implement it in the vdso there
> >     are no
> >     syscalls to trace when running this function).
> >
> > On my system, only CLOCK_REALTIME_COARSE  and CLOCK_MONOTONIC_COARSE
> > not show up in strace.
> > May this behavior has something to do with my kernel configuration(see
> > attachment).
> >
> >
> >
> >     > And located it to udelay.c line 39, in function clock_usec_delay().
> >     > So I replace the code with just  usleep(), as below,
> >     >  static void clock_usec_delay(int usecs)
> >     >  {
> >     >      usleep(usecs);
> >     >  }
> >     > And it still worked well, and use much less cpu time, and the
> >     time spend on
> >     > erase&write a chip is basicly the same as before.
> >     >
> >     > Also I write image to a flashchip and read it out with the modified
> >     > flashrom many times, and the read out results are always same as
> the
> >     > original image.
> >     >
> >     > So why not use usleep() to save cpu time ?
> >
> >     For the very short delays used by some programmers the cost of
> >     sleeping
> >     might simply outweigh the cost of a spinning wait.
> >
> >     More likely though this is there to prevent issues on some systems
> >     (notably those without hrtimers) when a short sleep results in the
> >     calling
> >     thread being asleep for *much* longer than requests. This causes very
> >     slow programmer performance in some cases. 100x or even 1000x
> slowdown
> >     is not implausible.
> >
> >     Of course the break even point will be different on different
> systems.
> >     flashrom's internal_delay() function is pretty conservative to
> >     allow it
> >     to run well even on systems without hrtimers. The impact will also
> >     very
> >     between different programmers since some programmers delay for much
> >     longer than others.
> >
> > Thanks for your explanation, helped me a lot.
> > I personally will use usleep in flashrom, just to save a little energy
> > when use battery. :-)
>
> Since some of that code is mine, I should probably explain.
>
> In the ancient days of parallel and LPC/FWH flash, timing was
> everything. We had real-world flash chips which needed at least 1
> microsecond between reads of the status register because with shorter
> intervals the status register would return "operation complete" instead
> of "erase/write in progress". We also had chips where delays between
> operations had to be in a time window between 10 and 100 microseconds,
> or the chip would discard commands and/or read/write incorrect data.
> With SPI flash, some timings are still fun, but nowhere near as
> catastrophic as in the old days. That just leaves the problem of
> usleep() possibly slowing down writes a bit (factor of 1000 is indeed
> possible), depending on which SPI flash chip you're using.
>
> Then again, should you use the Bus Pirate as your programmer of choice,
> writing some flash chips can take more than 24 hours and energy saving
> really matters, but the timing-sensitive chips are incompatible with the
> Bus Pirate anyway.
>
> Regards,
> Carl-Daniel
>
Thanks for these knowledge.
Forget about what I said about "flashrom and  energy saving".
Since it not running all day and every day, it doesn't matter for flashrom
to save a little bit energy for most situations.
Except one day I was at a factory, need to programme a 16MB flash chip,
with a laptop which had only 30% battery,  no outlet available.
It took 12 mins to write the image to it, and 20% battery left after that.
Normally it shouldn't use that much battery by only 12 mins.
So after returned home, I dived into it, and found spinning wait cause it.
A better laptop can fix it. :-)

BTW: I don't have Bus Pirate, instead I use a self-made programmer from
https://github.com/dword1511/stm32-vserprog
_______________________________________________
flashrom mailing list -- flashrom@flashrom.org
To unsubscribe send an email to flashrom-le...@flashrom.org

Reply via email to