Announcement

Collapse
No announcement yet.

Radeon DPM Is Fantastic For Power Use, Thermal Performance

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #41
    Originally posted by Michael View Post
    I'll try out that array and see how the results look on some of the common graphs. There's been many revisions to this code and it's rather a mess right now. Originally, pts_Graph used a static array of possible colors to pick for line graphs but when the need arose for a dynamic number of color combinations, I tried coming up with a way to dynamically calculate new colors based upon other predefined colors that fit the overall color scheme of PTS/OB. That was mostly guessing and trial and error due to not much experience with color-choosing stuff. SInce then at least two or three times, Phoronix readers have attempted to improve the color selection ways but to not much avail and mostly cluttering the code to a greater extent.
    Here's the patch I did now, though it still has problems that's been experienced before... Some of the colors are really light and hard to read, etc.

    Code:
    diff -Naur phoronix-test-suite.orig/pts-core/objects/pts_Graph/pts_Graph.php phoronix-test-suite/pts-core/objects/pts_Graph/pts_Graph.php
    --- phoronix-test-suite.orig/pts-core/objects/pts_Graph/pts_Graph.php    2013-08-01 21:58:25.000000000 -0500
    +++ phoronix-test-suite/pts-core/objects/pts_Graph/pts_Graph.php    2013-08-01 22:19:53.771812762 -0500
    @@ -463,6 +463,27 @@
             $this->render_graph_result();
             $this->render_graph_post();
         }
    +    protected function get_special_paint_color($identifier)
    +    {
    +        // For now to try to improve the color handling of line graphs, first try to use a pre-defined pool of colors until falling back to the old color code once exhausted
    +        // Thanks to ua=42 in the Phoronix Forums for the latest attempt at improving the automated color handling
    +        static $line_color_cache = null;
    +        static $predef_line_colors = array('#000000', '#FFB300', '#803E75', '#FF6800', '#A6BDD7', '#C10020', '#CEA262', '#817066', '#007D34', '#F6768E', '#00538A', '#FF7A5C', '#53377A', '#FF8E00', '#B32851', '#F4C800', '#7F180D', '#93AA00', '#593315', '#F13A13', '#232C16');
    +
    +        if(!isset($line_color_cache[$identifier]))
    +        {
    +            if(!empty($predef_line_colors))
    +            {
    +                $line_color_cache[$identifier] = array_pop($predef_line_colors);
    +            }
    +            else
    +            {
    +                $line_color_cache[$identifier] = $this->get_paint_color($identifier);
    +            }
    +        }
    +
    +        return $line_color_cache[$identifier];
    +    }
         protected function render_graph_pre_init()
         {
             return;
    @@ -719,7 +740,7 @@
             {
                 if(!empty($this->graph_data_title[$i]))
                 {
    -                $this_color = $this->get_paint_color($this->graph_data_title[$i]);
    +                $this_color = $this->get_special_paint_color($this->graph_data_title[$i]);
     
                     if($i != 0 && $i % $this->i['keys_per_line'] == 0)
                     {
    diff -Naur phoronix-test-suite.orig/pts-core/objects/pts_Graph/pts_LineGraph.php phoronix-test-suite/pts-core/objects/pts_Graph/pts_LineGraph.php
    --- phoronix-test-suite.orig/pts-core/objects/pts_Graph/pts_LineGraph.php    2013-08-01 21:58:25.000000000 -0500
    +++ phoronix-test-suite/pts-core/objects/pts_Graph/pts_LineGraph.php    2013-08-01 22:16:54.451820757 -0500
    @@ -3,8 +3,8 @@
     /*
         Phoronix Test Suite
         URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
    -    Copyright (C) 2008 - 2012, Phoronix Media
    -    Copyright (C) 2008 - 2012, Michael Larabel
    +    Copyright (C) 2008 - 2013, Phoronix Media
    +    Copyright (C) 2008 - 2013, Michael Larabel
         pts_LineGraph.php: The line graph object that extends pts_Graph.php.
     
         This program is free software; you can redistribute it and/or modify
    @@ -115,6 +115,27 @@
                 }
             }
         }
    +    protected function get_special_paint_color($identifier)
    +    {
    +        // For now to try to improve the color handling of line graphs, first try to use a pre-defined pool of colors until falling back to the old color code once exhausted
    +        // Thanks to ua=42 in the Phoronix Forums for the latest attempt at improving the automated color handling
    +        static $line_color_cache = null;
    +        static $predef_line_colors = array('#000000', '#FFB300', '#803E75', '#FF6800', '#A6BDD7', '#C10020', '#CEA262', '#817066', '#007D34', '#F6768E', '#00538A', '#FF7A5C', '#53377A', '#FF8E00', '#B32851', '#F4C800', '#7F180D', '#93AA00', '#593315', '#F13A13', '#232C16');
    +
    +        if(!isset($line_color_cache[$identifier]))
    +        {
    +            if(!empty($predef_line_colors))
    +            {
    +                $line_color_cache[$identifier] = array_shift($predef_line_colors);
    +            }
    +            else
    +            {
    +                $line_color_cache[$identifier] = $this->get_paint_color($identifier);
    +            }
    +        }
    +
    +        return $line_color_cache[$identifier];
    +    }
         protected function renderGraphLines()
         {
             $calculations_r = array();
    @@ -124,7 +145,7 @@
     
             foreach(array_keys($this->graph_data) as $i_o)
             {
    -            $paint_color = $this->get_paint_color((isset($this->graph_data_title[$i_o]) ? $this->graph_data_title[$i_o] : null));
    +            $paint_color = $this->get_special_paint_color((isset($this->graph_data_title[$i_o]) ? $this->graph_data_title[$i_o] : null));
                 $calculations_r[$paint_color] = array();
     
                 $point_counter = count($this->graph_data[$i_o]);
    Michael Larabel
    https://www.michaellarabel.com/

    Comment


    • #42
      Hmmmm.

      Good point, I would suggest the following changes to it then.



      Code:
      if(count($this->graph_data_title)<11){  // I think this is how you tell how many lines there are.  Please change if I picked the wrong variable to count. 
        $predef_line_colors = array('#000000', '#0000FF', '#FF0000', '#00FF00', '#FFFF00', '#FF00FF', '#FF8080', '#808080', '#800000', '#FF8000');
      }
      else{
        $predef_line_colors = array('#000000', '#803E75', '#007D34', '#FF6800','#C10020', '#00538A', '#FFB300', '#93AA00', '#CEA262', '#53377A', '#817066', '#B32851', '#7F180D',   '#232C16'',  '#593315', '#F13A13',   '#FF8E00',   '#007D34', '#F4C800', '#F6768E',  '#FF7A5C', "#A6BDD7');
      }
      Also, I rearranged the color table so that the darker values are first, so that the easier to read colors are used first.
      Last edited by ua=42; 02 August 2013, 09:27 AM. Reason: spelling/ grammer

      Comment


      • #43
        Originally posted by Gabrielbyrnei View Post
        I get a totally unstable system when booting on 3.11 rc3.

        At the instant i run folding@home, system hangs but my mouse is still alive.
        When choosing 3.10.3 and doing the same thing it works fine.

        AMD Athlon II x4 630
        ATI 4850


        I did download the updated firmware RV770_smc.bin from http://people.freedesktop.org/~agd5f/radeon_ucode/

        Now on /lib/firmware/radeon i have 3 firmware files for my card:

        RV770_me.bin
        RV770_pfp.bin
        RV770_smc.bin

        On the link theres only the _smc.bin file, so maybe i only need smc and not the me and pfp?

        This is all on openSUSE 12.3, kernel 3.11-rc3 from Kernel:HEAD repository and Mesa 9.2 git
        RV770_smc.bin is the only new ucode you need for dpm, however you still need all of the old ucode images (me, pfp, rlc). As usual, make sure your initird has the new ucode images if you are using one or if you are building the driver into the kernel, make sure you build all of the ucode images into the kernel as well.

        Comment


        • #44
          Originally posted by agd5f View Post
          RV770_smc.bin is the only new ucode you need for dpm, however you still need all of the old ucode images (me, pfp, rlc). As usual, make sure your initird has the new ucode images if you are using one or if you are building the driver into the kernel, make sure you build all of the ucode images into the kernel as well.
          What do those letters stand for, anyway? With all the new microcode, it's hard to keep track of which does what...

          Comment


          • #45
            Originally posted by GreatEmerald View Post
            What do those letters stand for, anyway? With all the new microcode, it's hard to keep track of which does what...
            SMC = System Management Controller
            Handles power management

            CP = Command Processor
            Multiple sub blocks (ME, PFP, CE, MEC)
            Handles 3D and compute command processing

            RLC = Run List Controller
            Handles misc stuff on the GPU (interrupts, etc.)

            UVD = Universal Video Decoder
            Handles video decoding

            MC = Memory Controller
            GDDR memory controller

            Comment


            • #46
              Good to know, thanks

              Comment


              • #47
                ATI RV730 PRO [Radeon HD 4650] and DPM - a success story

                Using
                - ATI RV730 PRO [Radeon HD 4650]
                - Mesa 9.2.0/Gallium 0.4 - final plus some openSUSE patches from Xorg repository
                - Kernel 3.11.1 and firmware git snapshot 2013/07/14 - from Tumbleweed repository
                - openSUSE 12.3

                switching to kernel parameter radeon.dpm=1 has been a great success, mainly my computer got finally silent and my co-workers immediately noticed this.
                Nothing notable about the performance, I use this computer mainly at work - no games or other expensive 3D software used, just KDE 4.11.1 with its default effects.

                BTW: Even at the home I haven't at least noticed any problem doing the same thing in the same software configuration, except of using an Radeon HD 6xxx.

                Comment


                • #48
                  The driver works very well on A8-5500 APU with the HD 7560D IGP. I get the same temperatures (at least from what "sensors" tells me) as with fglrx and just about the same graphics performance in games I USE - dont start with benchmarks or the like, for what I USE its better than fglrx.
                  Opengl, hw decoding works as it should, Steam/Source games do much better than with fglrx. VDPAU works well in mplayer - i do get some corruption here and there, but if i restart the playback, it goes away.

                  Its a better experience compared to fglrx - the video playback is vsynced, no tearing. VDPAU is implemented in most video players (and will even be in vlc 2.1 AFAIK), unlike xvba which, i hear, gets phased out even from xbmc, the only player that supported it (in a special branch that is) because of the fglrx devs "deafness" - they will focus on radeon/vdpau instead.

                  Now, the bad:
                  The problem is that it frezes the computer after a few hours of use. I tried tons of kernel compile options, kernel boot options to no avail so far.

                  Now i use the latest git kernel (linus' git) combined with git://people.freedesktop.org/~agd5f/linux, drm-fixes-3.12 branch. Also i compile the latest mesa from git. So far (since 3.11 rc2 if i remember correctly) i have freezes with radeon.

                  - I noticed that using radeon with dpm makes the CPU throttle hard when it shouldnt (with both ondemand and conservative governors) - for example during kernel compile with 4 threads the clock speeds (nominally its 3.2GHz, turbo 3.7, effectively turbo is ~3.5GHz) go as low as 1.8 GHz sometimes (cpuinfo says 3.2 GHz, but cpufreq-aperf says 1.88-2 GHz, so its some internal downclocking, not the governors fault). Sometimes they keep up 3.2-3.29 the whole time at the same temperatures (fglrx always uses frequencies above the nominal clock speed, even if with a wee bit, with the same thermals - 50-55C).
                  - If i use the ondemand governor the CPU is kept at its maximum voltage level (1.34v) after i log in. If i do a dpms off/on on the monitor, the voltage starts changing between its limits as it is required (0.9-1.34v). Also, adding acpi=strict to the kernel boot parameters and using the conservative governor, this problem goes away.

                  At bootup, i get this oops-like "info" (noticed with the recent kernels, if the framebuffer console is initialized):
                  Code:
                  [    9.621693] resource map sanity check conflict: 0xc0480000 0xc1487fff 0xc0000000 0xc04fffff BOOTFB
                  [    9.621699] ------------[ cut here ]------------
                  [    9.621708] WARNING: CPU: 3 PID: 439 at arch/x86/mm/ioremap.c:171 __ioremap_caller+0x2d8/0x370()
                  [    9.621713] Info: mapping multiple BARs. Your kernel is fine.
                  [    9.621716] Modules linked in: joydev hid_generic kvm_amd snd_hda_codec_realtek usbhid hid kvm snd_hda_codec_hdmi radeon(+) crc32c_intel ttm drm_kms_helper snd_hda_intel ghash_clmulni_intel aesni_intel snd_hda_codec aes_x86_64 drm snd_hwdep ablk_helper evdev uvcvideo videobuf2_vmalloc acpi_cpufreq videobuf2_memops psmouse cryptd videobuf2_core snd_pcm lrw processor gf128mul thermal_sys snd_page_alloc videodev ohci_pci snd_seq glue_helper snd_seq_device media k10temp pcspkr serio_raw snd_timer snd ohci_hcd i2c_algo_bit soundcore i2c_piix4 i2c_core button ext4 crc16 jbd2 mbcache dm_mod sg sd_mod sr_mod cdrom crc_t10dif crct10dif_common ahci libahci libata ehci_pci microcode scsi_mod ehci_hcd xhci_hcd r8169 mii usbcore usb_common
                  [    9.621792] CPU: 3 PID: 439 Comm: modprobe Not tainted 3.12.0-rc2+ #6
                  [    9.621796] Hardware name: Gigabyte Technology Co., Ltd. To be filled by O.E.M./F2A85X-D3H, BIOS F1 10/09/2012
                  [    9.621817]  0000000000000009 ffff880036e81840 ffffffff814914a7 ffff880036e81888
                  [    9.621825]  ffff880036e81878 ffffffff810460e7 ffffc90011a80000 00000000c1488000
                  [    9.621831]  00000000c0480000 0000000000000010 00000000000c1488 ffff880036e818d8
                  [    9.621838] Call Trace:
                  [    9.621846]  [<ffffffff814914a7>] dump_stack+0x45/0x56
                  [    9.621853]  [<ffffffff810460e7>] warn_slowpath_common+0x87/0xb0
                  [    9.621858]  [<ffffffff810461c7>] warn_slowpath_fmt+0x47/0x50
                  [    9.621863]  [<ffffffff81039c38>] __ioremap_caller+0x2d8/0x370
                  [    9.621868]  [<ffffffff81039e0e>] ioremap_wc+0x2e/0x30
                  [    9.621877]  [<ffffffffa03d3580>] ttm_bo_kmap+0x230/0x260 [ttm]
                  [    9.621918]  [<ffffffffa0429886>] radeon_bo_kmap+0x66/0xa0 [radeon]
                  [    9.621959]  [<ffffffffa0485238>] radeon_sa_bo_manager_start+0x98/0x1e0 [radeon]
                  [    9.622000]  [<ffffffffa042a634>] radeon_vm_manager_init+0xe4/0x120 [radeon]
                  [    9.622040]  [<ffffffffa04800bc>] cayman_startup+0x16ac/0x1760 [radeon]
                  [    9.622080]  [<ffffffffa0480c59>] cayman_init+0x199/0x2b0 [radeon]
                  [    9.622109]  [<ffffffffa040ed0a>] radeon_device_init+0x6da/0x7f0 [radeon]
                  [    9.622140]  [<ffffffffa0410ca9>] radeon_driver_load_kms+0x89/0x1d0 [radeon]
                  [    9.622151]  [<ffffffffa035cb5f>] drm_get_pci_dev+0x12f/0x300 [drm]
                  [    9.622181]  [<ffffffffa040d175>] radeon_pci_probe+0xa5/0xd0 [radeon]
                  [    9.622187]  [<ffffffff81289386>] local_pci_probe+0x46/0x80
                  [    9.622192]  [<ffffffff812895c1>] pci_device_probe+0x101/0x110
                  [    9.622199]  [<ffffffff81345222>] driver_probe_device+0x72/0x230
                  [    9.622204]  [<ffffffff8134547b>] __driver_attach+0x9b/0xa0
                  [    9.622209]  [<ffffffff813453e0>] ? driver_probe_device+0x230/0x230
                  [    9.622215]  [<ffffffff81343435>] bus_for_each_dev+0x55/0x90
                  [    9.622220]  [<ffffffff81344d49>] driver_attach+0x19/0x20
                  [    9.622226]  [<ffffffff8134489c>] bus_add_driver+0xfc/0x280
                  [    9.622231]  [<ffffffff81345aaf>] driver_register+0x5f/0xf0
                  [    9.622237]  [<ffffffffa0543000>] ? 0xffffffffa0542fff
                  [    9.622243]  [<ffffffff81288517>] __pci_register_driver+0x47/0x50
                  [    9.622253]  [<ffffffffa035ce4a>] drm_pci_init+0x11a/0x130 [drm]
                  [    9.622259]  [<ffffffffa0543000>] ? 0xffffffffa0542fff
                  [    9.622288]  [<ffffffffa0543097>] radeon_init+0x97/0xb5 [radeon]
                  [    9.622294]  [<ffffffff81000302>] do_one_initcall+0x112/0x160
                  [    9.622299]  [<ffffffff8103b433>] ? set_memory_nx+0x43/0x50
                  [    9.622308]  [<ffffffff810ad999>] load_module+0x1d59/0x2530
                  [    9.622313]  [<ffffffff810aa2b0>] ? show_initstate+0x50/0x50
                  [    9.622319]  [<ffffffff810ae20e>] SyS_init_module+0x9e/0xc0
                  [    9.622324]  [<ffffffff8149c5e2>] system_call_fastpath+0x16/0x1b
                  [    9.622328] ---[ end trace c48a216262ec6d3b ]---
                  Once i unticked something from the framebuffer suport in the kernel config and i got a blank screen until X loaded (and even after that no console) and this "info" wasnt in the dmesg. But nonetheless the computer froze. Also i got the impression that when compiling the clock speeds were kept higher (most of the time were just as with fglrx).

                  Hardware is A8-5500 APU on a Gigabyte F2A85X-D3H mobo with 4 GB of RAM, Debian Testing 64-bit with Xfce 4.10.

                  I did file a bug report ( https://bugs.freedesktop.org/show_bug.cgi?id=67800 ).

                  Note: The hardware is most likely fine since i never get any of the above issues with fglrx.

                  Comment


                  • #49
                    Wasn't the R700_rlc.bin also updated for DPM support?

                    Originally posted by agd5f View Post
                    RV770_smc.bin is the only new ucode you need for dpm, however you still need all of the old ucode images (me, pfp, rlc).
                    My impression was that RV770_smc.bin was released alongside an updated R700_rlc.bin, and that DPM support requires both of these. Or am I mistaken?

                    Comment


                    • #50
                      Originally posted by chrisr View Post
                      My impression was that RV770_smc.bin was released alongside an updated R700_rlc.bin, and that DPM support requires both of these. Or am I mistaken?
                      UVD requires an updated RLC.

                      Comment

                      Working...
                      X