Continuing saga of power management...

Jay Cotton Jay.Cotton at Sun.COM
Mon Jan 23 16:05:55 PST 2006


Hi All:

I'm initiating a discussion on FBPM (Frame Buffer Power Management)
here to get some ideas from others.

What exists today:

Sun has a FBPM extension to Xsun that allows the server to assert power level
control on the frame buffers of Sparc workstation systems.  The design requires
that the CPU, memory, Disk, and Graphic board be power controlled separately.

On workstations where the Graphics board consumes half of the power of the
system, and users want to keep the workstation up for remote login etc.  It's
desirable to provide sectioned power control.

Problem:

0.  EPA in the form of EStar is mandating lower power for workstations to the
tune of about 5 watts at idle, currently its 15 watts, but MOU V3 is due soon.

1.  The new X86/X64 based systems with top end video boards can consume
a lot of power.  In excess of 150 watts for the graphics engine.

2.  Its desirable to have "fine" grain control of power usage on the desktop
system.

Solution set:

1. Sun has a FBPM extension for Sparc graphics boards.
	a. We could port the same to Xorg and be done with it.

2.  Implement a clean solution for the problem.
	a.  The Current Sun FBPM code depends on DPMS timers and is linked
	with the DPMS code in Xsun.  This may not be the best way to do this.
	b.  Would/Does it make sense to modify DPMS to include a frame buffer
	switch.


Details:

Here are the client library functions that support FBPM on Sparc.

Bool FBPMQueryExtension (dpy, event_basep, error_basep)
Status FBPMGetVersion(dpy, major_versionp, minor_versionp)
Bool FBPMCapable(dpy)
Bool FBPMEnable(dpy,state)
Status FBPMDisable(dpy)
Status FBPMForceLevel(dpy, level)
Status FBPMInfo(dpy, state, onoff)

These have DPMS analogs in the library.  The question is, should we modify DPMS
to subsume these functions and spin up the client library rev. for DPMS to 1.2?

DPMSQueryExtension (Display *dpy, int *event_basep, int *error_basep)
DPMSGetVersion(Display *dpy, int *major_versionp, int *minor_versionp)
DPMSCapable(Display *dpy)
DPMSSetTimeouts(Display *dpy, CARD16 standby, CARD16 suspend, CARD16 off)
DPMSGetTimeouts(Display *dpy, CARD16 *standby, CARD16 *suspend, CARD16 *off)
DPMSEnable(Display *dpy)
DPMSDisable(Display *dpy)
DPMSForceLevel(Display *dpy, CARD16 level)
DPMSInfo(Display *dpy, CARD16 *power_level, BOOL *state)

These are the DPMS library functions.

DPMSEnable(Display *dpy, CARD16 subsection)
DPMSDisable(Display *dpy, CARD16 subsection)

	Where subsection might be:  0 for display, 1 for graphcis board, and 2 for both.

And so on.  The other way is to just do the library as it exists and not make any
changes to DPMS.
-- 
	 Jay Cotton 		     Jay.Cotton at sun.com
	 MPK17-2348    x80841
	 Sun Microsystems Inc. - X11 Server Group
	 Operating Platform Group
	
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NOTICE: This email message is for the sole use of the intended
recipient(s) and may contain confidential and privileged information.
Any unauthorized review, use, disclosure or distribution is prohibited.
If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~





More information about the xorg mailing list