0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
#!/bin/sh
#
# Simple script to enable CPU cores automatically again if cooling state is
# 3 or lower.
#
set -e
get_cooling_state() {
echo $(cat /sys/devices/virtual/thermal/cooling_device0/cur_state)
}
enable_cpu() {
if [ $(cat /sys/devices/system/cpu/cpu$1/online) = 0 ]; then
echo 1 > /sys/devices/system/cpu/cpu$1/online || true
fi
}
while true; do
for c in 0 1 2 3; do
if [ $(get_cooling_state) -le 3 ]; then
enable_cpu $c
fi
done
sleep 5
done
Вот такой замечательный код занимается защитой процессора в стандартных сборках под OrangePi на Allwinner H5
https://github.com/orangepi-xunlong/OrangePiH5_scripts/blob/master/platform-scripts/OrangePi_corekeeper.sh
Думаю, говорить о том, как такой код работает, и насколько лучше был бы тут простенький скрипт, скажем, на питоне, смысла нет
Запостил: losetup,
10 Декабря 2017
Steve_Brown 11.12.2017 12:25 # +3
хорошо работает?
> и насколько лучше был бы тут простенький скрипт
практически ни на сколько?
Dummy00001 11.12.2017 20:08 # +1
но с другой стороны, сам скрипт слегка пахнет. для чего-то постоянно бегущего, можно было бы слегка получше сделать. типа `echo $(cat /sys/devices/virtual/thermal/cooling_device0/cur_state)` - this is "an ox, and a moron". `while true;` -> `while : ;`
bormand 11.12.2017 20:11 # 0
А нафиг? Экономии поди и не выйдет, если true вшито в шелл, а читаемость упала.
Dummy00001 11.12.2017 20:21 # 0
ЗЫ тест слегка кривой потому что под цигвином.
bormand 11.12.2017 20:23 # 0
Да и выжимать из шелл скрипта максимальный пирфоманс - это уже, имхо, на грани извращения...
Dummy00001 11.12.2017 20:26 # 0
bormand 11.12.2017 20:28 # 0
По идее, эта фишка вообще должна была уйти патчем в ядро... Там вроде можно подписаться на ивент от термалзоны и вообще не поллить.
Dummy00001 11.12.2017 20:31 # 0
bormand 11.12.2017 20:33 # 0
> спать лучше/проще в юзерспэйсе
Ну это если ивенты от термалзон вообще можно поймать в юзерспейсе...
bormand 11.12.2017 20:37 # 0
З.З.Ы. Судя по картинке там есть ещё пятое low power ядро, видимо на нём.
Dummy00001 11.12.2017 20:45 # 0
надо смотреть на само железо, что бы понять какие грабли тут обходят.
bormand 11.12.2017 22:07 # +1
Походу в cpu_budget_cooling.c у них собака порылась. Этот код умеет отключать ядра при повышении cooling state процессора, но не умеет включать их обратно. А в sunxi-cpu-budget-cooling.c можно увидеть интересные таблички, где показан маппинг cooling state на количество ядер и их частоты.
К сожалению Allwinner H5 (SUN50I) в этой табличке нету, видимо мне попались слишком старые исходники. А в новых, где H5 упоминается, уже нету этой херни с отключением - при повышении cooling state только частоту скидывают. Есть вероятность, что скрипт из топика уже и не нужен...
https://github.com/allwinner-zh/linux-3.4-sunxi/tree/master/drivers/thermal
bormand 11.12.2017 22:26 # 0
З.З.Ы. Блин, из-за этих ваших allwinner'ов сегодня в кружочки не успел поиграть :(
1024-- 11.12.2017 22:43 # 0
Помню, в прошлый раз уже были околосветовые.
bormand 11.12.2017 23:29 # 0
Левая лапка выше 180BPM так и не хочет жать, да и до 180 дотягивает только после часового прогрева... Мозги тормозят - карты типа той, что была в ролике, адекватно процессят только если хорошо выспаться.
Поэтому прогресса почти нету. Боюсь, что это мой hard-limit.
CHayT 12.12.2017 01:06 # +2
bormand 12.12.2017 08:39 # 0
Да можно, но тогда её ещё придётся учить играть на камеру...
CHayT 12.12.2017 11:25 # +1
CHayT 12.12.2017 12:56 # 0
3.14159265 29.12.2017 15:46 # 0
Ну в шахматы же научили.
И нейросеть всех унизила.
Как ранее в го и сёги.
bormand 11.12.2017 20:16 # +1
Скорее борется с защитой процессора...
SemaReal 12.12.2017 05:52 # 0
fuckercoder 29.12.2017 05:08 # 0
Нормальные люди пишут защиту и вшивают в ядро