message: io_stats: drop global io stats's calculation of average latency
  Now global average latency calculation takes in a very long period and
  have to divide each fop. It is consuming cpu. Just record cumulative metircs and
  delegate the calculation to external tools.
diff: @@ -81,10 +81,8 @@ pub struct GlobalIOStats {
  fop_errors: [AtomicUsize; StatsFop::Max as usize],
  // Cumulative latency's life cycle is equivalent to Rafs, unlike incremental
  // latency which will be cleared each time dumped. Unit as micro-seconds.
  - // * @avg means fop average latency from mount, io_stats calculates the up-to-date average latency.
  // * @total means io_stats simply adds every fop latency to the counter which is never cleared.
  // It is useful for other tools to calculate their metrics report.
  - fop_cumulative_latency_avg: [AtomicIsize; StatsFop::Max as usize],
  fop_cumulative_latency_total: [AtomicUsize; StatsFop::Max as usize],
  // Record how many times read latency drops to the ranges.
  // This helps us to understand the io service time stability.
  @@ -337,13 +335,13 @@ impl GlobalIOStats {
  pub fn latency_end(&self, start: &Option<SystemTime>, fop: StatsFop) {
  if let Some(start) = start {
  if let Ok(d) = SystemTime::elapsed(start) {
  - let elapsed = d.as_micros() as isize;
  + // FIXME: converting u128 to isize is fragile.
  + let elapsed = d.as_micros() as usize;
  self.read_latency_dist[latency_range_index(elapsed)]
  .fetch_add(1, Ordering::Relaxed);
  self.fop_cumulative_latency_total[fop as usize]
  .fetch_add(elapsed as usize, Ordering::Relaxed);
  - let avg = self.fop_cumulative_latency_avg[fop as usize].load(Ordering::Relaxed);
  - let fop_cnt = self.fop_hits[fop as usize].load(Ordering::Relaxed) as isize;
  + let fop_cnt = self.fop_hits[fop as usize].load(Ordering::Relaxed);
  // Zero fop count is hardly to meet, but still check here in
  // case callers misuses ios-latency
  