Bug 1319483 - Linking to -lrbd causes process startup times to balloon
Summary: Linking to -lrbd causes process startup times to balloon
Alias: None
Product: Fedora
Classification: Fedora
Component: ceph
Version: rawhide
Hardware: Unspecified
OS: Unspecified
Target Milestone: ---
Assignee: Boris Ranto
QA Contact: Fedora Extras Quality Assurance
Depends On:
Blocks: TRACKER-bugs-affecting-libguestfs
TreeView+ depends on / blocked
Reported: 2016-03-20 14:00 UTC by Richard W.M. Jones
Modified: 2016-04-11 14:59 UTC (History)
10 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Last Closed: 2016-04-11 14:59:24 UTC
Type: Bug

Attachments (Terms of Use)
perf report (31.10 KB, text/plain)
2016-03-20 14:00 UTC, Richard W.M. Jones
no flags Details

System ID Private Priority Status Summary Last Updated
Ceph Project Bug Tracker 15225 0 None None None 2016-03-21 13:04:24 UTC

Description Richard W.M. Jones 2016-03-20 14:00:51 UTC
Created attachment 1138304 [details]
perf report

Description of problem:

Take a trivial program:

  $ cat test.c 
  #include <stdlib.h>
  int main () { exit (0); }

and compare the startup time with and without linking to -lrados -lrbd.


  $ gcc test.c -o test
  $ TIMEFORMAT='%R' ; time ./test


  $ gcc test.c -o test -lrbd
  $ TIMEFORMAT='%R' ; time ./test

This really matters - currently initializing librbd consumes
15% of the total time taken to start up the libguestfs appliance.

I looked at the code and did some profiling with perf [see attachment]
and it seems as if the following code is responsible:


This code is really wrong, but it in lieu of being able to fix it,
it would be nice at least to have an environment variable we can
use to skip the madness.

Version-Release number of selected component (if applicable):


How reproducible:


Steps to Reproduce:
1. See above.

Comment 1 Richard W.M. Jones 2016-03-20 14:05:03 UTC
Adding Cole and Dan:

Because qemu links to ceph, this kills qemu startup times too.
Just doing `qemu-system-x86_64 -help' takes 0.1 seconds, and
according to perf that's basically because of the above.

Comment 2 Richard W.M. Jones 2016-03-20 14:08:07 UTC
Alternate fix would be to defer Cycles::init until Ceph is actually
used for something.  That way we could do our qemu feature detection
without hitting the code, but running qemu "for real" to mount a Ceph
drive would do the right thing.

Comment 3 Richard W.M. Jones 2016-03-21 17:43:07 UTC
Scratch build containing my experimental fix:

Comment 4 Richard W.M. Jones 2016-03-21 22:49:06 UTC
Although this patch fixes process startup times in general, it
unfortunately does not fix them for qemu.  qemu is still slow
because of the large number of external libraries it uses, plus
because it links to gtk.  (Removing the gtk dependency halves the
qemu startup time).

Comment 5 Richard W.M. Jones 2016-04-11 14:59:24 UTC
I backported the upstream commit and pushed it to Rawhide.
Fixed in ceph-9.2.0-5.fc25

Note You need to log in before you can comment on or make changes to this bug.