DISKIO & NETIO über /proc (NUR SCRIPT!)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
KingBonecrusher
Beiträge: 375
Registriert: 07.06.2005 09:48:43

DISKIO & NETIO über /proc (NUR SCRIPT!)

Beitrag von KingBonecrusher » 09.10.2009 09:06:07

Hi,

hat sich schonmal jeman die Arbeit gemacht und diskio gescriptet? ist doch eigentlich nur öffnen von /proc/diskstats und berechnen. Habe das mal mit strace verfolgt. Leider habe ich bisher keinen Plan wie ich auf den Durchsatz komme.

Code: Alles auswählen

3    1 hda1 391 12108 13244 2140 6 0 9 332 0 1556 2472
Genau das gleich mit /proc/net/netstat.

mfg

Benutzeravatar
SubOptimal
Beiträge: 1709
Registriert: 10.01.2005 23:25:46
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: bei Frankfurt

Re: DISKIO & NETIO über /proc (NUR SCRIPT!)

Beitrag von SubOptimal » 13.10.2009 01:50:46

Hi,

schau mal ob Dir das viewtopic.php?t=102795#p646006 schon weiter hilft.

SubOptimal

KingBonecrusher
Beiträge: 375
Registriert: 07.06.2005 09:48:43

Re: DISKIO & NETIO über /proc (NUR SCRIPT!)

Beitrag von KingBonecrusher » 15.10.2009 00:07:40

Danke, genau die Info die ich gesucht habe...

KingBonecrusher
Beiträge: 375
Registriert: 07.06.2005 09:48:43

Re: DISKIO & NETIO über /proc (NUR SCRIPT!)

Beitrag von KingBonecrusher » 25.10.2009 19:50:58

Ok, hier mal für Interessierte meine schnelle Lösung. Sollte sich auch auf diskstat ändern lassen.

Code: Alles auswählen

function net0()
{
 IP=`ifconfig $1 | grep Mask | cut -d: -f2 | cut -d " " -f1`
 NETIO="$(cat /proc/net/dev | grep $1)"
 NETIO="${NETIO##*$1:}"
 COUNTER=0
 for i in ${NETIO};
 do
  NETDAT[$COUNTER]="$i"
  COUNTER=$((${COUNTER}+ 1))
 done
}

function net1()
{
net0 $1
START_RX="${NETDAT[0]}"
START_TX="${NETDAT[8]}"
sleep 1
net0 $1
END_RX="${NETDAT[0]}"
END_TX="${NETDAT[8]}"
echo -n "IP: $IP RX=$(((${END_RX}-${START_RX})/1024))Kb/s TX=$(((${END_TX}-${START_TX})/1024))Kb/s"
}
usage:
script.sh eth0
script.sh wlan0

Ausgabe:

Code: Alles auswählen

IP=192.168.0.2 RX=4306Kb/s TX=42Kb/s
Ich hoffe mal habe die Werte sind korrekt...

Hier noch was auch unter busybox läuft...

Code: Alles auswählen

#!/bin/bash
if [ -e "$1" ]; then
 DISK="$(blkid | grep -i $1 | tr -d "\"")"
 for x in ${DISK}; do
         case $x in
         UUID=*)
                 DISK="$(findfs $x)"
                 ;;
         esac
 done
 DISK="${DISK##*/}"
 DISK_PATH="$(find /sys/block/ -type d -name "*$DISK*")"
 BLK_SIZE="$(cat $DISK_PATH/size)"

 if [ -e $DISK_PATH/queue/hw_sector_size ]; then
  HW_SECTOR="$(cat $DISK_PATH/queue/hw_sector_size)"
 else
  HW_SECTOR="512"
 fi
 
 DISK_SIZE=$((((${BLK_SIZE}*${HW_SECTOR}/1000)/1000)/1000))
else
exit
fi 

function diskio
{
 DISKIO="$(cat /proc/diskstats | grep $DISK | head -n1)"
 COUNTER=0
 for i in ${DISKIO};
  do
   DISK_VAL[$COUNTER]="$i"
   COUNTER=$((${COUNTER}+ 1))
  done
}



function diskstat()
{
diskio
DISK_R_S="${DISK_VAL[5]}"
DISK_W_S="${DISK_VAL[7]}"
sleep 1
diskio
DISK_R_E="${DISK_VAL[5]}"
DISK_W_E="${DISK_VAL[7]}"
echo -n "| SIZE="$DISK_SIZE"GB R="$((((($DISK_R_E - $DISK_R_S)*$HW_SECTOR)/1024)/1024))"MB/s W="$((((($DISK_W_E - $DISK_W_S)*$HW_SECTOR)/1024)/1024))"MB/s |"
}

diskstat 

Zuletzt geändert von KingBonecrusher am 26.10.2009 23:49:10, insgesamt 3-mal geändert.

KingBonecrusher
Beiträge: 375
Registriert: 07.06.2005 09:48:43

Re: DISKIO & NETIO über /proc (NUR SCRIPT!)

Beitrag von KingBonecrusher » 26.10.2009 20:30:10

DISKIO

Code: Alles auswählen

#!/bin/bash
DISK="$(vol_id $1 | grep "ID_FS_UUID_ENC")"
DISK="${DISK##*=}"
DISK="$(readlink /dev/disk/by-uuid/${DISK})"
DISK="${DISK##*/}"
DISK_PATH="$(find /sys/block/ -type d -name "*$DISK*")"
BLK_SIZE="$(cat $DISK_PATH/size)"

if [ -f $DISK_PATH/queue/hw_sector_size ]; then
 HW_SECTOR="$(cat $DISK_PATH/queue/hw_sector_size)"
else
 HW_SECTOR="512"
fi
DISK_SIZE=$((((${BLK_SIZE}*${HW_SECTOR}/1000)/1000)/1000))

function diskio
{
 DISKIO="$(cat /proc/diskstats | grep $DISK | head -n1)"
 COUNTER=0
 for i in ${DISKIO};
  do
   DISK_VAL[$COUNTER]="$i"
   COUNTER=$((${COUNTER}+ 1))
  done
}



function diskstat()
{
diskio
DISK_R_S="${DISK_VAL[5]}"
DISK_W_S="${DISK_VAL[7]}"
sleep 1
diskio
DISK_R_E="${DISK_VAL[5]}"
DISK_W_E="${DISK_VAL[7]}"
echo -n "R=$((((($DISK_R_E - $DISK_R_S)*$HW_SECTOR)/1024)/1024)) W=$((((($DISK_W_E - $DISK_W_S)*$HW_SECTOR)/1024)/1024))"
}

diskstat
usage:
script.sh /dev/mapper/root
script.sh /dev/sda1
script.sh /dev/sda

Antworten