Page 5 of 8 FirstFirst ... 34567 ... LastLast
Results 41 to 50 of 72

Thread: Announcing radeontop, a tool for viewing the GPU usage

  1. #41
    Join Date
    Jul 2012
    Posts
    7

    Default

    Thanks for the info, I will try to get the 3D acceleration working, and I will try radeontop again.
    Regards

  2. #42
    Join Date
    Jul 2012
    Posts
    7

    Default radeontop working OK with RS880

    glxinfo | grep render
    direct rendering: Yes
    OpenGL renderer string: Gallium 0.4 on AMD RS880

    :-) got it working
    (I just had to install package xserver-xorg-video-radeon from http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu, and reboot)
    Now, radeontop is showing some nice counters when running glxgears.
    Thanks for your help.
    Regards

  3. #43
    Join Date
    Jul 2012
    Posts
    148

    Default

    Interesting tool. Does "Graphics pipe<<100%" mean CPU bottleneck? I've done some tests (AII 240+HD6670):
    Amnesia: TDD (1280x720): Graphics pipe=100%
    OilRush (1280x720): Graphics pipe=100%
    Enemy Territory: Quake Wars Demo (1280x720): Graphics pipe=50-60%
    Red Eclipse (1280x720): Graphics pipe=10-20% (but very high fps)
    HL2: Lost Coast (1280x720/Wine): Graphics pipe=50-60%
    Serious Sam 3 BFE (1024x768/Wine/D3D*): Graphics pipe=100%

    *OpenGL backend works only with Catalyst

  4. #44
    Join Date
    Feb 2008
    Location
    Linuxland
    Posts
    5,182

    Default

    First tarball release up, 0.5.4.1. No real changes from .4, just more convenient packaging for people who don't like git.

    Does "Graphics pipe<<100%" mean CPU bottleneck?
    Yes, but you can't know whether that CPU bottleneck is in mesa or in the app just by these counters. Use CPU profilers to find that out.
    Note that vsync can drop the pipe usage, for proper numbers disable vsync.

  5. #45
    Join Date
    Sep 2010
    Posts
    10

    Default 0001-showing-averaged-and-instantaneous-bars.patch

    Add overlayed bars (using '+' char) with exponential moving averages.
    Used %5.1 format specifier for percentages to avoid jumping columns.

    I added these overlayed bars for the first 4 percentages only, so it
    can be seen what this would be about.

    I would have liked to attach text file (the patch) to this mail but
    the forum software doesn't let me (only videos and images).
    Enclosing as code instead.

    Greetings,
    Frieder

    Code:
    From 2e52e85eef0a15177854bff38381331d972ad7f6 Mon Sep 17 00:00:00 2001
    From: Frieder Ferlemann <Frieder.Ferlemann@NOSPAMweb.de>
    Date: Tue, 10 Jul 2012 22:43:37 +0200
    Subject: [PATCH] showing averaged and instantaneous bars
    
    Add overlayed bars (using '+' char) with exponential moving averages.
    Used %5.1 format specifier for percentages to avoid jumping columns.
    ---
     ui.c |   74 +++++++++++++++++++++++++++++++++++++++++++++++++----------------
     1 files changed, 56 insertions(+), 18 deletions(-)
    
    diff --git a/ui.c b/ui.c
    index 48b82cb..6e79f02 100644
    --- a/ui.c
    +++ b/ui.c
    @@ -66,6 +66,30 @@ static void percentage(const unsigned int y, const unsigned int w, const float p
     	attroff(A_REVERSE);
     }
     
    +static void percentage2(const unsigned int y, const unsigned int w, const float p, const float p2) {
    +
    +	const unsigned int x = (w/2) + 2;
    +	unsigned int len = w - x - 1;
    +	unsigned int len2 = len;
    +	unsigned int minlen = 0;
    +
    +	len  = len  * (p  / 100.0);
    +	len2 = len2 * (p2 / 100.0);
    +	minlen = (len <= len2) ? len : len2;
    +
    +	attron(A_REVERSE);
    +	mvhline(y, x, '+', minlen);
    +
    +	if(len <= len2) {
    +		attroff(A_REVERSE);
    +		mvhline(y, x+minlen, '+', len2-minlen);
    +	}
    +	else {
    +		mvhline(y, x+minlen, ' ', len-minlen);
    +		attroff(A_REVERSE);
    +	}
    +}
    +
     void present(const unsigned int ticks, const char card[], const unsigned int color) {
     
     	// This does not need to be atomic. A delay here is acceptable.
    @@ -122,39 +146,53 @@ void present(const unsigned int ticks, const char card[], const unsigned int col
     		float cr = 100.0 * (float) results->cr / ticks;
     		float cb = 100.0 * (float) results->cb / ticks;
     
    +		// determins time constant for moving averages
    +		const float alpha = 0.3;
    +
    +		static float ee_avg = 0;
    +		static float vgt_avg = 0;
    +		static float gui_avg = 0;
    +		static float ta_avg = 0;
    +
    +		// calculate exponential moving averages
    +		ee_avg  = ee_avg  * (1 - alpha) + ee  * alpha;
    +		vgt_avg = vgt_avg * (1 - alpha) + vgt * alpha;
    +		gui_avg = gui_avg * (1 - alpha) + gui * alpha;
    +		ta_avg  = ta_avg  * (1 - alpha) + ta  * alpha;
    +
     		mvhline(3, 0, ACS_HLINE, w);
     		mvvline(1, (w/2) + 1, ACS_VLINE, h);
     		mvaddch(3, (w/2) + 1, ACS_PLUS);
     
     		if (color) attron(COLOR_PAIR(1));
    -		percentage(2, w, gui);
    -		printright(2, hw, _("Graphics pipe %.2f%%"), gui);
    +		percentage2(2, w, gui, gui_avg);
    +		printright(2, hw, _("Graphics pipe %5.1f%% %5.1f%%"), gui, gui_avg);
     		if (color) attroff(COLOR_PAIR(1));
     
     		unsigned int start = 4;
     
    -		percentage(start, w, ee);
    -		printright(start++, hw, _("Event Engine %.2f%%"), ee);
    +		percentage2(start, w, ee, ee_avg);
    +		printright(start++, hw, _("Event Engine %5.1f%% %5.1f%%"), ee, ee_avg);
     
     		// Enough height?
     		if (h > bigh) start++;
     
     		if (color) attron(COLOR_PAIR(2));
    -		percentage(start, w, vgt);
    -		printright(start++, hw, _("Vertex Grouper + Tesselator %.2f%%"), vgt);
    +		percentage2(start, w, vgt, vgt_avg);
    +		printright(start++, hw, _("Vertex Grouper + Tesselator %5.1f%% %5.1f%%"), vgt, vgt_avg);
     		if (color) attroff(COLOR_PAIR(2));
     
     		// Enough height?
     		if (h > bigh) start++;
     
     		if (color) attron(COLOR_PAIR(3));
    -		percentage(start, w, ta);
    -		printright(start++, hw, _("Texture Addresser %.2f%%"), ta);
    +		percentage2(start, w, ta, ta_avg);
    +		printright(start++, hw, _("Texture Addresser %5.1f%% %5.1f%%"), ta, ta_avg);
     
     		// This is only present on R600
     		if (bits.tc) {
     			percentage(start, w, tc);
    -			printright(start++, hw, _("Texture Cache %.2f%%"), tc);
    +			printright(start++, hw, _("Texture Cache %5.1f%%"), tc);
     		}
     		if (color) attroff(COLOR_PAIR(3));
     
    @@ -163,18 +201,18 @@ void present(const unsigned int ticks, const char card[], const unsigned int col
     
     		if (color) attron(COLOR_PAIR(4));
     		percentage(start, w, sx);
    -		printright(start++, hw, _("Shader Export %.2f%%"), sx);
    +		printright(start++, hw, _("Shader Export %5.1f%%"), sx);
     
     		percentage(start, w, sh);
    -		printright(start++, hw, _("Sequencer Instruction Cache %.2f%%"), sh);
    +		printright(start++, hw, _("Sequencer Instruction Cache %5.1f%%"), sh);
     
     		percentage(start, w, spi);
    -		printright(start++, hw, _("Shader Interpolator %.2f%%"), spi);
    +		printright(start++, hw, _("Shader Interpolator %5.1f%%"), spi);
     
     		// only on R600
     		if (bits.smx) {
     			percentage(start, w, smx);
    -			printright(start++, hw, _("Shader Memory Exchange %.2f%%"), smx);
    +			printright(start++, hw, _("Shader Memory Exchange %5.1f%%"), smx);
     		}
     		if (color) attroff(COLOR_PAIR(4));
     
    @@ -182,25 +220,25 @@ void present(const unsigned int ticks, const char card[], const unsigned int col
     		if (h > bigh) start++;
     
     		percentage(start, w, sc);
    -		printright(start++, hw, _("Scan Converter %.2f%%"), sc);
    +		printright(start++, hw, _("Scan Converter %5.1f%%"), sc);
     
     		percentage(start, w, pa);
    -		printright(start++, hw, _("Primitive Assembly %.2f%%"), pa);
    +		printright(start++, hw, _("Primitive Assembly %5.1f%%"), pa);
     
     		// Enough height?
     		if (h > bigh) start++;
     
     		if (color) attron(COLOR_PAIR(5));
     		percentage(start, w, db);
    -		printright(start++, hw, _("Depth Block %.2f%%"), db);
    +		printright(start++, hw, _("Depth Block %5.1f%%"), db);
     
     		percentage(start, w, cb);
    -		printright(start++, hw, _("Color Block %.2f%%"), cb);
    +		printright(start++, hw, _("Color Block %5.1f%%"), cb);
     
     		// Only present on R600
     		if (bits.cr) {
     			percentage(start, w, cr);
    -			printright(start++, hw, _("Clip Rectangle %.2f%%"), cr);
    +			printright(start++, hw, _("Clip Rectangle %5.1f%%"), cr);
     		}
     		if (color) attroff(COLOR_PAIR(5));
     
    -- 
    1.7.7

  6. #46
    Join Date
    Feb 2008
    Location
    Linuxland
    Posts
    5,182

    Default

    Thanks. Please use the github interface in the future, forums tend to mangle patches.

    Field width is changed, the lerp averages added on todo.

  7. #47
    Join Date
    Feb 2008
    Location
    Linuxland
    Posts
    5,182

    Default

    0.6 released with dumping support.

  8. #48
    Join Date
    Mar 2011
    Posts
    381

    Default

    Great tool!
    Even if it just shows how much the CPU limits the driver. Example: I can run 2 instances of minecraft with max graphic settings and none of the values in radeontop goes near 100% while the GPU is in the low PM profile. Of course the FPS is bad and the CPU is at 100% (yes, I know, minecraft isn't the best here cause it eats up much CPU by default, but anyway...).

    Michael should include radeontop measuring in his benchmarks.

  9. #49

    Default

    Thankyou for this tool! Finally I can judge how powerful my graphics card is VS how well the libre driver can push it.

    In my ignorance, I was wondering if I could take the top 'Graphics pipe' value to be the best 'single number' to represent GPU usage? If yes I think I need to work this into my conky configuration.

  10. #50
    Join Date
    Feb 2008
    Location
    Linuxland
    Posts
    5,182

    Default

    Yes, you can use that value as a "general GPU utilization" one. If it's less than 100%, you are cpu-bound.

Posting Permissions

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