multiseat with multiple X servers (or “the right way”)

So last week I posted on lkml an old patch that we were carrying for a long time in the Linux community. It basically brings the multiple (old) video cards functionally again on Linux and X server (and this time doing on the right and beauty way). For the people that was following multiseat implementations, this is a HUGE step: we will finally be able to discard the old and ugly hack (a mix of Xorg, several Xephyr servers + evdev) and and go to a clean way, starting multiple X servers in parallel. Cool! Well, not that much, because it might take some time to be in your beloved distribution :)

It’s too early and I don’t know if it’s recommended to say this, but if you want to give a try basically you have to get all X components, this X server patches, my libpciaccess and Dave’s kernel patchset. Again: it’s a very unstable work!

If you’re concerned with the technical explanations then you can follow the nice memo that Dave wrote about this.

VGA arbiter: removing RAC

The Resource Access Control inside Xorg is the guy responsible to take care of the various resources of memory and to share them in a wise manner when two or more graphics devices are active (think multi-head). As an alternative from RAC we can rely on VGA arbiter. So me and Paulo Zanoni spent the last days implementing “the glue” of Xorg to use the arbiter code with this purpose.

Now we’re trying to do some experiments to see what’s the performance difference using the RAC and the arbiter. We thought in two tests: (a) a multi-head X with RAC and other with the arbiter. And (b), test a single-head X using the arbiter and other not using. In the (a), we can evaluate if the usage of the arbiter overloads the X server and (b) if there’s some difference in use RAC or arbiter in a multi-head environment. So we ran the x11perf tool and reported a very tiny worthless gap in both tests (used with -comppixwin500, -move and -rect500 options). All the experiments you can see here:

Am I missing something about how I did these results or everything seems fine?

(I made the mistake to test this things using CFLAGS=’-g3 -O0′. Anyone knows if this will result in different conclusions between the two test cases? I’m using the git upstream code of server-1.4-branch and nv driver)

Anyway, we will keep our working and the next challenge will be to think about DRI, xv and GL.