governor.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. #
  4. # Test governors
  5. # protect against multiple inclusion
  6. if [ $FILE_GOVERNOR ]; then
  7. return 0
  8. else
  9. FILE_GOVERNOR=DONE
  10. fi
  11. source cpu.sh
  12. source cpufreq.sh
  13. CUR_GOV=
  14. CUR_FREQ=
  15. # Find governor's directory path
  16. # $1: policy, $2: governor
  17. find_gov_directory()
  18. {
  19. if [ -d $CPUFREQROOT/$2 ]; then
  20. printf "$CPUFREQROOT/$2\n"
  21. elif [ -d $CPUFREQROOT/$1/$2 ]; then
  22. printf "$CPUFREQROOT/$1/$2\n"
  23. else
  24. printf "INVALID\n"
  25. fi
  26. }
  27. # $1: policy
  28. find_current_governor()
  29. {
  30. cat $CPUFREQROOT/$1/scaling_governor
  31. }
  32. # $1: policy
  33. backup_governor()
  34. {
  35. CUR_GOV=$(find_current_governor $1)
  36. printf "Governor backup done for $1: $CUR_GOV\n"
  37. if [ $CUR_GOV == "userspace" ]; then
  38. CUR_FREQ=$(find_current_freq $1)
  39. printf "Governor frequency backup done for $1: $CUR_FREQ\n"
  40. fi
  41. printf "\n"
  42. }
  43. # $1: policy
  44. restore_governor()
  45. {
  46. __switch_governor $1 $CUR_GOV
  47. printf "Governor restored for $1 to $CUR_GOV\n"
  48. if [ $CUR_GOV == "userspace" ]; then
  49. set_cpu_frequency $1 $CUR_FREQ
  50. printf "Governor frequency restored for $1: $CUR_FREQ\n"
  51. fi
  52. printf "\n"
  53. }
  54. # param:
  55. # $1: policy, $2: governor
  56. __switch_governor()
  57. {
  58. echo $2 > $CPUFREQROOT/$1/scaling_governor
  59. }
  60. # param:
  61. # $1: cpu, $2: governor
  62. __switch_governor_for_cpu()
  63. {
  64. echo $2 > $CPUROOT/$1/cpufreq/scaling_governor
  65. }
  66. # SWITCH GOVERNORS
  67. # $1: cpu, $2: governor
  68. switch_governor()
  69. {
  70. local filepath=$CPUFREQROOT/$1/scaling_available_governors
  71. # check if governor is available
  72. local found=$(cat $filepath | grep $2 | wc -l)
  73. if [ $found = 0 ]; then
  74. echo 1;
  75. return
  76. fi
  77. __switch_governor $1 $2
  78. echo 0;
  79. }
  80. # $1: policy, $2: governor
  81. switch_show_governor()
  82. {
  83. cur_gov=find_current_governor
  84. if [ $cur_gov == "userspace" ]; then
  85. cur_freq=find_current_freq
  86. fi
  87. # switch governor
  88. __switch_governor $1 $2
  89. printf "\nSwitched governor for $1 to $2\n\n"
  90. if [ $2 == "userspace" -o $2 == "powersave" -o $2 == "performance" ]; then
  91. printf "No files to read for $2 governor\n\n"
  92. return
  93. fi
  94. # show governor files
  95. local govpath=$(find_gov_directory $1 $2)
  96. read_cpufreq_files_in_dir $govpath
  97. }
  98. # $1: function to be called, $2: policy
  99. call_for_each_governor()
  100. {
  101. local filepath=$CPUFREQROOT/$2/scaling_available_governors
  102. # Exit if cpu isn't managed by cpufreq core
  103. if [ ! -f $filepath ]; then
  104. return;
  105. fi
  106. backup_governor $2
  107. local governors=$(cat $filepath)
  108. printf "Available governors for $2: $governors\n"
  109. for governor in $governors; do
  110. $1 $2 $governor
  111. done
  112. restore_governor $2
  113. }
  114. # $1: loop count
  115. shuffle_governors_for_all_cpus()
  116. {
  117. printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n"
  118. for i in `seq 1 $1`; do
  119. for_each_policy call_for_each_governor switch_show_governor
  120. done
  121. printf "%s\n\n" "------------------------------------------------"
  122. }