dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: bugzilla-daemon@freedesktop.org
To: dri-devel@lists.freedesktop.org
Subject: [Bug 102646] Screen flickering under amdgpu-experimental [buggy auto power profile]
Date: Wed, 20 Mar 2019 14:56:37 +0000	[thread overview]
Message-ID: <bug-102646-502-I1FrWiMDyZ@http.bugs.freedesktop.org/> (raw)
In-Reply-To: <bug-102646-502@http.bugs.freedesktop.org/>


[-- Attachment #1.1: Type: text/plain, Size: 4169 bytes --]

https://bugs.freedesktop.org/show_bug.cgi?id=102646

George Scorer <georgescorer@yahoo.co.uk> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|high                        |low
           Severity|major                       |minor

--- Comment #70 from George Scorer <georgescorer@yahoo.co.uk> ---
Building on julien tempel's workaround, here's a somewhat more complex script
to manage the memory p-state jumps. It switches between low and high memory
p-states very reluctantly, so minimizing instances of flickering. I'm not a
bash expert so please excuse the clumsy coding, but this works for me.

#!/bin/bash

# Each memory p-state switch causes a screen flicker. Tweak these variables to
match
# your personal 'flicker aversion' vs efficiency trade-off.
CORE_P_STATE_UP=6    # The gpu core p-state at which we should jump up to
memory p-state 2
CORE_P_STATE_DOWN=1  # The gpu core p-state at which we should drop down to low
memory p-state
UP_DELAY=2           # in seconds. How long to stay in low memory p-state
before checking whether we can jump up to 2.
DOWN_DELAY=10        # in seconds. How long to stay in memory p-state 2 before
checking whether we can drop down to low.
SLEEP_INTERVAL=1     # in seconds. How frequently we should poll the core
p-state.
LOW_MEM_STATE=0      # Choose between 0 & 1

# Sysfs paths here are hardcoded for one amdgpu card at card0; adjust as
needed.
FILE_PERF_LEVEL=/sys/class/drm/card0/device/power_dpm_force_performance_level
FILE_MEM_P_STATE=/sys/class/drm/card0/device/pp_dpm_mclk
FILE_CORE_P_STATE=/sys/class/drm/card0/device/pp_dpm_sclk


# check for root privileges
if [ $UID -ne 0 ]
then
  echo "Writing to sysfs requires root privileges; relaunch as root"
  exit 1
fi

# Set gpu performance level control to manual
# echo "Setting performance level control to manual"
echo "manual" > "$FILE_PERF_LEVEL"

# Read the current core p-state and set a corresponding initial memory p-state

CORE_P_STATE="$(grep -F '*' $FILE_CORE_P_STATE)"
CORE_P_STATE=${CORE_P_STATE:0:1}

if [ "$CORE_P_STATE" -ge "$CORE_P_STATE_UP" ]; then
  MEM_P_STATE=2
else
  MEM_P_STATE=$LOW_MEM_STATE
fi

echo "$MEM_P_STATE" > "$FILE_MEM_P_STATE"
PROPOSED_MEM_P_STATE=$MEM_P_STATE

function check_core_p_state {

  CORE_P_STATE="$(grep -F '*' $FILE_CORE_P_STATE)"
  CORE_P_STATE=${CORE_P_STATE:0:1}

# Propose what the corresponding memory p-state should be
  OLD_PROPOSED_MEM_P_STATE=$PROPOSED_MEM_P_STATE
  PROPOSED_MEM_P_STATE=$MEM_P_STATE
  if [ "$CORE_P_STATE" -ge "$CORE_P_STATE_UP" ]; then
    PROPOSED_MEM_P_STATE=2
  elif [ "$CORE_P_STATE" -le "$CORE_P_STATE_DOWN" ]; then
    PROPOSED_MEM_P_STATE=$LOW_MEM_STATE
  fi

  if [ "$PROPOSED_MEM_P_STATE" -ne "$MEM_P_STATE" ]; then
#   We want to change so determine where we are in the countdown.    
    if [ "$PROPOSED_MEM_P_STATE" -ne "$OLD_PROPOSED_MEM_P_STATE" ]; then
      if [ "$PROPOSED_MEM_P_STATE" -eq 2 ]; then
        CHANGE_COUNTDOWN=$UP_DELAY
      else
        CHANGE_COUNTDOWN=$DOWN_DELAY
      fi
    fi
    (( CHANGE_COUNTDOWN = $CHANGE_COUNTDOWN - $SLEEP_INTERVAL ))

    if [ $CHANGE_COUNTDOWN -le 0 ]; then
#   The countdown has reached 0 so change the memory p-state.
      MEM_P_STATE=$PROPOSED_MEM_P_STATE
      echo "$MEM_P_STATE" > "$FILE_MEM_P_STATE"
    fi
#  else
#   we don't want to change.  
  fi

#    echo "Old  Prop  Mem  Core  Countdown"
#    echo "  $OLD_PROPOSED_MEM_P_STATE     $PROPOSED_MEM_P_STATE   
$MEM_P_STATE     $CORE_P_STATE         $CHANGE_COUNTDOWN"
#    echo ""
}

function reset_on_fail {
  echo "Exiting, setting memory p-state to 2"
  echo "manual" > "$FILE_PERF_LEVEL"
  echo "2" > "$FILE_MEM_P_STATE"
  exit 1
}

# always try to fix memory p-state 2 on failure
trap "reset_on_fail" SIGINT SIGTERM

function run_daemon {
  while :; do
    sleep $SLEEP_INTERVAL
    check_core_p_state
  done
}

# start the loop

run_daemon

-- 
You are receiving this mail because:
You are the assignee for the bug.

[-- Attachment #1.2: Type: text/html, Size: 5989 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2019-03-20 14:56 UTC|newest]

Thread overview: 124+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-10 17:06 [Bug 102646] Screen flickering under amdgpu-experimental (buffer corruptions?) bugzilla-daemon
2017-09-10 17:25 ` bugzilla-daemon
2017-09-11  0:02 ` bugzilla-daemon
2017-09-11  0:20 ` bugzilla-daemon
2017-09-11  0:25 ` bugzilla-daemon
2017-09-12 21:52 ` bugzilla-daemon
2017-09-12 21:53 ` bugzilla-daemon
2017-09-12 21:57 ` bugzilla-daemon
2017-09-13  2:47 ` bugzilla-daemon
2017-09-13  2:52 ` bugzilla-daemon
2017-09-13 13:29 ` bugzilla-daemon
2017-09-14 18:37 ` bugzilla-daemon
2017-09-15 15:38 ` bugzilla-daemon
2017-09-17  0:15 ` bugzilla-daemon
2017-09-17  0:22 ` bugzilla-daemon
2017-10-02 14:14 ` bugzilla-daemon
2017-10-03 20:44 ` bugzilla-daemon
2017-10-03 20:53 ` bugzilla-daemon
2017-10-21  1:54 ` bugzilla-daemon
2017-11-29 23:03 ` bugzilla-daemon
2017-12-14  4:06 ` bugzilla-daemon
2017-12-16 18:35 ` [Bug 102646] Screen flickering under amdgpu-experimental [buggy auto power profile] bugzilla-daemon
2017-12-16 18:37 ` [Bug 102646] [dc] " bugzilla-daemon
2017-12-20 20:22 ` bugzilla-daemon
2017-12-20 20:29 ` bugzilla-daemon
2018-01-30 19:26 ` bugzilla-daemon
2018-03-05  7:10 ` bugzilla-daemon
2018-03-05  7:13 ` bugzilla-daemon
2018-03-13 16:29 ` bugzilla-daemon
2018-03-13 18:05 ` bugzilla-daemon
2018-03-13 19:01 ` bugzilla-daemon
2018-04-22 15:45 ` bugzilla-daemon
2018-05-01 19:30 ` [Bug 102646] " bugzilla-daemon
2018-06-25 18:09 ` bugzilla-daemon
2018-09-06 12:06 ` bugzilla-daemon
2018-10-27  7:40 ` bugzilla-daemon
2018-10-28 18:45 ` bugzilla-daemon
2018-10-29 15:41 ` bugzilla-daemon
2018-10-29 17:57 ` bugzilla-daemon
2018-10-29 18:38 ` bugzilla-daemon
2018-10-31 19:08 ` bugzilla-daemon
2018-10-31 22:57 ` bugzilla-daemon
2018-10-31 23:06 ` bugzilla-daemon
2018-11-01 16:52 ` bugzilla-daemon
2018-11-17 14:00 ` bugzilla-daemon
2018-11-18 17:36 ` bugzilla-daemon
2018-11-18 18:12 ` bugzilla-daemon
2018-11-18 18:38 ` bugzilla-daemon
2018-11-18 18:47 ` bugzilla-daemon
2018-11-18 22:54 ` bugzilla-daemon
2018-11-18 23:16 ` bugzilla-daemon
2018-11-21 11:34 ` bugzilla-daemon
2018-11-21 11:34 ` bugzilla-daemon
2018-11-23 19:35 ` bugzilla-daemon
2018-11-29 11:01 ` bugzilla-daemon
2018-11-29 20:52 ` bugzilla-daemon
2018-11-29 22:40 ` bugzilla-daemon
2018-11-30  1:25 ` bugzilla-daemon
2018-11-30  1:26 ` bugzilla-daemon
2018-11-30  4:10 ` bugzilla-daemon
2018-11-30  9:24 ` bugzilla-daemon
2018-12-02  9:17 ` bugzilla-daemon
2018-12-11 11:53 ` bugzilla-daemon
2018-12-25 22:56 ` bugzilla-daemon
2018-12-31 12:49 ` bugzilla-daemon
2018-12-31 12:49 ` bugzilla-daemon
2018-12-31 15:10 ` bugzilla-daemon
2019-01-03 11:49 ` bugzilla-daemon
2019-01-11  9:35 ` bugzilla-daemon
2019-01-21 16:46 ` bugzilla-daemon
2019-02-06 13:44 ` bugzilla-daemon
2019-03-10  9:36 ` bugzilla-daemon
2019-03-10  9:38 ` bugzilla-daemon
2019-03-15 17:12 ` bugzilla-daemon
2019-03-19 20:12 ` bugzilla-daemon
2019-03-20 14:56 ` bugzilla-daemon [this message]
2019-03-20 14:57 ` bugzilla-daemon
2019-03-20 16:59 ` bugzilla-daemon
2019-03-20 17:02 ` bugzilla-daemon
2019-03-27 19:03 ` bugzilla-daemon
2019-03-30  1:41 ` bugzilla-daemon
2019-03-30  4:07 ` bugzilla-daemon
2019-04-04 13:47 ` bugzilla-daemon
2019-04-12  1:15 ` bugzilla-daemon
2019-04-12  1:19 ` bugzilla-daemon
2019-04-12  9:38 ` bugzilla-daemon
2019-04-12 13:47 ` bugzilla-daemon
2019-04-17 14:22 ` bugzilla-daemon
2019-04-18  0:40 ` bugzilla-daemon
2019-04-25  8:14 ` bugzilla-daemon
2019-05-12  4:46 ` bugzilla-daemon
2019-05-12  4:47 ` bugzilla-daemon
2019-05-12  4:50 ` bugzilla-daemon
2019-05-12  9:17 ` bugzilla-daemon
2019-05-12 21:42 ` bugzilla-daemon
2019-05-13 13:57 ` bugzilla-daemon
2019-05-13 14:19 ` bugzilla-daemon
2019-05-13 23:59 ` bugzilla-daemon
2019-06-07 13:56 ` bugzilla-daemon
2019-06-13 23:19 ` bugzilla-daemon
2019-06-17  2:58 ` bugzilla-daemon
2019-06-17 10:27 ` bugzilla-daemon
2019-06-17 13:55 ` bugzilla-daemon
2019-08-05 22:11 ` bugzilla-daemon
2019-08-05 22:11 ` bugzilla-daemon
2019-08-05 23:16 ` bugzilla-daemon
2019-08-06  0:51 ` bugzilla-daemon
2019-08-06 18:54 ` bugzilla-daemon
2019-08-11  5:39 ` bugzilla-daemon
2019-08-12  4:01 ` bugzilla-daemon
2019-08-13 21:26 ` bugzilla-daemon
2019-08-16 20:57 ` bugzilla-daemon
2019-08-17  7:29 ` bugzilla-daemon
2019-08-19  8:45 ` bugzilla-daemon
2019-08-19 11:05 ` bugzilla-daemon
2019-08-19 11:17 ` bugzilla-daemon
2019-08-19 11:20 ` bugzilla-daemon
2019-08-19 11:25 ` bugzilla-daemon
2019-08-19 11:41 ` bugzilla-daemon
2019-08-19 15:01 ` bugzilla-daemon
2019-08-23 10:57 ` bugzilla-daemon
2019-08-23 12:14 ` bugzilla-daemon
2019-09-19  8:40 ` bugzilla-daemon
2019-11-19  8:24 ` bugzilla-daemon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-102646-502-I1FrWiMDyZ@http.bugs.freedesktop.org/ \
    --to=bugzilla-daemon@freedesktop.org \
    --cc=dri-devel@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).