Skip to content

significant performance regression in 1.9.0 DOM access #703

@smemsh

Description

@smemsh

I have a script that computes how long I've been doing a contiguous interval (of different tasks). I have this bound to a key in my window manager to display a total, so I can see "how long since my last break?" It goes back looking at dom.tracked.N.start and .end until it finds a break. Then it does a sum of dom.tracked.{1..<break>}.duration.

This (and several other scripts I have) are now taking much longer with 1.9.0, here seen with just the last 10 intervals:

 $ for binary in timew1{8,9}0
   do echo $binary:; time -p $binary get \
     dom.tracked.{1..10}.{start,end,duration} \
   >/dev/null; echo; done

timew180:
real 0.89
user 0.85
sys 0.01

timew190:
real 8.14
user 2.97
sys 5.13

Yikes... 4x user time and 513x increase in kernel time! These were built with CMAKE_BUILD_TYPE=relwithdebinfo build flags which appear to be -g -O2 -DNDEBUG.

I'm frequently switching tasks through key-bound actions and menus, and getting sums for day, week, certain tags, etc and while in some cases I'm computing this myself from an export, in other cases I'm relying on the DOM access calculations. So, this has quite a deleterious/laggy effect on workflow...

Looks like the problem is I/O changes, here syscall time for above commands, anything over 1%:

180:
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 20.05    0.000230           0       267         2 access
 19.09    0.000219           1       189        36 newfstatat
 16.04    0.000184           1       176           read
 15.17    0.000174           4        40           fdatasync
  9.33    0.000107           0       134        44 openat
  6.54    0.000075           0        90           close
  6.54    0.000075          15         5           munmap
  2.62    0.000030           1        30           brk
  2.35    0.000027           6         4           getdents64
  1.31    0.000015           0        26           mmap

190:
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 36.51    5.648562           1   3341889        36 newfstatat
 23.04    3.564769           1   2227976           read
 19.09    2.953615           2   1114034        44 openat
 11.79    1.823148           1   1113990           close
  9.55    1.477241           1   1113901           lseek

Amazing, millions of I/Os in the new DOM code! I think it's a bug ;-)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions