<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>