Poor compositing performance on 965Q chipset with intel 2.2.1 driver

Hugo Mildenberger Hugo.Mildenberger at t-online.de
Fri May 9 13:46:26 PDT 2008


Am Freitag, 9. Mai 2008 21:20 schrieb Steven J Newbury:
> On Fri, 2008-05-09 at 20:33 +0200, Hugo Mildenberger wrote:
> > Am Freitag, 9. Mai 2008 20:58 schrieben Sie:
> > > On Fri, 2008-05-09 at 19:31 +0200, Hugo Mildenberger wrote:
> > > > Am Freitag, 9. Mai 2008 18:48 schrieb Barry Scott:
> > > > > >> mg at platonas:~ $ x11perf -shmput500
> > > > > >> x11perf - X11 performance program, version 1.5
> > > > > >> The X.Org Foundation server version 10400090 on :0.0
> > > > > >> from platonas
> > > > > >> Fri May  9 18:31:46 2008
> > > > > >>
> > > > > >> Sync time adjustment is 0.0309 msecs.
> > > > > >>
> > > > > >>    3200 reps @   1.6794 msec (   595.0/sec): ShmPutImage 500x500
> > > > > >> square 3200 reps @   1.6568 msec (   604.0/sec): ShmPutImage
> > > > > >> 500x500 square 3200 reps @   1.7887 msec (   559.0/sec):
> > > > > >> ShmPutImage 500x500 square 3200 reps @   1.6947 msec (  
> > > > > >> 590.0/sec): ShmPutImage 500x500 square 3200 reps @   1.6732 msec
> > > > > >> (   598.0/sec): ShmPutImage 500x500 square 16000 trep @   1.6986
> > > > > >> msec (   589.0/sec): ShmPutImage 500x500 square
> > > > > >>
> > > > > >> This is with GM965 and intel driver 2.2.1, but I haven't noticed
> > > > > >> poor compositing performance.
> > > >
> > > > Running "x11perf -shmput500", I get these similar numbers using 965G
> > > > rev 02:
> > > >
> > > > Sync time adjustment is 0.0326 msecs.
> > > >
> > > >    3200 reps @   1.7145 msec (   583.0/sec): ShmPutImage 500x500
> > > > square 3200 reps @   1.7133 msec (   584.0/sec): ShmPutImage 500x500
> > > > square 3200 reps @   1.7132 msec (   584.0/sec): ShmPutImage 500x500
> > > > square 3200 reps @   1.7133 msec (   584.0/sec): ShmPutImage 500x500
> > > > square 3200 reps @   1.7134 msec (   584.0/sec): ShmPutImage 500x500
> > > > square 16000 trep @   1.7135 msec (   584.0/sec): ShmPutImage 500x500
> > > > square
> > > >
> > > >
> > > > using current master branch of xf86-video-intel and libpciaccess.
> > >
> > > Just as another datapoint:
> > >
> > > x11perf - X11 performance program, version 1.2
> > > The X.Org Foundation server version 10599001 on :0.0
> > > from infinity
> > > Fri May  9 19:51:25 2008
> > >
> > > Sync time adjustment is 0.0405 msecs.
> > >
> > >   12000 reps @   0.5318 msec (  1880.0/sec): ShmPutImage 500x500 square
> > >   12000 reps @   0.5333 msec (  1880.0/sec): ShmPutImage 500x500 square
> > >   12000 reps @   0.5312 msec (  1880.0/sec): ShmPutImage 500x500 square
> > >   12000 reps @   0.5301 msec (  1890.0/sec): ShmPutImage 500x500 square
> > >   12000 reps @   0.5303 msec (  1890.0/sec): ShmPutImage 500x500 square
> > >   60000 trep @   0.5313 msec (  1880.0/sec): ShmPutImage 500x500 square
> > >
> > > Everything from master branches as today (20080509), GM965.  Linux
> > > kernel from master branch yesterday with exception of the reversion of
> > > the "nopage removal" since the mesa/drm module hasn't yet been updated.
> >
> > Ahem, I thought I was using libpciaccess. But the symbol
> > XSERVER_LIBPCIACCESS was actually undefined even though libpciaccess is
> > actually there. If I define it manually via make
> > CFLAGS="-DXSERVER_LIBPCIACCESS=1", I get a bunch of compilation errors,
> > which would be somewhat tedious to fix, and would awake the suspicion, 
> > that actually no one currently uses libpciaccess with the intel driver,
> > especially because of the following error:
> >
> > git/xf86-video-intel/src/reg_dumper/
> > main.c:70: Fehler: »struct pci_info_rec« hat kein Element namens
> > »device_id« (which translates to: struct pci_info_rec has no field named
> > "device_id")
> >
> > The reason is, that "struct pci_info_rec" is defined in
> >
> > git/xf86-video-intel/src/reg_dumper/reg_dumper.h
> >
> > like this:
> > struct pci_info_rec {
> >     uint16_t chipType;
> > };
> >
> >
> > Steven, could you just verify you are actually using
> > libpciaccess by writing some syntactical illegal scrap within an
> > #if XSERVER_LIBPCIACCESS guarded block (e.g. into i830_driver.c) and
> > recompile the driver in your environment?
>
> Yes, it works:
> i830_driver.c:283:2: error: #error Yup. Using PCIACCESS
> i830_driver.c: In function 'I830LeaveVT':
> i830_driver.c:3171: warning: unused variable 'config'
> make[2]: *** [i830_driver.lo] Error 1
>
> Sounds like the pciaccess headers aren't being found.  Is your
> pciaccess.pc file in your pkgconfig path?

No, the headers are found. But I will excercise it here:

xf86-video-intel # git branch
* master

xf86-video-intel # git pull
Already up-to-date.

xf86-video-intel # set | grep PKG
PKG_CONFIG_PATH=/usr/lib/pkgconfig/:/usr/qt/3/lib/pkgconfig

ls -l /usr/lib/pkgconfig/pciaccess.pc
-rw-r--r-- 1 root root 248  3. Mai 10:00 /usr/lib/pkgconfig/pciaccess.pc

xf86-video-intel # cat /usr/lib/pkgconfig/pciaccess.pc
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: pciaccess
Description: Library providing generic access to the PCI bus and devices.
Version: 0.10
Cflags: -I${includedir}
Libs: -L${libdir} -lpciaccess

xf86-video-intel # ls -l /usr/include/pciaccess.h
-rw-r--r-- 1 root root 11641  9. Mai 20:04 /usr/include/pciaccess.h


checking whether XSERVER_LIBPCIACCESS is declared... no 
checking for PCIACCESS... yes

   That the first check fails I would expect, because I do use only 
   the latest   video driver. But read on:

xf86-video-intel # make CFLAGS="-DXSERVER_LIBPCIACCESS=1"
make  all-recursive
[...]
Making all in reg_dumper
make[4]: Entering directory `/root/src/git/xf86-video-intel/src/reg_dumper'
i686-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..     -Wall -Wpointer-arith -Wstrict-prototypes         -Wmissing-prototypes -Wmissing-declarations     -Wnested-externs -fno-strict-aliasing -I./.. -DREG_DUMPER -DXSERVER_LIBPCIACCESS=1 -MT 
main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
main.c: In Funktion »main«:
main.c:70: Fehler: »struct pci_info_rec« hat kein Element namens »device_id«

I wondered about this excerpt from your post:
> Yes, it works:
> i830_driver.c:283:2: error: #error Yup. Using PCIACCESS
> i830_driver.c: In function 'I830LeaveVT':
> i830_driver.c:3171: warning: unused variable 'config'
> make[2]: *** [i830_driver.lo] Error 1

if I edit my local copy of i830_driver.c +283, I get this around line no 283:

 278    {PCI_CHIP_IGD_GM,            PCI_CHIP_IGD_GM,        RES_SHARED_VGA},
 279    {-1,                         -1,                     RES_UNDEFINED}
 280 };
 281
 282 /*
 283  * Note: "ColorKey" is provided for compatibility with the i810 driver.
 284  * However, the correct option name is "VideoKey".  "ColorKey" usually
 285  * refers to the tranparency key for 8+24 overlays, not for video 
overlays.
 286  */
 287

So, presumably you are not using the master branch, or had not updated to the
current version. 

But then it  would be very interesting, which branch you are actually using, 
because your x11perf - results are three times faster then those of mine (and 
apperently others with the same chip). Knowing your revision exaclty one 
could easily bisect the patch which introduced that slump in perfomance.



More information about the xorg mailing list