<div dir="auto"><div>Hello Paul<div dir="auto"><br></div><div dir="auto">I have a GTX 480 (GF100 I believe) at home in an old machine. Is the rest of the Fermi patch set available somewhere for me to test?</div><div dir="auto"><br></div><div dir="auto">Thank you</div><div dir="auto">Regards Brock</div><div dir="auto"><br></div><br><div class="gmail_extra"><br><div class="gmail_quote">On 16 Jan. 2018 9:08 am, "Lyude Paul" <<a href="mailto:lyude@redhat.com">lyude@redhat.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">It's here! After a lot of investigation, rewrites, and traces, I present<br>
the patch series to implement all known )levels of clockgating for<br>
Kepler1 and Kepler2 GPUs.<br>
<br>
Starting with Fermi GPUs (this is probably present on earlier GPUs as<br>
well, but with a far less easy to manage interface), nvidia added two<br>
clockgating levels that are handled mostly in firmware (with the<br>
exception of course, of the driver initially programming all of the<br>
register values containing engine delays and that stuff):<br>
- CG_CTRL - Main register for enabling/disabling clockgating for<br>
engines and hw blocks<br>
- BLCG - "Block-level clockgating", a deeper level of clockgating<br>
Starting with kepler2 as well, nvidia also introduced:<br>
- SLCG - "??? clockgating" even deeper level of clockgating<br>
<br>
Originally this patchset was going to include work for making this work<br>
on Fermi, however on closer investigation it seems that Fermi has one<br>
pretty big difference in it's requirements that we don't entirely<br>
understand yet. On Fermi the CG_CTRL register for the gr needs to be<br>
adjusted during reclocking, while kepler and later generations need no<br>
such adjustments. Since this requires more research; the current plan is<br>
to leave fermi out of this patchset, and then just rework the code at a<br>
later point in time to support Fermi once we understand more.<br>
<br>
For the time being however, we put as much code we're sure Fermi will be<br>
sharing into gf100 files for the future.<br>
<br>
For the time being; this patchset supports every GPU in the kepler1 and<br>
kepler2 family. The main kernel config option to enable this is<br>
config=NvPmEnableGating=<<wbr>level><br>
Where <level> is the deepest level of powersaving to enable. The levels<br>
being:<br>
0. NOCG<br>
1. CG (just CG_CTRL)<br>
2. BLCG<br>
3. SLCG<br>
<br>
Additionally, we leave a couple of small TODO comments to mark spots<br>
we'll eventually need to add code for the final level of power saving we<br>
have yet to implement or understand: ELPG (engine-level powergating).<br>
<br>
Here's some very lazily done benchmarks on how much power this saves as<br>
well. It should be noted that chances are, these patches save a lot more<br>
power then you see here since clockgating works best when the GPU is<br>
under load. I have a feeling this will be especially true with SLCG.<br>
<br>
GK104 stats:<br>
Idle (1 4k display @ fbcon):<br>
NOCG:<br>
07: 20.53W<br>
0a: 44.12W<br>
0e: 61.23W<br>
0f: 62.23W<br>
CG:<br>
07: 18.95W-19.02W<br>
0a: 34.95W-37.48W<br>
0e: 52.70W-54.32W<br>
0f: 53.53W-55.68W<br>
BLCG:<br>
07: 18.64W-19.02W<br>
0a: 32.68W-34.78W<br>
0e: 49.14W-50.51W<br>
0f: 49.75W-51.73W<br>
GK110 stats:<br>
Idle (1 4k display @ fbcon):<br>
NOCG:<br>
07: 25.68W<br>
0a: 36.16W<br>
0d: 64.71W<br>
0f: 64.99W<br>
CG:<br>
07: 25.68W<br>
0a: 35.58W<br>
0d: 61.54W-61.74W<br>
0f: 61.93W-62.12W<br>
BLCG:<br>
07: 25W-25.2W<br>
0a: 33.85W-34.04W<br>
0d: 59.25W-59.44W<br>
0f: 59.35W-59.54W<br>
SLCG:<br>
07: 25W-25.2W<br>
0a: 33.85W-33.95W (spikes to 34.04W briefly every now and then)<br>
0d: 59.15W-59.35W<br>
0f: 59.35W-59.54W<br>
<br>
For the time being, this will be disabled by default in the kernel as we<br>
wait to get more widespread testing with this patchset. If you're<br>
willing to put up with the potential of instability, please feel free to<br>
try this patchset and let us know how well it works for you!<br>
<br>
Lyude Paul (4):<br>
drm/nouveau: Add support for basic clockgating on Kepler1<br>
drm/nouveau: Add support for BLCG clockgating for Kepler1<br>
drm/nouveau: Add BLCG clockgating for Kepler2<br>
drm/nouveau: Add SLCG clockgating for Kepler2<br>
<br>
drivers/gpu/drm/nouveau/<wbr>include/nvkm/subdev/fb.h | 1 +<br>
.../gpu/drm/nouveau/include/<wbr>nvkm/subdev/therm.h | 25 +++<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>engine/device/base.c | 25 +--<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>engine/gr/gf100.h | 1 +<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>engine/gr/gk104.c | 215 ++++++++++++++++++++-<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>engine/gr/gk104.h | 55 ++++++<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>engine/gr/gk110.c | 176 +++++++++++++++++<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/fb/Kbuild | 1 +<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/fb/gf100.c | 6 +<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/fb/gk104.c | 53 +++++<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/fb/gk104.h | 35 ++++<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/fb/gk110.c | 77 ++++++++<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/fb/priv.h | 3 +<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/Kbuild | 2 +<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/base.c | 84 +++++++-<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/gf100.c | 77 ++++++++<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/gf100.h | 35 ++++<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/gf119.c | 8 +-<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/gk104.c | 136 +++++++++++++<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/gk104.h | 56 ++++++<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/gt215.c | 2 +-<br>
drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/priv.h | 23 ++-<br>
22 files changed, 1069 insertions(+), 27 deletions(-)<br>
create mode 100644 drivers/gpu/drm/nouveau/nvkm/<wbr>engine/gr/gk104.h<br>
create mode 100644 drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/fb/gk104.h<br>
create mode 100644 drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/fb/gk110.c<br>
create mode 100644 drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/gf100.c<br>
create mode 100644 drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/gf100.h<br>
create mode 100644 drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/gk104.c<br>
create mode 100644 drivers/gpu/drm/nouveau/nvkm/<wbr>subdev/therm/gk104.h<br>
<font color="#888888"><br>
--<br>
2.14.3<br>
<br>
______________________________<wbr>_________________<br>
Nouveau mailing list<br>
<a href="mailto:Nouveau@lists.freedesktop.org">Nouveau@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/nouveau" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/nouveau</a><br>
</font></blockquote></div><br></div></div></div>