performance of pci_device_get_{vendor, device}_name() in X server startup

Richard Barnette jrbarnette at
Tue Jun 8 14:26:32 PDT 2010

In a recent investigation of system boot time for Chromium OS, I
discovered that an inordinate amount of time during X server startup
was going to processing required for pci_device_get_vendor_name() and
pci_device_get_device_name().  The reason is straightforward:  these
routines operate by opening a compressed file, and then performing a
linear search of the decompressed data (more than 600K worth) looking
for the desired entries.  For concrete numbers:  not looking up the
names on Chromium OS reference hardware (a netbook based on the Intel
Pintrail chipset with SSD storage) is worth 400 ms boot time out of a
5 second total time budget.

I'd like fix this with a patch to X upstream, so that the change doesn't
have to be maintained as part of the Chromium OS sources.  For a first
cut, I can think of three obvious approaches:
   * Change xorg-server to simply drop the calls to get the vendor and
     device names.
   * A build or configure option in libpciaccess that disables the  
     routines (i.e. forces them to return NULL in all cases).
   * A runtime option to the X server that allows specifying the path to
     the "pci.ids.gz" or "pci.ids" file.  Chromium OS could specify / 
     to get the desired time savings.  (This would mean touching both
     xorg-server and libpciaccess).

I'd like advice/opinions on which of these might be the most eagerly
embraced (or at any rate, least vigorously opposed :-) ), or whether
there's a better idea I've overlooked.


(For those of you about to ask "What's Chromium OS?", the details are
at; the short summary is it's an
open-source platform for mobile devices running the Chromium browser
as the sole native application.)

-- jrb

More information about the xorg-devel mailing list