KQueue, Epoll

c or linux 2010. 2. 8. 13:31

Apache Event MPM을 보면서 KQueue, Epoll 기능이 있길래 조사해봤다.

같은 기능이라고 보면 됨.
linux - epoll
FreeBSD - kqueue

설명
http://openlook.org/src/articles/maso0109-kqueue.pdf

Kqueue와 Epoll의 성능차
http://link.allblog.net/1345245/http://missbsd.freelog.net/971

번역- Kqueue를 써보자.
http://unixgameserver.springnote.com/pages/678380

kqueue를 응용한 라이브러리 lib event
http://monkey.org/~provos/libevent/

'c or linux' 카테고리의 다른 글

Open files 수 늘이기  (0) 2010.03.23
Sendfile 이해도 높이기  (0) 2010.02.08
리눅스에서 strace 페이지별로 (more기능과 유사) 보기  (0) 2009.11.25
c언어 소스 검색  (0) 2009.11.25
Introduction about web NTOP  (0) 2009.05.13
Posted by '김용환'
,


(strace /bin/ls > /dev/null) 3>&2 2>&1 1>&3- | less

'c or linux' 카테고리의 다른 글

Sendfile 이해도 높이기  (0) 2010.02.08
KQueue, Epoll  (0) 2010.02.08
c언어 소스 검색  (0) 2009.11.25
Introduction about web NTOP  (0) 2009.05.13
Linux) deleting old files and directory.  (0) 2009.05.08
Posted by '김용환'
,

c언어 소스 검색

c or linux 2009. 11. 25. 18:40


리눅스나 cygwin에서 c 언어 관련해서 원래 소스를 볼 수 있도록 처리할 수 있도록 툴이 있는데.
ctags, cscope이다.
둘다 vi와 연동이 되나... 특히 cscope는 따로 독립적으로 쓸 수 있기 때문에 진행가능하다.


 

Posted by '김용환'
,

Ntop is monitoring tool on terminal. It released with web version.
http://www.ntop.org/overview.html




Posted by '김용환'
,


find . -mtime +7 -exec rm -rf {} \;


In my case, I will delete old diectories and files in using find command. 
Very cafeful things is to have '\'(reverse slash) and to have space between '{}' and '\;' .
Posted by '김용환'
,


kernel version of Linux machine is 2.6. Os is red hat enterpise 3.

 /home/www/work]# cat /proc/stat
cpu  91470110 1515303 13832985 1975547688 57093076 457452 0
cpu0 48348024 680662 5550500 986377548 28583984 417596 0
cpu1 43122086 834640 8282484 989170140 28509091 39856 0
intr 4229107630 2324183029 21 0 2 2 0 0 0 36387 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1802215968 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 102672140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 99239585008
btime 1230083813
processes 15607577
procs_running 1
procs_blocked 0


Above cpu value is made of sum betwen cpu1, cpu2. After booting, size of consumed jiffies is indicated.
First column is cpu number, second column is user, third filed is user in low priority (nice), fourth column is idle.
Therefore, It is possible to get cpu usage through those values. 

cpu usage = (idle jiffies)*100 / (idle jiffies + use jiffies + system jiffies + low prio jiffies) 

So, I made a script which can get cpu usage.
# CPU value
#cat /proc/stat | grep -e '^cpu ' | grep -v grep | awk '{print $0}' > cpudata
ncpuinfo=`cat /proc/stat | grep -e '^cpu ' | grep -v grep | awk '{print $0}'`
cpuinfo=(`echo $ncpuinfo | tr '.' ' '`)

total=`expr ${cpuinfo[1]} + ${cpuinfo[3]} + ${cpuinfo[4]}`
echo $total, ${cpuinfo[4]}


* Reference
  /proc/stat in man proc
     
   cpu  3357 0 4313 1362393
   The number of jiffies (1/100ths of a second) that the system spent in user mode, user mode with low priority (nice), system mode, and the idle task, respectively.  The last value should be 100 times the  second  entry in the uptime pseudo-file.

Posted by '김용환'
,

리눅스에서 메모리를 잡아먹고 싶은 녀석을 찾고 싶다면.. 어떻게 할 것인가??

 

바로. top 명령어를 이용하면 된다. % 까지 나온다.

sar -r 1 1000, free 명령어를 이용하여 캐쉬/버퍼 메모리를 확인한다.

 

하지만, 좀 더 구체적으로 알고 싶다면.

ps -auxf 를 사용한다.

 

RSS, VSZ를 확인한다.

VSZ : 현재 사용중인 가상메모리 또는 페이지.

RSS : 현재 사용중인 Real 메모리

 

그래도. 메모리가.. 계속 먼가가 잡고 있는데. 이상하다 싶으면. X를 확인하라.

리눅스 운영체제의 GUI는 50%는 잡느다.ㅡ.ㅡ;;

 

init[5]로 되어 있는지, /etc/inittab 의 initdefault가 5인지도 확인할껏..

 

개발자로 들어왔는데.. ....

개발 시간이 줄어들고 있다..

Posted by '김용환'
,

 

 #!/bin/sh

# defines constant
default_timeout=5

timeout=$default_timeout
if [ -z $1 ]; then
    echo 'Usage: rsh.sh [-t timeout] command'
    echo ' ex) rsh.sh -t 5 a5555.google.com '
    echo ' ex) rsh.sh a5555.google.com '
    exit;
fi

param=$*
while getopts ":t:" opt; do
    case $opt in
        t ) timeout=$OPTARG;;
        \? ) echo "invalid option"
             exit;;
    esac
done

#$1->$0
shift $(($OPTIND - 1))

# background process
rsh "$@" &
backprocess=$!
sleep $timeout; kill -9 $backprocess; echo "time out $timeout seconds"
exit -1;

 

사용법


#!/usr/bin/perl
# rcmd(host, rcmd, lcmd)
sub rcmd {
  my $RSH = "/home/www/work/rsh.sh -t 1";
  chomp $RSH;
  my $RESULT = "";
  if($#_ == 1) {
     $RESULT = `$RSH $_[0] $_[1]`;
  } else {
    $RESULT = `$RSH $_[0] $_[1] | $_[2]`;
  }
  chomp $RESULT;
    return $RESULT;
}
rcmd("a55384", "ls -al");



 

 

Posted by '김용환'
,

rsh에는 timeout 기능이 없다. 있긴 한데.. 디폴트값으로 45초~1분사이의 값인 것 같다.

rsh을 쓰는 경우.. timeout이 걸릴때까지 시간이 소요되면, 동작이 잘 안될 수 있다.

 

겨우 찾은 샘플 소스..

백그라운드로 돌리고, 프로세스 id를 받아놓고, wait했다가 바로 kill 해주는 센스!!

 

 

 

http://groups.google.com/group/comp.unix.admin/msg/a0a2aefc71b7c631

 

 

 

 #!/bin/sh

timeout=$1
case $timeout in
[1-9]*) shift;;
*) timeout=10;;
esac

case $# in
0) echo 'Usage: timeoutrsh [timeout] cmd' >&2; exit;;
esac

rsh "$@" &
p=$!
(sleep $timeout; kill -1 $p) &
k=$!

wait $p
exit=$?
#  Normal exits are 0..127, signals are 128+signo
case $exit in
129)
        echo '(timed out)' >&2
        ;;
*)
        #  Kill the killer.
        kill $k
        ;;
esac
exit $exit

Posted by '김용환'
,

 

제한은 없다.. 다만 시스템 리소스와 연관관계가 있음..

다음 대답 보기

 

http://kbase.redhat.com/faq/docs/DOC-5379

 

 

 

What would be the maximum number of NFS clients supported by a Red Hat Enterprise Linux 3 NFS server?

Created on: Jan 4, 2005 6:00 PM - Last Modified:  Jan 6, 2005 6:00 PM

There is no hard limit for the NFS client count - it depends on the system resources (memory, filesystem, storage subsystem performance, etc). However, the socket buffer where the nfsds is listening to (obtain the requests from) roughly has room for

 



 (number_of_nfsd + 3)

 

requests. Adding the fact that each nfsds always carries its work until completion before grabbing the next request, a Red Hat Enterprise Linux 3 NFS server can take

 



 ((number_of_nfsd * 2) + 3)

 

simultaneous requests at a time.

 

Note: This is a theoretical number and it depends on the resources and the nature of the requests. For example, if any NFSD is blocked in the I/O path, the unprocessed requests is still sitting in the socket buffer and may get timeouts from the client side. Re-transmits would occur and the server capacity would start to drop.

 

 

Posted by '김용환'
,