Results 1 to 2 of 2

Thread: GPU Usage monitor patch

  1. #1
    Join Date
    Apr 2008
    Location
    York, UK
    Posts
    134

    Default GPU Usage monitor patch

    This patch adds the ability for users with ATI's RV670 chips to monitor GPU usage during test runs. This won't become useful until the monitoring code becomes threaded, as the probes are currently only performed at the beginning and end of test runs, thus always returning zero, or near zero values. You can however run `MONITOR=gpu.usage ./phoronix-test-suite sensors` during some 3D intensive app to see the usage monitor working.

    Code:
    diff --git a/pts-core/functions/pts-functions.php b/pts-core/functions/pts-functions.php
    index bdef7f5..bc478d7 100644
    --- a/pts-core/functions/pts-functions.php
    +++ b/pts-core/functions/pts-functions.php
    @@ -114,6 +114,7 @@ if(($to_show = getenv("MONITOR")))
         $monitor_power = in_array("all.power", $to_show) || $monitor_all;
         $monitor_voltage = in_array("all.voltage", $to_show) || $monitor_all;
         $monitor_freq = in_array("all.freq", $to_show) || $monitor_all;
    +    $monitor_usage = in_array("all.usage", $to_show) || $monitor_all;
         define("PTS_START_TIME", time());
    
         if(in_array("gpu.temp", $to_show)  || $monitor_temp)
    @@ -163,6 +164,11 @@ if(($to_show = getenv("MONITOR")))
             define("MONITOR_CPU_FREQ", 1);
             $CPU_FREQ = array();
         }
    +    if(in_array("gpu.usage", $to_show) || $monitor_usage)
    +    {
    +        define("MONITOR_GPU_USAGE", 1);
    +        $GPU_USAGE = array();
    +    }
    
         register_shutdown_function("pts_monitor_statistics");
     }
    diff --git a/pts-core/functions/pts-functions_monitor.php b/pts-core/functions/pts-functions_monitor.php
    index 035af77..0a3a9e4 100644
    --- a/pts-core/functions/pts-functions_monitor.php
    +++ b/pts-core/functions/pts-functions_monitor.php
    @@ -28,10 +28,12 @@ function pts_monitor_update()
             pts_record_v12_voltage();
         if(defined("MONITOR_CPU_FREQ"))
             pts_record_cpu_frequency();
    +    if(defined("MONITOR_GPU_USAGE"))
    +        pts_record_gpu_usage();
     }
     function pts_monitor_arguments()
     {
    -    return array("all", "all.temp", "all.power", "all.voltage", "all.freq", "gpu.temp", "cpu.temp", "sys.temp", "battery.power", "cpu.voltage", "v3.voltage", "v5.voltage", "v12.voltage", "cpu.freq");
    +    return array("all", "all.temp", "all.power", "all.voltage", "all.freq", "gpu.temp", "cpu.temp", "sys.temp", "battery.power", "cpu.voltage", "v3.voltage", "v5.voltage", "v12.voltage", "cpu.freq", "gpu.usage");
     }
     function pts_monitor_statistics()
     {
    @@ -49,6 +51,7 @@ function pts_monitor_statistics()
         $type_index["POWER"] = array();
         $type_index["VOLTAGE"] = array();
         $type_index["FREQUENCY"] = array();
    +    $type_index["USAGE"] = array();
    
         if(isset($GLOBALS["GPU_TEMPERATURE"]))
         {
    @@ -167,6 +170,19 @@ function pts_monitor_statistics()
                 array_push($type_index["FREQUENCY"], count($m_array) - 1);
             }
         }
    +    if(isset($GLOBALS["GPU_USAGE"]))
    +    {
    +        $this_array = $GLOBALS["GPU_USAGE"];
    +
    +        if(is_array($this_array) && !empty($this_array[0]))
    +        {
    +            array_push($device, "GPU");
    +            array_push($type, "Usage");
    +            array_push($unit, "%");
    +            array_push($m_array, $this_array);
    +            array_push($type_index["USAGE"], count($m_array) - 1);
    +        }
    +    }
    
         $info_report = "";
    
    diff --git a/pts-core/functions/pts-functions_system_graphics.php b/pts-core/functions/pts-functions_system_graphics.php
    index b7da406..1c93682 100644
    --- a/pts-core/functions/pts-functions_system_graphics.php
    +++ b/pts-core/functions/pts-functions_system_graphics.php
    @@ -45,6 +45,14 @@ function graphics_processor_temperature()
    
         return $temp_c;
     }
    +function pts_record_gpu_usage()
    +{
    +    global $GPU_USAGE;
    +    $usage = graphics_gpu_usage();
    +
    +    if($usage != "")
    +        array_push($GPU_USAGE, $usage);
    +}
     function graphics_antialiasing_level()
     {
         $aa_level = "";
    @@ -294,5 +302,9 @@ function opengl_version()
    
         return $info;
     }
    +function graphics_gpu_usage()
    +{
    +    return read_ati_extension("GPUActivity");
    +}
    
     ?>
    diff --git a/pts-core/functions/pts-functions_system_parsing.php b/pts-core/functions/pts-functions_system_parsing.php
    index f61a981..8ce0622 100644
    --- a/pts-core/functions/pts-functions_system_parsing.php
    +++ b/pts-core/functions/pts-functions_system_parsing.php
    @@ -209,6 +209,16 @@ function read_ati_extension($attribute)
                     $ati_info = $core_info . "," . $mem_info;
                 }
         }
    +    else if("GPUActivity" == $attribute)
    +    {
    +            $info = shell_exec("aticonfig --pplib-cmd \"get activity\" 2>&1");
    +            if(($pos = strpos($info, "Activity")) > 0)
    +            {
    +                $activity_info = substr($info, strpos($info, "Activity:") + 8);
    +                $activity_info = trim(substr($activity_info, 0, strpos($activity_info, "percent\n")));
    +                $ati_info = $activity_info;
    +            }
    +    }
         return $ati_info;
     }
     ?>

  2. #2

    Default

    Thanks, in git.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •