리눅스 튜닝공부 (1)

bhs9610·2020년 9월 20일
0

시스템 문제점을 분석하고 확인하기 위해서는 구성정보를 확인해야 한다. 현재 사용중인 커널 버전과 부팅시 사용한 커널, 파라미터 그리고 CPU와 메모리를 예를 들 수 있다.

커널 정보 확인하기

  • uname -a

가장 대표적인 방법으로 커널 관련 정보가 나온다.

Linux student-Aspire-E5-576 5.3.0-62-generic
 #56~18.04.1-Ubuntu SMP Wed Jun 24 16:17:03 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  • dmesg

커널 부팅시 디버그 메시지로 운영중 발생하는 메시지를 확인 할 수 있다. 메모리 인식 과정과 하드웨어 인식 후 드라이버를 올리는 과정 부팅시 적용된 커널 파라미터를 확인 할 수 있다.

[root@server ~]# dmesg | grep -i kernel | more
Command line : ro root=UUID=3e7b88fa-c176-4c82-b309-c74eea5752e0
intel_idle.max_cstate=0 crashkernel=auto biosdevname=0 console=tty0
console=ttyS 

Reserving 129MB of memory at 48MB for crashkernel (System RAM : 9216MB)

Memory : 32834356k/3407816k available (5428k kernel code, 534728k absent,
709632k reserved, 6982k data, 1300k init)

Command line : 부팅시 커널이 사용한 파라미터를 의미한다. 일부 모듈에 대한 옵션을 설정할 수 있으며, 부팅 시에만 적용되는 모듈도 있다. /proc 파일 시스템을 이용해 확인 할 수도 있다.

Reserving : crashkernel 에 대한 이미지를 로딩했다는 뜻이다. 커널은 다양한 이슈로 커널 패닉 상태에 빠질수 있는데 커널이 패닉 상태가 되면 사용자의 입력을 받아들일 수 없게된다. 이때, crashkernel을 설정해두면 커널 패닉에 빠질 때 crashkernel을 로딩해서 패닉에 빠진 커널의 디버깅 정보를 저장한다. 이를 통해 문제를 추적 할 수 있다.

Memory : 부퉁시 커널이 인식하는 메모리의 정보를 의미한다. 물리적인 메모리의 크기와 실제 사용 가능한 메모리의 크기를 보여준다. 여기에서 확인한 가용 메모리의 부팅이 완료된 후 free 명령을 통해 확인하는 메모리의 양이 조금 다른데, 부팅 과정에서 사용된 일부 메모리들이 부팅 완료 후에 반환되기 때문이다.

  • intel_idle.max_cstate

최근에 사용하는 CPU 에는 C-State 라는 옵션이 있는데 특별한 작업이 없는 idle 상태가 되면 일부 CPU Core 를 Sleep 모드로 전환시킨다. 이렇게 하면 코어가 많이 필요하지 않을 때 전력을 아낄 수 있다. 하지만 갑자기 많은 코어가 필요한 경우, 하지만 갑작스러운 트래픽 요청이 증가하는 경우에는 Sleep 모드인 Core 를 가동시켜야 하기 때문에 성능저하가 발생된다.

그래서 경우에 따라서는 C-State 옵션을 꺼야되는데 옵션은 부팅시 BIOS 설정에서 설정 할 수 있다. 하지만 하드웨어 BIOS 설정에서 해당 옵션을 꺼둔 상태에서도 소프트웨어 모듈에 의해서 켜지는 경우도 있는데 바로 intel_idle 모듈 때문이다.

이 모듈은 BIOS 설정과 관계 없이 C-State 모드로 동작하도록 한다. 그래서 하드웨어 BIOS 설정에서 C-State 를 꺼도 intel-idle 모듈에 의해 CPU가 작업 상태에 따라 적당한 C-state 상태에 빠지게 된다. 이런 현상을 피하고 싶으면 부팅시 파라미터로 intel_idle 모듈을 사용하지 않도록 설정하는 것이 필요하다.

  • 커널의 컴파일 정보 확인하기

dmesg 외에도 사용중인 커널의 컴파일 옵션도 확인할 필요가 있다. 커널의 기능 중 컴파일 옵션에 포함이 되어야만 사용할 수 있는 기능들이 있기 때문이다. ftrace 와 같이 커널 함수 레벨의 추적이 필요할 경우, CONFIG_FUNSITON_TRACER 같은 몇몇 옵션들이 컴파일 옵션에 포함되어야한다.

uname -r| grep -i config_function_tracer CONFIG_FUNCTION_TRACER=y

정리하자면

  • 디버깅 메시지를 위한 명령어 'dmesg' 커널의 메세지를 확인할 수 있으며, crashkernel 파라미터를 설정해주면 커널 패닉 상태에 빠진 장애 메세지를 확인 할 수 있다.
  • 최근 CPU 에는 C-State 라는 옵션이 있는데 시스템이 idle 상태에 올라가면 사용하지 않는 CPU 들을 Sleep 상태로 전환 시킨다. 전력 낭비에 용이하지만, 급격한 트래픽 증가로 Sleep 상태에 CPU Core 를 가동시키게 되는데 이때 성능저하 문제가 생길 수도 있다.
profile
@changhyuni

0개의 댓글