Current code is waiting 100us for all transitions (roughly between
each byte either sent or received).
Most transitions actually completes in 2-3 microseconds.
By starting polling the status register with a delay of 4 us with
exponential backoff, the performance of most ipmi operations is
significantly improved:
- bmc update on supermicro x9 to x11 from ~1hour to ~6-8 minutes.
- ipmitool sensor list improves by a factor of 4.
No significant improvements on modern server seen by using a
lower delay (any attempt at optimizing further might be
better done by implementing bt channel between host<->bmc)
rather than trying extra tuning of kcs interface.
The changes should also generally reduce the total amount of cpu
or io bandwith used for a given ipmi operations.
The fact that Linux used to use 5us delay and now used a busy loop
with yield() adds confidence that lowering delay should not trigger
any hw bug anywhere.