All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.