Memorydiscarge & Temperature

Başlatan mhmtkrktr, 23 Aralık 2017 - 17:03:07

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

mhmtkrktr

Not : PASS= bölümünün betik içinde yazılması gerekir. Küçük bir değişiklikle ,sistem servisi olarak çalıştırılırsa bu ihtiyaç olmayacaktır.

Ayarlar bölümünü kendinize göre düzenleyip kullanabilirsiniz. Ben grafik oyunlar için hazırladım. Bu sebeple Steam ' e ilave ettim. Doğrudan sistem başlangıcına alınabilir veya başlatıcı aracılığı ile isteğe bağlı çalıştırılabilir.

Örnek başlatıcı : (betiğin /usr/bin içinde memdisc-temperature adında olması durumunda)

[Desktop Entry]
Type=Application
Exec=memdisc-temperature
Hidden=false
X-GNOME-Autostart-enabled=true
Name=sys-mem-tem
Comment=-


#!/bin/bash

### NOT :
### gerekli paketler " hdparm , nvidia-smi , notify-send "
### ekran kartı sıcaklığı sadece nvidia sahipli sürücü için yazıldı.
### sıcaklık 15 saniye boyunca ayarlanan değerin üzerinde kalınca,
### alarm verilecektir.

##############  AYARLAR  ######################

PASS=''  # sudo  #
# yönetici şifresi ( örn : PASS='1234' )

WARN_R=3  # tekrar #
# Aşırı sıcaklık uyarı tekrarı ( 1dk da bir yenilenir )
# Ayarlanan sayı sonunda sıcaklık aşılsa da uyarı verilmez.

LOG=1  # 1 \ 0 #
## Log dosyası isteği. ( değer 0 yapılırsa log tutulmaz)
# $ cat ~/.memd-temp.log

MEM_P=25   # %  #
# RAM boyutuna göre %' lik oran
# Boşaltılacak CACHE doluluk oranı
# RAM belirtilen orana geldiğinde boşaltma işlemi yapılır.

M_TIME=10  # dakika #
#Buffer/Cache (ram boşaltma) için kontrol aralığı.

CPU=80  #  °C   #
#  uyarı oluşturulacak maximum işlemci sıcaklığı

GPU=95  #  °C   #
#  uyarı oluşturulacak maximum ekran kartı sıcaklığı

T_TIME=10  # saniye #
#  Sıcaklık kontrol aralığı

############################################

NVD=0
TONE=1030
INF_DIR=/proc/meminfo
MNT_DIR=/proc/mounts
NVIDIA=$(glxinfo|grep "OpenGL vendor"|grep 'nvidia\|NVIDIA')

if [[ -z "$PASS" ]]; then
notify-send -u normal "UYARI !" "SUDO ŞİFRESİ BELİRTİLMEMİŞ"
exit 0
else
sleep 1m; WRP="$WARN_R"
        [[ -f ~/.memd-temp.log ]] && rm ~/.memd-temp.log
fi

memd_temp_log() {
  CLK=$(timedatectl|awk '/Local time:/{print $5}')
if [[ $1 == temp ]]; then
    [[ $NVD -ne 0 ]] && NLG="GPU = $NVD"
LOG_VAR="CPU = ${CPL[@]}    $NLG"
elif [[ $1 == memd ]]; then
LOG_VAR="BUFF/CACHE = $MEM_E"
fi
  echo " $CLK --> $LOG_VAR" >>~/.memd-temp.log
}

warning_sound() {
  for (( i=1; i<=3; i++ )); do
(speaker-test -t sine -f $TONE &>/dev/null) &
PID=$! ; sleep .5; kill -9 $PID
sleep 1.3
TONE=$(($TONE+5))
  done
# SND=/usr/share/sounds/freedesktop/success.ogg
#  cvlc --play-and-exit $SND
}

mem_check() {
  MEM_T=$(awk '/^MemTotal:/{print $2}' $INF_DIR)
  MEM_B=$(awk '/^Buffers:/{print $2}' $INF_DIR)
  MEM_C=$(awk '/^Cached:/{print $2}' $INF_DIR)
  MEM_R=$(awk '/^SReclaimable:/{print $2}' $INF_DIR)
MEM_M=$((${MEM_T}*${MEM_P}/100))
MEM_E=$((${MEM_B}+${MEM_C}+${MEM_R}))
  [[ $MEM_E -ge $MEM_M ]] && memory_discharge
}

memory_discharge() {
  echo "$PASS"| sudo -S echo
    DEV=$(grep '^/dev' $MNT_DIR | \
    grep -w '/'|awk '{print $1}'|tr -d 0-9)
sudo sync
echo 3 |sudo tee /proc/sys/vm/drop_caches &>/dev/null
[[ $(which blockdev 2>/dev/null) ]] && \
sudo blockdev --flushbufs "$DEV"
[[ $(type hdparm &>/dev/null) ]] && \
sudo hdparm -q -F "$DEV"
}

system_temperature() {
  if [[ -n "$NVIDIA" && -n "$(type nvidia-smi 2>/dev/null)" ]]; then
    NVD=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader)
  fi
C=0; CPL=()
for T in $(cat /sys/class/thermal/thermal_zone*/temp); do
CPT=CPU${C}
CPT=$((${T}/1000))
CPL+=($CPT)
C=$(($C+1))
done
}

  while :; do
    system_temperature
      RPT='0'; WARN_C='0'
      while [[ $RPT -lt 4 ]]; do
WARN=''
if [[ $NVD -ge $GPU ]]; then
WARN=0
NVDW=1
else
for B in $(seq 0 $((${C}-1)));do
if [[ ${CPL[$B]} -ge $CPU ]]; then
WARN=0
CPUW=1
break; fi
done
fi
  if [[ -n $WARN ]]; then WARN_C=$((${WARN_C}+1)); else break; fi
  if [[ $WARN_C -ge 3 && $RPT -ge 3 ]]; then break
  elif [[ $RPT -ne 3 ]]; then sleep 5; system_temperature; fi
RPT=$((${RPT}+1))
      done
  if [[ $LOG -eq 1 ]]; then
  memd_temp_log temp
  fi
      if [[ -n $WARN && $RPT -ge 3 && $WARN_R -ne 0 ]]; then
if [[ $WARN -eq 0 && $NVDW -eq 1 && $WARN_R -eq $WRP ]]; then
    notify-send -u critical "UYARI !" "EKRAN KARTI   $NVD C"
elif [[ $WARN -eq 0 && $CPUW -eq 1 && $WARN_R -eq $WRP ]]; then
    notify-send -u critical "UYARI !" "İŞLEMCİ  ${CPL[$B]} C"
fi
warning_sound &>/dev/null
  sleep 1m
WARN_R=$((${WARN_R}-1))
      fi
    sleep ${T_TIME}s
  done &

  while :; do
    mem_check
      if [[ $LOG -eq 1 ]]; then
  memd_temp_log memd
      fi
    sleep ${M_TIME}m
  done

hwpplayer1

#1
Teşekkürler biraz da insan diliyle açıklayabilir misiniz yani program ne iş yapıyor programlama dili değil de insan diliyle örneğin yazılan kod işletim sistemi çekirdek moduna geçiyor mu ve bu betiği nasıl geliştirip genel bir betik haline getirebiliriz bu u kodu Github'da nasıl barındırırız yol haritası ne olur
özgür yazılım , özgür donanım , özgür toplum

mhmtkrktr

Daha önceleri az da olsa insan dili öğrenmiştim, anlaşmakta sorun yaşamayız sanırım.  :) Lâkin gerekli açıklamaları betik içinde yaptığımı sanıyorum. Bunun dışında kullanımı için anlaşılmayan bir durum varsa sorabilirsin.

Ekleme (geliştirme) yapmak istiyorsan, burada kod paylaşabilirsin. Sadece Türkçe diline uygun yazıldığında Github vb. yerlere koyma gereği yok sanırsam. En azından daha önceki deneyim ve izlenimim bu şekilde olmuştu.   

hwpplayer1

Alıntı yapılan: mhmtkrktr - 24 Aralık 2017 - 21:53:23
Daha önceleri az da olsa insan dili öğrenmiştim, anlaşmakta sorun yaşamayız sanırım.  :) Lâkin gerekli açıklamaları betik içinde yaptığımı sanıyorum. Bunun dışında kullanımı için anlaşılmayan bir durum varsa sorabilirsin.

Ekleme (geliştirme) yapmak istiyorsan, burada kod paylaşabilirsin. Sadece Türkçe diline uygun yazıldığında Github vb. yerlere koyma gereği yok sanırsam. En azından daha önceki deneyim ve izlenimim bu şekilde olmuştu.   

Sensors'un kaynak koduyla karşılaştıralım belki sıfırdan yeni bir kod tabanı oluşturulabilir
özgür yazılım , özgür donanım , özgür toplum

mhmtkrktr

Sensors un bunun amacıyla bağdaşan bir durumu var mı emin değilim ama buna  eklenebilecek bir fikrin veya çalışman olursa neden olmasın.

hwpplayer1

Alıntı yapılan: mhmtkrktr - 24 Aralık 2017 - 22:35:35
Sensors un bunun amacıyla bağdaşan bir durumu var mı emin değilim ama buna  eklenebilecek bir fikrin veya çalışman olursa neden olmasın.

hwpplayer1@hwpplayer1-Aspire-V3-772G:~$ sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +74.0°C  (crit = +97.0°C)

nouveau-pci-0100
Adapter: PCI adapter
temp1:            N/A  (high = +95.0°C, hyst =  +3.0°C)
                       (crit = +105.0°C, hyst =  +5.0°C)
                       (emerg = +135.0°C, hyst =  +5.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +75.0°C  (high = +84.0°C, crit = +100.0°C)
Core 0:         +75.0°C  (high = +84.0°C, crit = +100.0°C)
Core 1:         +74.0°C  (high = +84.0°C, crit = +100.0°C)


Machine Learning yani yapay zeka mantığıyla tekrar yazabiliriz
özgür yazılım , özgür donanım , özgür toplum

mhmtkrktr

Söylediğin konuda bir bilgim yok ama sen bir şeyler hazırlarsan memnuniyetle test edebilirim.

cokomoko

Linux üzerinde olmadığımdan denemedim ama betik açıklamalarıyla birlikte güzel yazılmış görünüyor.
Eline sağlık epey çalışmalarını paylaştın, takip ettiğim kadarıyla.
''Eğer 386BSD ben Linux'a başladığımda var olsaydı, Linux büyük bir olasılıkla olmazdı."
........................Linus Torvalds..........................
İnsanın aradığı sadece huzur ve mutluluktur, 1 numara olmak yalnız kalmak demektir ve 1 numara kalmak için birçok şeyi feda etmek zorunda kalırsın...

mhmtkrktr

[mention=634987]@cokomoko[/mention] teşekkür ederim. Paylaşmak sorun değilde düzenli yazması dert. Düzenli yazmak benim işime gelmiyo, yazmazsam abiler kızıyo.  :D

Cebimde kalan son taşıda atayım da burdan rahatlayayım   ;D