RHEL 시스템 성능 튜닝

Red Hat Enterprise LinuxBeginner
지금 연습하기

소개

이 랩에서는 tuned를 사용하여 RHEL 시스템 성능을 최적화하고, nicerenice를 사용하여 프로세스 우선 순위를 관리하는 방법을 배우게 됩니다. 먼저 tuned 설치를 확인하고 사용 가능한 프로파일을 나열하는 것으로 시작하여, tuned 프로파일 변경이 시스템 매개변수에 어떤 영향을 미치는지 관찰합니다.

이 랩은 CPU 집약적인 프로세스를 시작하고 모니터링하는 과정을 안내하며, 그 다음 nicerenice를 사용하여 프로세스 우선 순위를 조정하여 자원 할당에 미치는 영향을 이해하도록 돕습니다. 마지막으로, 실행 중인 프로세스를 정리하는 방법을 배우면서 RHEL 에서 성능 튜닝에 대한 완벽한 이해를 얻을 수 있습니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 91%입니다.학습자들로부터 99%의 긍정적인 리뷰율을 받았습니다.

tuned 상태 확인 및 사용 가능한 프로파일 목록

이 단계에서는 tuned 데몬의 상태를 확인하고 RHEL 시스템에서 사용 가능한 튜닝 프로파일을 나열하는 방법을 배우게 됩니다. tuned는 특정 워크로드에 대한 성능을 최적화하기 위해 시스템 설정을 조정하는 동적 적응형 시스템 튜닝 데몬입니다. 튜닝 프로파일을 사용하여 일련의 시스템 전체 설정을 적용합니다.

  1. tuned 데몬이 실행 중인지 확인합니다.
    이 컨테이너 환경에서는 tuned 데몬이 실행 중인지 프로세스를 찾아 확인합니다. 또한 명령에 응답하는지 확인하여 기능을 검증할 수 있습니다.

    먼저, tuned 프로세스가 실행 중인지 확인합니다.

    pgrep tuned

    tuned가 실행 중이면 이 명령은 해당 프로세스 ID(PID) 를 반환합니다. PID 가 반환되지 않으면 데몬을 수동으로 시작할 수 있습니다.

    sudo /usr/sbin/tuned &

    그런 다음 실행 중인지 확인합니다.

    pgrep tuned

    다음과 유사한 출력을 볼 수 있습니다.

    739

    (참고: 출력의 PID 값은 다를 수 있습니다.)

    또한 tuned가 상태 쿼리에 응답하는지 확인하여 tuned가 기능하는지 확인할 수 있습니다.

    sudo tuned-adm active

    이렇게 하면 현재 활성 프로파일이 오류 없이 반환됩니다.

  2. 사용 가능한 튜닝 프로파일을 나열하고 활성 프로파일을 식별합니다.
    tuned-adm list 명령은 사용 가능한 모든 튜닝 프로파일을 표시하고 현재 활성 프로파일을 강조 표시합니다.

    sudo tuned-adm list

    암호를 묻는 메시지가 표시됩니다. 출력에서 Current active profile을 확인합니다.

    Available profiles:
    - accelerator-performance     - Throughput performance based tuning with disabled higher latency STOP states
    - aws                         - Optimize for aws ec2 instances
    - balanced                    - General non-specialized tuned profile
    - balanced-battery            - Balanced profile biased towards power savings changes for battery
    - desktop                     - Optimize for the desktop use-case
    - hpc-compute                 - Optimize for HPC compute workloads
    - intel-sst                   - Configure for Intel Speed Select Base Frequency
    - latency-performance         - Optimize for deterministic performance at the cost of increased power consumption
    - network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
    - network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
    - optimize-serial-console     - Optimize for serial console use.
    - powersave                   - Optimize for low power consumption
    - throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
    - virtual-guest               - Optimize for running inside a virtual guest
    - virtual-host                - Optimize for running KVM guests
    Current active profile: virtual-guest
  3. virtual-guest 프로파일 구성을 검토합니다.
    virtual-guest 프로파일은 가상 머신에 대한 기본값인 경우가 많습니다. 해당 구성 파일을 검사하여 적용되는 설정을 이해할 수 있습니다.

    cat /usr/lib/tuned/virtual-guest/tuned.conf

    이 명령은 다른 프로파일에서 상속하는 매개변수를 포함하여 virtual-guest 프로파일에 대한 tuned 구성을 표시합니다.

    #
    ## tuned configuration
    #
    
    [main]
    summary=Optimize for running inside a virtual guest
    include=throughput-performance
    
    [vm]
    ## If a workload mostly uses anonymous memory and it hits this limit, the entire
    ## working set is buffered for I/O, and any more write buffering would require
    ## swapping, so it's time to throttle writes until I/O can catch up.  Workloads
    ## that mostly use file mappings may be able to use even higher values.
    #
    ## The generator of dirty data starts writeback at this percentage (system default
    ## is 20%)
    dirty_ratio = 30
    
    [sysctl]
    ## Filesystem I/O is usually much more efficient than swapping, so try to keep
    ## swapping low.  It's usually safe to go even lower than this on systems with
    ## server-grade storage.
    vm.swappiness = 30
  4. vm.dirty_background_ratio 매개변수가 적용되었는지 확인합니다.
    virtual-guest 프로파일에는 throughput-performance가 포함되어 있습니다. throughput-performance가 일반적으로 설정하는 매개변수, 예를 들어 vm.dirty_background_ratio를 확인해 보겠습니다. 이 매개변수는 시스템이 백그라운드에서 더티 페이지를 디스크에 쓰기 시작하는 시기를 제어합니다.

    sysctl vm.dirty_background_ratio

    출력은 이 커널 매개변수의 현재 값을 표시합니다.

    vm.dirty_background_ratio = 10

tuned 프로파일 변경 및 시스템 매개변수 변화 관찰

이 단계에서는 활성 tuned 프로파일을 변경하고 시스템 매개변수에 미치는 즉각적인 영향을 관찰하는 방법을 배우게 됩니다. tuned 프로파일을 변경하면 처리량이 많은 작업이나 절전과 같이 다양한 워크로드에 맞게 조정된 일련의 성능 최적화를 신속하게 적용할 수 있습니다.

  1. 현재 활성 튜닝 프로파일을 throughput-performance로 변경합니다.
    throughput-performance 프로파일은 약간의 대기 시간을 희생하여 높은 처리량이 필요한 시스템을 위해 설계되었습니다. 일반적으로 디스크 I/O 및 네트워크 성능을 최적화합니다. tuned-adm profile 명령을 사용하여 프로파일을 전환합니다.

    sudo tuned-adm profile throughput-performance

    암호를 묻는 메시지가 표시됩니다.

    $ sudo tuned-adm profile throughput-performance
    [sudo] password for user:
  2. 새 활성 프로파일을 확인합니다.
    프로파일을 변경한 후에는 새 프로파일이 실제로 활성 상태인지 확인하는 것이 좋습니다. tuned-adm active를 사용하여 이 작업을 수행할 수 있습니다.

    sudo tuned-adm active

    이제 출력에 throughput-performance가 활성 프로파일로 표시되어야 합니다.

    Current active profile: throughput-performance
  3. vm.dirty_ratiovm.swappiness 매개변수가 변경되었는지 확인합니다.
    throughput-performance 프로파일은 vm.dirty_ratiovm.swappiness와 같이 메모리 관리와 관련된 커널 매개변수를 수정합니다. virtual-guest 프로파일이 throughput-performance에서 상속되더라도, throughput-performance 프로파일로 직접 전환하면 virtual-guest 특정 수정 사항 없이 기본 값이 적용됩니다.

    • vm.dirty_ratio: 이 매개변수는 시스템이 디스크에 쓰기 시작하기 전에 더티 페이지 (수정되었지만 아직 디스크에 기록되지 않은 페이지) 로 채울 수 있는 시스템 메모리의 최대 백분율을 정의합니다. 더 높은 값은 더 많은 데이터를 메모리에 버퍼링할 수 있도록 하여 처리량을 향상시킬 수 있습니다.
    • vm.swappiness: 이 매개변수는 커널이 RAM 에서 스왑 공간으로 익명 메모리 (애플리케이션 데이터) 를 얼마나 적극적으로 스왑 아웃할지 제어합니다. 값이 낮을수록 커널은 더 많은 애플리케이션 데이터를 RAM 에 유지하려고 시도하며, 이는 일반적으로 성능에 더 좋습니다.

    sysctl을 사용하여 현재 값을 확인해 보겠습니다.

    sysctl vm.dirty_ratio
    sysctl vm.swappiness

    virtual-guest 프로파일 설정 (dirty_ratio = 30, vm.swappiness = 30) 에서 기본 throughput-performance 프로파일 값으로 값이 변경된 것을 관찰해야 합니다.

    vm.dirty_ratio = 40
    vm.swappiness = 10

    (참고: 이러한 값은 virtual-guest 특정 수정 사항 없이 기본 throughput-performance 최적화를 반영합니다.)

RHEL 에서 CPU 집약적 프로세스 시작 및 모니터링

이 단계에서는 CPU 집약적 프로세스를 시작하고 리소스 사용량을 모니터링하는 방법을 배우게 됩니다. 이는 프로세스가 시스템 리소스를 어떻게 소비하는지, 병목 현상을 식별하는 방법을 이해하는 데 매우 중요합니다. sha1sum /dev/zero 명령을 사용하여 무한한 0 의 스트림에 대한 SHA1 체크섬을 지속적으로 계산하여 효과적으로 CPU 사이클을 소비합니다.

중요: 이 연습에서는 장치 파일에 대해 무한 체크섬을 수행하는 명령을 사용하여 의도적으로 상당한 CPU 리소스를 소비합니다. 이 연습을 마치거나 다음 랩으로 이동하기 전에 모든 연습 프로세스를 종료해야 합니다.

  1. 시스템의 CPU 코어 수를 결정합니다.
    CPU 코어 수를 이해하면 시스템을 완전히 활용하기 위해 실행할 CPU 집약적 프로세스 수를 결정하는 데 도움이 됩니다. 이 정보는 /proc/cpuinfo에서 찾을 수 있습니다.

    grep -c '^processor' /proc/cpuinfo

    이 명령은 processor로 시작하는 줄의 수를 계산하며, 이는 논리적 CPU 코어 (또는 가상 프로세서) 의 수에 해당합니다.

    2

    (참고: 시스템 구성에 따라 출력에 다른 코어 수가 표시될 수 있습니다.)

  2. 각 CPU 코어에 대해 sha1sum /dev/zero & 명령의 두 인스턴스를 시작합니다.
    과도하게 로드된 시스템을 시뮬레이션하기 위해 sha1sum /dev/zero &의 여러 인스턴스를 시작합니다. 명령 끝에 있는 &는 백그라운드에서 프로세스를 실행하여 터미널을 계속 사용할 수 있도록 합니다. 예를 들어, CPU 코어가 2 개인 경우 4 개의 인스턴스 (2 개 인스턴스/코어 * 2 개 코어) 를 시작합니다.

    for i in $(seq 1 $(grep -c '^processor' /proc/cpuinfo | awk '{print $1 * 2}')); do sha1sum /dev/zero & done

    이 명령은 CPU 코어 수를 기반으로 시작할 프로세스 수를 동적으로 계산합니다.

    [1] 1234
    [2] 1235
    [3] 1236
    [4] 1237

    (참고: 출력의 PID 값은 예시와 다를 수 있습니다.)

  3. 백그라운드 작업이 실행 중인지 확인합니다.
    jobs 명령은 셸 세션에서 현재 백그라운드에서 실행 중인 모든 프로세스를 나열합니다.

    jobs

    방금 시작한 sha1sum 프로세스 목록이 표시되어야 합니다.

    [1]   Running                 sha1sum /dev/zero &
    [2]   Running                 sha1sum /dev/zero &
    [3]   Running                 sha1sum /dev/zero &
    [4]-  Running                 sha1sum /dev/zero &
  4. pspgrep 명령을 사용하여 각 sha1sum 프로세스의 CPU 사용률 (%) 을 표시합니다.
    ps 명령은 현재 프로세스의 스냅샷을 보고합니다. pgrep과 결합하여 sha1sum 프로세스를 필터링합니다.

    • ps -o pid,pcpu,nice,comm: 이는 출력 형식을 지정합니다. 프로세스 ID(pid), CPU 사용률 (%)(pcpu), nice 값 (nice), 명령 이름 (comm).
    • $(pgrep sha1sum): 이 명령 대체는 sha1sum이라는 모든 프로세스의 PID 를 찾아 ps에 인수로 전달합니다.
    ps -o pid,pcpu,nice,comm $(pgrep sha1sum)

    sha1sum 프로세스가 CPU 의 상당 부분을 소비하는 것을 볼 수 있습니다.

        PID %CPU  NI COMMAND
       5248 48.8   0 sha1sum
       5249 48.7   0 sha1sum
       5250 48.8   0 sha1sum
       5251 48.8   0 sha1sum

    (참고: %CPU 값은 변동될 수 있지만 높아야 하며, 이는 높은 CPU 사용률을 나타냅니다. NI 열은 nice 값을 표시합니다.)

  5. 실행 중인 모든 sha1sum 프로세스를 종료하고 아무것도 남아 있지 않은지 확인합니다.
    진행하기 전에 이러한 CPU 집약적 프로세스를 정리하는 것이 중요합니다. pkill 명령은 이름에 따라 프로세스를 종료합니다.

    pkill sha1sum

    이제 백그라운드에서 실행 중인 sha1sum 작업이 없는지 확인합니다.

    jobs

    출력이 비어 있거나 모든 작업이 종료되었음을 나타내야 합니다.

    [1]   Terminated              sha1sum /dev/zero
    [2]   Terminated              sha1sum /dev/zero
    [3]   Terminated              sha1sum /dev/zero
    [4]-  Terminated              sha1sum /dev/zero

    (참고: 프로세스가 중지되므로 "Terminated" 메시지가 표시될 수 있습니다.)

RHEL 에서 nice 및 renice 를 사용하여 프로세스 우선순위 조정

이 단계에서는 nicerenice 명령을 사용하여 프로세스의 스케줄링 우선 순위에 영향을 미치는 방법을 배우게 됩니다. 프로세스의 nice 값 (niceness 라고도 함) 은 Linux 스케줄러에 대한 우선 순위를 나타냅니다. 낮은 nice 값 (더 음수) 은 더 높은 우선 순위를 의미하고, 더 높은 nice 값 (더 양수) 은 더 낮은 우선 순위를 의미합니다. nice 값의 범위는 일반적으로 -20(최고 우선 순위) 에서 19(최저 우선 순위) 까지이며, 0 이 기본값입니다.

  1. sha1sum /dev/zero &의 여러 인스턴스를 시작한 다음 nice 레벨이 10 인 추가 인스턴스 하나를 시작합니다.
    바쁜 시스템을 시뮬레이션하기 위해 여러 sha1sum 프로세스를 시작합니다. 그런 다음, 의도적으로 낮은 우선 순위 (더 높은 nice 값) 로 하나를 시작하여 효과를 관찰합니다.

    먼저 세 개의 일반 인스턴스를 시작합니다 (원하는 경우 CPU 코어 수를 기준으로 조정하되, 최소한 가상 프로세서 수만큼 경쟁을 생성합니다).

    for i in {1..3}; do sha1sum /dev/zero & done

    다음으로, nice 레벨이 10 인 네 번째 인스턴스를 시작합니다. 이 프로세스는 다른 프로세스보다 낮은 우선 순위를 갖습니다.

    nice -n 10 sha1sum /dev/zero &

    다음과 유사한 출력이 표시되어 백그라운드 프로세스의 PID 를 나타냅니다.

    [1] 5443
    [2] 5444
    [3] 5445
    [4] 5446

    (참고: 출력의 PID 값은 다를 수 있습니다.)

  2. pspgrep 명령을 사용하여 각 프로세스의 PID, CPU 사용률 (%), nice 값 및 실행 파일 이름을 표시합니다.
    %CPUNI 열을 관찰합니다. nice 값이 10 인 인스턴스는 스케줄러가 CPU 시간을 덜 할당하므로 다른 인스턴스보다 낮은 CPU 사용률 (%) 을 표시해야 합니다.

    ps -o pid,pcpu,nice,comm $(pgrep sha1sum)

    NI 값이 10인 프로세스를 찾습니다. %CPU는 다른 프로세스보다 눈에 띄게 낮아야 합니다.

        PID %CPU  NI COMMAND
       5443 56.8   0 sha1sum
       5444 58.0   0 sha1sum
       5445 56.5   0 sha1sum
       5446  6.7  10 sha1sum

    (참고: 정확한 %CPU 값은 시스템 부하 및 코어 수에 따라 다르지만, nice 10인 프로세스는 더 적은 CPU 시간을 가져야 합니다.)

  3. sudo renice 명령을 사용하여 일반 프로세스 중 하나의 nice 레벨을 5 로 변경합니다.
    renice 명령을 사용하면 이미 실행 중인 프로세스의 nice 값을 변경할 수 있습니다. 일반 프로세스 (nice 값 0) 중 하나를 nice 값 5 로 변경하여 이를 시연합니다.

    먼저, 이전 ps 명령의 출력에서 nice 값이 0 인 sha1sum 프로세스 중 하나의 PID 를 식별합니다. 위의 예에서 첫 번째 프로세스 (PID 5443) 를 사용해 보겠습니다.

    sudo renice -n 5 <PID_of_regular_process>

    <PID_of_regular_process>를 식별한 실제 PID 로 바꿉니다. 예를 들어:

    sudo renice -n 5 5443

    우선 순위 변경을 확인하는 출력이 표시되어야 합니다.

    5443 (process ID) old priority 0, new priority 5
  4. pspgrep 명령을 반복하여 CPU 사용률 (%) 및 nice 레벨을 표시합니다.
    nice 값을 수정한 프로세스의 CPU 사용량 변화를 관찰합니다. nice 값 5 인 프로세스는 이제 nice 값 0 인 프로세스보다 약간 낮은 CPU 사용량을 가져야 하지만, nice 값 10 인 프로세스보다는 높아야 합니다.

    ps -o pid,pcpu,nice,comm $(pgrep sha1sum)

    수정된 프로세스의 NI 값이 이제 5이고 CPU 사용량이 새 우선 순위 레벨을 반영하는 것을 볼 수 있습니다.

        PID %CPU  NI COMMAND
       5443 55.4   5 sha1sum
       5444 67.2   0 sha1sum
       5445 67.1   0 sha1sum
       5446  7.5  10 sha1sum

    (참고: 정확한 %CPU 값은 다를 수 있지만, 낮은 nice 값 (더 높은 우선 순위) 을 가진 프로세스가 더 많은 CPU 시간을 얻는 것을 관찰해야 합니다.)

실행 중인 프로세스 정리

이 마지막 단계에서는 랩 동안 시작된 모든 백그라운드 프로세스가 제대로 종료되었는지 확인합니다. 이는 의도하지 않은 리소스 소비를 방지하고 향후 사용을 위해 랩 환경을 재설정하는 데 중요한 정리 단계입니다.

  1. pkill 명령을 사용하여 sha1sum 이름 패턴을 가진 모든 실행 중인 프로세스를 종료합니다.
    pkill 명령은 이름에 따라 프로세스에 신호 (기본적으로 SIGTERM) 를 보내는 효율적인 방법입니다. 이렇게 하면 이전 단계에서 시작한 모든 sha1sum 프로세스가 중지됩니다.

    pkill sha1sum

    프로세스가 종료되었음을 나타내는 메시지가 표시될 수 있습니다.

    [3]-  Terminated              sha1sum /dev/zero
    [2]-  Terminated              sha1sum /dev/zero
    [4]+  Terminated              nice -n 10 sha1sum /dev/zero
    [1]+  Terminated              sha1sum /dev/zero
  2. sha1sum 프로세스가 아직 실행 중이지 않은지 확인합니다.
    pgrep을 사용하여 sha1sum 프로세스가 활성 상태인지 확인할 수 있습니다. pgrep이 출력을 반환하지 않으면 해당 프로세스가 실행 중이지 않음을 의미합니다.

    pgrep sha1sum

    이 명령은 출력을 반환하지 않아야 하며, 이는 모든 sha1sum 프로세스가 성공적으로 종료되었음을 나타냅니다.

    $ pgrep sha1sum
    $

요약

이 랩에서는 RHEL 에서 시스템 성능 최적화를 위해 tuned를 관리하고 활용하는 방법을 배웠습니다. 먼저 tuned 서비스의 설치 및 상태를 확인하고 사용 가능한 튜닝 프로파일을 나열하여 tuned가 이러한 프로파일을 사용하여 특정 워크로드에 맞게 시스템 설정을 동적으로 조정한다는 것을 이해했습니다. 그런 다음 labex 사용자로 SSH 를 통해 시뮬레이션된 servera 환경에 로그인하고 dnf list tuned를 사용하여 tuned 패키지 설치를 확인했습니다.

이 랩에서는 또한 tuned 프로파일을 변경하여 시스템 매개변수에 미치는 영향을 관찰하는 과정을 안내했으며, 서로 다른 프로파일이 시스템 동작을 어떻게 변경할 수 있는지 보여주었습니다. 또한 성능 병목 현상을 식별하는 데 중요한 CPU 집약적 프로세스를 시작하고 모니터링하는 실질적인 경험을 얻었습니다. 마지막으로, 리소스 할당을 효과적으로 관리하기 위해 nicerenice 명령을 사용하여 프로세스 우선 순위를 조정하는 방법을 배웠고, 실행 중인 프로세스를 정리하여 시스템을 초기 상태로 복원하는 것으로 마무리했습니다.