기본 콘텐츠로 건너뛰기

softirq

리눅스 2.4.x에서 등장한 것으로 인터럽트 핸들러가 처리하는 시간이 길어지는 동안 동일 비중의 인터럽트 처리가 늦어지거나 인터럽트 이벤트를 놓치는 것을 최대한 막고자 해당 인터럽트를 소프트웨어적으로 나누어 처리하는 것이다. ksoftirqd이라는 커널 스레드가 관리하는데 보통 엄청난 양의 인터럽트가 한꺼번에 발생할 때 나타나서 cpu 점유율을 상승한다. ksoftirqd의 cpu 점유율이 상승하는  때는 보통 디스크 오류로 인해 디스크 I/O가 원할하지 않거나 네트워크 부하가 심할 때 발생한다.

알아야할 사항:
  • Top-half: 인터럽트 핸들을 빠르게 처리한다.
  • Bottom-half: 핸들처리를 빨리 하지 않아도 되는 경우. 인터럽트 이벤트를 미리 받아놓고 softirq가 나중에 가끔씩 처리하게 하는 방식.

댓글

이 블로그의 인기 게시물

Bash Array, Map 정리

Bash에서 Array, Map에 대한 정리. (매번 찾기 귀찮) 찾아보진 않았지만, Bash에서 Array든 Map이든 동일하게 Map(C++에서 Unordered Map)으로 동작하는 것 같다. 왜냐하면, Array의 Index가 연속하지 않아도 동작한다. 그저 Key가 0 이상의 정수인 Map이랑 비슷하게 동작한다. 예) 1, 2, 3, 9, 10 Array # 생성 declare -a empty_array declare -a ar=(haha hoho baba "long string haha hoho") # 접근 echo "ar[0]=${ar[0]}" echo "all as array=${ar[@]}" # 큰따옴표 안에서 각 원소를 따로따로 전달한다. echo "all as one=${ar[*]}" # 큰따옴표 안에서 각 원소를 문자열 하나로 합쳐 전달한다. echo "indexes=${!ar[@]}" echo "indexes=${!ar[*]}" echo "length=${#ar[@]}" echo "length=${#ar[*]}" echo "last=${ar[-1]}" echo "last=${ar[@]: -1}" # 콜론 뒤에 빈 칸이 꼭 필요하다. 옛 방식 # 현재 상황 declare -p ar #(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]="long string haha hoho") ar[100]=hello # 인덱스를 건너 뛰어도 동작한다. declare -p ar #(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]=&

설치한 패키지에서 RPM 추출하기

오래된 패키지를 관리할 저장소가 없어졌고, 기존 패키지로 다른 서버를 세팅해야할 일이 생겼다면 RPM의 리패키지 기능을 이용해보자. $ rpm -e --repackage [PACKAGE_NAME] 위와 같이 리패키지하면, /var/spool/repackage/ 에 생성한 RPM파일이 있다. :-)