[php] 네트워크 대역폭 계산
로빈아빠
본문
네트워크 대역폭 계산
소스 :
http://ftp.linuxchannel.net/devel/php_bandwidth/
JSBoard Open Project 홈페이지에 링크되어 있는 'Check Bandwidth(bwbar)'에서 힌트를 얻었습니다.
[간략한 소개 및 계산 방법]
유동적인 특정 시간 동안에, 주어진 네트워크 인터페이스 장치(eth0)에 대한 전송 및 수신한 네트워크 대역폭을 PHP로 계산하였습니다.
즉, 주기적으로 체크하지 않고 특정 한 순간에 대한 결과치입니다.
대역폭에 계산되는 시간(intervals)은 항상 최근 -1에서 접근한 클라이언트(이하 'A')가 가진 microtime과 최근에 접근한 (현재 보고 있는) 클라이언트(이하 'B') 사이의 시간을 microtime으로 뺀 시간을 적용했습니다. (달리 방법이 없어서...)
패킷크기는 /proc/net/dev 정보에서 지정한 장치(기본값 eth0)에 대한 값이며,
계산은 클라이언트 A에서 얻은 패킷크기와 클라이언트 B가 얻은 값이
그 대상입니다.
출력단위는 MBPS(MBits/s,기본값)와 MBytes/s에서 둘중하나로 출력됩니다.
정확한 측정기준은 될 수는 없지만 bwbar에서 계산한 값과 비교해보았는데 거의 비슷하게 떨어지더군요.
[기타]
어거지로 PHP 클래스로 허접하게 짰는데 고쳐주실분이나 기타 내용에 대해서 조언주실분은 언제든지 환영합니다.
Semaphore(세마포어)와 Shared Memory(공유메모리) 함수를 사용할 수 있는 시스템에서는 파일로 직접 접근하지 않고 공유메모리로 접근하도록 하였습니다.
< 주의 >
버그가 존재할수 있으므로 중요한 시스템에서 테스트를 자제해 주십시오.
< /주의 >
[간략 사용법]
$bw = new bandwidth();
$BW = $bw->get_bandwidth(); // 기본값(MBPS, eth0)
//$BW = $bw->get_bandwidth(1); // MBytes/s, eth0
//$BW = $bw->get_bandwidth(0,'eth1'); // MBPS, eth1
echo <<<_EOF_
receive : $BW[R],
transmit : $BW[T] at intervals of last $BW[usec] seconds<HR>n
_EOF_;
// 출력결과(예)
receive : 0.00 MBPS, transmit : 0.02 MBPS at intervals of last 2.23 seconds
소스 :
http://ftp.linuxchannel.net/devel/php_bandwidth/
JSBoard Open Project 홈페이지에 링크되어 있는 'Check Bandwidth(bwbar)'에서 힌트를 얻었습니다.
[간략한 소개 및 계산 방법]
유동적인 특정 시간 동안에, 주어진 네트워크 인터페이스 장치(eth0)에 대한 전송 및 수신한 네트워크 대역폭을 PHP로 계산하였습니다.
즉, 주기적으로 체크하지 않고 특정 한 순간에 대한 결과치입니다.
대역폭에 계산되는 시간(intervals)은 항상 최근 -1에서 접근한 클라이언트(이하 'A')가 가진 microtime과 최근에 접근한 (현재 보고 있는) 클라이언트(이하 'B') 사이의 시간을 microtime으로 뺀 시간을 적용했습니다. (달리 방법이 없어서...)
패킷크기는 /proc/net/dev 정보에서 지정한 장치(기본값 eth0)에 대한 값이며,
계산은 클라이언트 A에서 얻은 패킷크기와 클라이언트 B가 얻은 값이
그 대상입니다.
출력단위는 MBPS(MBits/s,기본값)와 MBytes/s에서 둘중하나로 출력됩니다.
정확한 측정기준은 될 수는 없지만 bwbar에서 계산한 값과 비교해보았는데 거의 비슷하게 떨어지더군요.
[기타]
어거지로 PHP 클래스로 허접하게 짰는데 고쳐주실분이나 기타 내용에 대해서 조언주실분은 언제든지 환영합니다.
Semaphore(세마포어)와 Shared Memory(공유메모리) 함수를 사용할 수 있는 시스템에서는 파일로 직접 접근하지 않고 공유메모리로 접근하도록 하였습니다.
< 주의 >
버그가 존재할수 있으므로 중요한 시스템에서 테스트를 자제해 주십시오.
< /주의 >
[간략 사용법]
$bw = new bandwidth();
$BW = $bw->get_bandwidth(); // 기본값(MBPS, eth0)
//$BW = $bw->get_bandwidth(1); // MBytes/s, eth0
//$BW = $bw->get_bandwidth(0,'eth1'); // MBPS, eth1
echo <<<_EOF_
receive : $BW[R],
transmit : $BW[T] at intervals of last $BW[usec] seconds<HR>n
_EOF_;
// 출력결과(예)
receive : 0.00 MBPS, transmit : 0.02 MBPS at intervals of last 2.23 seconds
관련링크
댓글목록
등록된 댓글이 없습니다.