Preempt RT 패치를 적용한 리눅스 커널을 설치하고 나면, 이를 실시간 운영 환경에 맞게 설정하는 단계가 필요하다. 이 장에서는 실시간 커널 설정을 통해 시스템의 성능과 안정성을 최적화하는 방법을 다루겠다. 실시간 시스템은 지연 시간(latency)을 최소화하고 일관된 응답 시간을 보장해야 하기 때문에, 적절한 설정이 필수적이다.

1. 커널 설정 도구 사용

리눅스 커널의 설정은 menuconfig 등의 인터페이스를 통해 수행할 수 있다. 일반적으로 다음 명령어를 사용하여 커널 설정 메뉴를 엽니다.

make menuconfig

menuconfig는 텍스트 기반의 인터페이스로, 커널 옵션을 손쉽게 탐색하고 설정할 수 있게 해준다.

2. Preempt RT 관련 주요 설정

Preempt RT 커널에서 중요한 설정 항목은 다음과 같다. 각 항목은 실시간 성능을 극대화하기 위해 조정될 수 있다.

a. CONFIG_PREEMPT_RT

b. CONFIG_HZ

\text{CONFIG\_HZ} = 1000

c. CONFIG_NO_HZ_FULL

d. CONFIG_HIGH_RES_TIMERS

\text{CONFIG\_HIGH\_RES\_TIMERS} = y

3. CPU 관련 설정

a. CPU Isolation

b. CPU Frequency Scaling

4. IRQ 설정

a. IRQ Affinity 설정

echo 2 > /proc/irq/IRQ_NUMBER/smp_affinity

위 예시에서 2는 CPU 1에 해당하는 마스크 값이다.

5. 커널 명령줄 파라미터 설정

커널 부팅 시 사용되는 명령줄 파라미터를 설정하여 실시간 성능을 최적화할 수 있다. 다음은 실시간 커널에서 자주 사용되는 파라미터들이다.

명령줄 설정은 GRUB 등의 부트로더 설정 파일을 통해 추가할 수 있다.

6. 커널 컴파일 및 설치

커널 설정이 완료되면, 설정된 옵션을 기반으로 커널을 컴파일하고 설치해야 한다. 일반적인 컴파일 및 설치 과정은 다음과 같다.

a. 커널 컴파일

커널을 컴파일하기 전에, make 명령을 사용하여 필요한 초기 설정을 적용할 수 있다.

make -j$(nproc)

여기서 $(nproc)은 사용 가능한 CPU 코어 수를 의미하며, 모든 코어를 사용하여 병렬 컴파일을 수행한다. 컴파일 시간이 상당히 소요될 수 있으므로, 시스템 자원을 최대한 활용하는 것이 좋다.

b. 모듈 설치

커널 모듈을 설치하기 위해 다음 명령을 사용한다.

sudo make modules_install

이 명령은 새로 컴파일된 커널에 필요한 모든 모듈을 시스템에 설치한다.

c. 커널 설치

커널 이미지 및 기타 관련 파일을 설치하기 위해 다음 명령을 사용한다.

sudo make install

이 명령은 커널 이미지를 /boot 디렉토리에 복사하고, 부트로더(GRUB)가 이를 인식할 수 있도록 설정 파일을 업데이트한다.

7. GRUB을 통한 커널 선택 및 부팅

새로운 커널을 설치한 후, 시스템 부팅 시 해당 커널을 선택할 수 있도록 GRUB 부트로더를 설정해야 한다.

a. GRUB 업데이트

커널이 설치된 후, GRUB 설정을 업데이트하여 새로 설치된 커널이 부팅 메뉴에 나타나도록 한다.

sudo update-grub

이 명령은 GRUB 설정 파일을 갱신하여 새로 추가된 커널을 포함시킨다.

b. 커널 선택

시스템 부팅 시, GRUB 메뉴에서 새로 설치한 Preempt RT 커널을 선택한다. 일반적으로 GRUB 메뉴는 부팅 시 Shift 키를 누르고 있으면 나타난다.

c. 부팅 확인

새로운 커널로 부팅한 후, 다음 명령어로 커널 버전 및 Preempt RT 설정을 확인할 수 있다.

uname -r

출력된 커널 버전에 "rt"가 포함되어 있으면, Preempt RT 커널이 성공적으로 설치되고 부팅된 것이다.

8. 실시간 커널 설정의 검증

커널이 성공적으로 설치되었다면, 실시간 성능을 검증해야 한다. 다음은 실시간 시스템의 성능을 확인하는 데 도움이 되는 몇 가지 방법이다.

a. Latency 확인

cyclictest와 같은 도구를 사용하여 시스템의 지연 시간을 측정할 수 있다. 이 도구는 주기적인 타이머 인터럽트를 통해 시스템의 최대 지연 시간을 측정한다.

cyclictest -l1000000 -m -n -q

이 명령어는 최대 100만 회의 타이머 인터럽트를 측정하며, 최대 지연 시간을 결과로 출력한다.

b. 스케줄링 확인

chrt 명령어를 사용하여 특정 프로세스에 실시간 스케줄링 정책을 적용하고, 이를 통해 시스템이 실시간 요구사항을 충족하는지 확인할 수 있다.

sudo chrt -f 99 ./실시간프로그램

위 명령어에서 -f 99는 FIFO 스케줄링 정책을 우선순위 99로 적용하는 것을 의미한다. ./실시간프로그램은 실행할 실시간 애플리케이션이다.

9. 시스템 리소스 모니터링

실시간 시스템에서의 성능을 모니터링하기 위해, htop, top, iotop 등 다양한 모니터링 도구를 사용할 수 있다. 이러한 도구들은 CPU 사용량, I/O 활동, 메모리 사용량 등을 실시간으로 모니터링하여 시스템의 실시간 성능을 평가하는 데 도움이 된다.

특히, htop과 같은 도구를 사용하여 특정 CPU에 할당된 작업을 실시간으로 모니터링하고, 실시간 작업이 예상대로 실행되고 있는지 확인할 수 있다.

10. 추가 설정 및 최적화

마지막으로, 시스템에 특화된 실시간 요구사항에 따라 추가적인 설정 및 최적화가 필요할 수 있다. 이러한 설정은 실시간 애플리케이션의 특성에 따라 다르며, 다음과 같은 요소들을 고려할 수 있다.

이와 같은 설정을 통해 시스템이 실시간 요구사항을 충족하도록 더욱 최적화할 수 있다.