8장 후반부 처리와 지연된 작업 Sang-bok, Heo.

Slides:



Advertisements
Similar presentations
3 학년 -54 명 4 학년 -53 명 3.4 학년 총인원 -107 명 교사 -21 명 초 등 부 총인원 -128 명 2008 년 1 월 인원보고.
Advertisements

LOGO OpenGL Project ( 해 결 사 ) 여태기 이수원 정화영 정유나 여태기 이수원 정화영 정유나.
11 주차 : Structures and Unions. 2 Introduction structure 는 다른 타입들의 변수를 모은 타입이며 그 타입들을 structure 의 멤버 라 한다. union 은 다른 타입의 여러 변수들을 하나 의 기억 장소에 보관함으로써 한.
Progress Sang-bok, Heo.
Vision System Lab, Sang-Hun Han
제 3 장 변수와 자료형.
Interrupt Programming in Linux
2005년 노인일자리사업 안내.
01 화일의 기본 개념 02 화일 저장장치 03 화일 입출력 제어 04 순차화일 05 화일의 정렬 06 화일의 합병
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
8. 객체와 클래스 (기본).
Department of Computer Engineering
C언어: 배열 (Arrays).
스택(stack) SANGJI University Kwangman Ko
head data link data link data link NULL a b c
자료 구조: Chapter 3 (2)구조체, 포인터
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
Department of Computer Engineering
7장 클래스.
합리적.동태적 정원모형 설계.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
C언어 프로그래밍의 이해 Ch05. 명령문 Phylogenetic: 계통, 발생(학)의.
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수.
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
제 2 장 변수와 상수.
14주차.
아두이노 프로그래밍 2일차 – Part2 PSD 거리센서 강사: 김영준 목원대학교 겸임교수.
아두이노 프로그래밍 2일차 – Part2 PSD 거리센서 강사: 김영준 목원대학교 겸임교수
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
날짜: 팀명: TEAM-SIX 발표자: 이기영
Work Progress ’ 나소라, 윤민.
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
DataScience Lab. 박사과정 김희찬 (월)
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
JSP 게시판 구현.
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
마이크로소프트 박종호.
Byte Alignment ㈜ 웰컴정보시스템 김 정 은.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 22. 구조체와 사용자 정의 자료형1.
센서값 전송하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
3장. 클래스의 기본.
C 프로그래밍 기초.
2 배열과 구조.
소켓버퍼(sk_buff) 이재연
클라우드 서버로 데이터 전송하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
C 코드최적화 세명대학교 AI연구실 양승조.
Department of Computer Engineering
C언어 프로그래밍의 이해 Ch05. 명령문.
디지털회로설계_강의안5 7. 가산기와 감산기 회로.
자료구조 (Data Structure).
3장,4장 발표 서정우.
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
자바 5.0 프로그래밍.
C언어 프로그래밍의 이해 Ch03. 기본 자료형, 변수와 상수.
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
자바 프로그래밍 Thread를 이용한 애니메이션 서울호서전문학교 게임프로그램개발과.
제 8 장 포인터.
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
▶서류관리 프로그램 1. 로그인….2 2. 서류등록 … 서류도착 서류스티커발행
내 마음 다해 내마음다해 주이름찬양해- 주사랑 깊어 말로다못하 네 주앞서 1-4.
argc, argv 의 사용방법 #include <stdio.h>
Tone 명령어 이해하기 목차 재료준비 및 브레드 보드 배선 구성하기 Tone 명령어 기본 및 프로그램 이해 응용 작품 만들기.
아두이노 서보로봇 제어 (블루투스 스마트폰 조종) -03차시-
C.
Virtual Machine Management
C++ 언어의 특징
Presentation transcript:

8장 후반부 처리와 지연된 작업 Sang-bok, Heo

인터럽트 전반부 처리 후반부 처리 실행 시간에 민감한 작업 하드웨어와 관련된 작업 다른 인터럽트가 방해해서는 안 되는 작업 인터럽트 핸들러가 처리하지 않은 모든 관련 처리 수행 거의 모든 일을 후반부 처리에서 하는 것이 이상적 전반부 처리 – 하드웨어의 데이터를 메모리로 복사 후반부 처리 – 데이터를 처리 하는 것

왜 후반부 처리를 하는가? 왜 뒤로 미루는가? 미루는 시기가 언제인가? 인터럽트 라인을 모든 프로세서에 대해 비활성화 시킴 인터럽트 핸들러에서 처리할 작업의 양을 제한할 필요 인터럽트 비활성화 시간 최소화는 시스템 반응속도 및 성능에 영향을 미침 미루는 시기가 언제인가? 네트워크 트래픽 수신을 처리하는 동안에도 키 입력처리를 해야함 일부 작업을 ‘나중’으로 지연 ‘나중’ : 지금이 아닌 시점 시스템이 덜 바쁜, 인터럽트가 활성화된 미래의 어떤 순간으로 미룸

후반부 처리기 BH 태스트 큐(task queue) bottom half – 일반적인 후반부 처리를 나타내는 용어 정적으로 만들어진 32개의 후반부 처리기 전반부 처리에서 32비트 정수의 각 비트를 후반부처리기 지정 BH는 전역으로 동기화 서로 다른 프로세스에서도 동시에 BH 실행 불가 구조는 간단, 병목현상이 발생 태스트 큐(task queue) 커널에 몇 개의 큐를 만듦 큐에는 실행할 함수가 연결 리스트 형태로 저장 각 큐별로 정해진 특정 시간에 대기 중인 함수를 실행 BH 인터페이스를 대체하기에 유연성 부족 덩치가 너무 큼 네트워크처럼 성능이 중요한 서브시스템에서

후반부 처리기 softirq 태스트릿 워크 큐 모든 프로세서에서 동시에 실행할 수 있는 정적으로 정의된 후반부 처리기의 모음 모든 프로세서에서 동시에 실행할 수 있는 정적으로 정의된 후반부 처리기의 모음 네트워크처럼 성능이 아주 중요한 경우에 유용 커널 컴파일 시에 정적으로 등록 태스트릿 softirq 기반, 동적으로 생성 가능한 유연한 후반부 처리기 다른/같은 유형의 태스크릿 프로세서에서 동시에 실행 가능/불가 커널 컴파일시 동적으로 등록 워크 큐 프로세스 컨텍스트에서 나중에 처리할 작업을 관리하는 방법 간단, 유용

softirq softirq 구현 softirq 실행 컴파일 시에 정적으로 할당(동적으로 등록 및 제거 불가) <linux/interrupt.h> softirq 구현 컴파일 시에 정적으로 할당(동적으로 등록 및 제거 불가) softirq에 따라서 NR_SOFTIRQS 개수만큼 등록 가능 softirq 실행 하드웨어 인터럽트 코드가 반환되는 경우 ksoftirqd 커널 스레드 내에서 네트워크 서브시스템처럼 명시적으로 코드에서 지연 상태인 softirq를 확인하고 실행하는 경우

softirq softirq 사용 인덱스 할당 시스템에서 가장 실행시간에 민감하고 중요한 후반부 처리 네트워크와 블록 장치 태스크릿 – softirq기반으로 만듦 자체적으로 효율적인 락 관리 가능 인덱스 할당 태스크릿 우선순위 softirq 설명 HI_SOFTIRQ 높은 우선순위 태스크릿 TIMER_SOFTIRQ 1 타이머 NET_TX_SOFTIRQ 2 네트워크 패킷 송신 NET_RX_SOFTIRQ 3 네트워크 패킷 수신 BLOCK_SOFTIRQ 4 블록 장치 TASKLET_SOFTIRQ 5 일반 우선순위 태스크릿 SCHED_SOFTIRQ 6 스케줄러 HRTIMER_SOFTIRQ 7 고해상도 타이머 RCU_SOFTIRQ 8 RCU 락

softirq 핸들러 등록 softirq 올림 최적화 sofrirq 인덱스와 핸들러 함수 softirq 올림 인터럽트를 비활성-> softirq 올림 -> 인터럽트 상태를 복원 최적화 인터럽트가 이미 비활성상태라면 약간의 최적화 가능 인터럽트 핸들러 – 하드웨어 작업 수행 - softirq 올리고 종료 – do_softirq() 함수 호출 – softirq 실행

태스크릿 구현 태스크릿 구조체 softirq 기반으로 만들어짐 핸들러 함수 : data 인자를 하나 받음 HI_SOFTIRQ, TASKLET_SOFTIRQ 두 가지 softirq 사용 태스크릿 구조체 핸들러 함수 : data 인자를 하나 받음 state : 0, TASKLET_STATE_SCHED, TASKLET_STATE_RUN SCHED : 태스크릿이 실행을 기다리는 중 RUN : 태스크릿 실행 중 최적화를 위해 다중 프로세서 시스템에서만 사용 count : 태스크릿 참조 횟수 값이 0이 아니면 태스크릿은 비활성, 실행되지 않음 값이 0이면 활성화 상태, 실행 대기 표시가 있으면 실행

태스크릿 태스크릿 스케줄링 핸들러 함수 sofrirq 올림과 같은 개념 tasklet_action(), tasklet_hi_action()

태스크릿 태스크릿 사용 태스크릿 선언 후반부 처리는 태스크릿을 이용해 구현하는 편이 좋음 동적/정적으로 생성 가능 사용하기 편하고 빠름 태스크릿 선언 직접 참조 DECLARE_TASKLET(name, func, data) count 값이 0인 활성화 상태의 태스크릿 생성 DECLARE_TASKLET_DISABLED(name, func, data) count 값이 1인 비활성화 상태의 태스크릿 생성 간접 참조 tasklet_struct 구조체 t 초기화 : tasklet_init() 함수 이용

태스크릿 Ksoftirq softirq/태스크릿 처리는 프로세서 별로 존재하는 커널 스레드의 도움을 받음 sofrirq의 문제 프로세서 시간을 얻지 못하는 일이 발생 softirq 발생 빈도, softirq 스스로 다시 등록할 수 있다는 점 해결 재등록된 softirq 즉시 처리하지 않는 방법 커널 스레드를 작동(낮은 우선 순위) softirq 너무 많아지면

워크 큐 워크 큐 지연 작업을 커널 스레드 형태로 처리 프로세스 컨텍스트에서 실행 스케줄링이 가능하며, 휴면 상태로 전환 될 수 있음 많은 양의 메모리 할당, 세마포어 할당 작업의 필요한 경유 유용 지연되는 작업이 휴면 상태 전환이 필요한 경우 워크 큐 사용 커널 스레드가 필요하지 않은 경우 태스크릿 사용 검토

cpu_workqueue_struct 워크 큐 구현 최상위 계층에 작업 스레드가 있음 여러 유형의 작업 스레드 특정 유형의 스레드는 프로세스당 하나씩 작업 스레드 cpu_workqueue_struct workqueue_struct 구조체 work_struct 구조체 … 프로세서 당 하나씩 유형마다 하나씩 지연 작업 함수마다 하나씩

워크 큐 워크 큐 사용 작업 생성 워크 큐 핸들러 작업 스케줄링 작업 비우기 새로운 워크 큐 만들기 DECLARE_WORK(name, void (*func)(void *), void *data) INIT_WORK(struct work_struct *work, void (*func)(void *), void *data) 워크 큐 핸들러 void work_handler(void *data) 작업 스케줄링 scedule_work(&work) schedule_delayed_work(&work, delay) 작업 비우기 int cancel_delayed_work(struct work_struct *work) 새로운 워크 큐 만들기 struct workqueue_struct *create_workqueue(const char *name)

후반부 처리 후반부 처리 작업 사이의 락 후반부 처리 비활성화 태스크릿 sofrirq 내부의 동시성과 관련된 문제를 신경 쓰지 않아도 됨 외부의 동시성 문제를 해결하려면 적절한 락 필요 sofrirq 모든 공유 데이터에 대해 적절한 락 필요 후반부 처리 비활성화 공유 데이터를 안전하게 보호 하려면 비활성화 + 락 함께 핵심 커널 코드를 작성하는 경우-후반부 처리만 비활성화 시킬수 있음 후반부 처리 작업 활성화 – local_bh_disable() 후반부 처리 작업 비활성화 – local_bh_enable()