Menu Close

Red Hat Training

A Red Hat training course is available for RHEL 8

24.3. systemd의 NUMA 정책 구성 옵션

systemd는 NUMA 정책을 구성하는 다음 옵션을 제공합니다.

NUMAPolicy

실행된 프로세스의 NUMA 메모리 정책을 제어합니다. 다음과 같은 정책 유형이 가능합니다.

  • default
  • 선호하는
  • bind
  • 인터리브
  • 로컬
NUMAMask

선택한 NUMA 정책과 연결된 NUMA 노드 목록을 제어합니다.

다음 정책에는 NUMAMask 옵션을 지정할 필요가 없습니다.

  • default
  • 로컬

기본 정책의 경우 목록은 단일 NUMA 노드만 지정합니다.

추가 리소스

24.3.1. BPF Compiler Collection을 사용하여 시스템 성능 분석

시스템 관리자는 BCC(BPF Compiler Collection) 라이브러리를 사용하여 Linux 운영 체제의 성능 분석 및 정보 수집을 위한 툴을 생성할 수 있습니다. 이러한 툴은 다른 인터페이스를 통해 확보하기 어려울 수 있습니다.

24.3.1.1. BCC 소개

BCC(BPF Compiler Collection)는 eBPF(extended Berkeley Packet Filter) 프로그램을 쉽게 생성할 수 있는 라이브러리입니다. eBPF 프로그램의 주요 유틸리티는 오버헤드나 보안 문제가 발생하지 않고 OS 성능 및 네트워크 성능을 분석하는 것입니다.

BCC는 사용자가 eBPF의 심층적인 기술 세부 사항을 알고 있어야 하는 필요성을 없애고, 미리 생성된 eBPF 프로그램을 사용하는 bcc-tools 패키지와 같이 많은 즉시 사용 가능한 시작점을 제공합니다.

참고

eBPF 프로그램은 디스크 I/O, TCP 연결 및 프로세스 생성과 같은 이벤트에서 트리거됩니다. 커널의 안전한 가상 시스템에서 실행되므로 커널이 충돌하거나 반복하거나 응답하지 않게 되는 프로그램이 발생할 가능성이 낮습니다.

24.3.1.2. bcc-tools 패키지 설치

이 섹션에서는 BCC(BPF Compiler Collection) 라이브러리도 종속성으로 설치하는 bcc-tools 패키지를 설치하는 방법에 대해 설명합니다.

절차

  1. bcc-tools 를 설치합니다.

    # yum install bcc-tools

    BCC 툴은 /usr/share/bcc/tools/ 디렉토리에 설치됩니다.

  2. 선택적으로 툴을 검사합니다.

    # ll /usr/share/bcc/tools/
    ...
    -rwxr-xr-x. 1 root root  4198 Dec 14 17:53 dcsnoop
    -rwxr-xr-x. 1 root root  3931 Dec 14 17:53 dcstat
    -rwxr-xr-x. 1 root root 20040 Dec 14 17:53 deadlock_detector
    -rw-r--r--. 1 root root  7105 Dec 14 17:53 deadlock_detector.c
    drwxr-xr-x. 3 root root  8192 Mar 11 10:28 doc
    -rwxr-xr-x. 1 root root  7588 Dec 14 17:53 execsnoop
    -rwxr-xr-x. 1 root root  6373 Dec 14 17:53 ext4dist
    -rwxr-xr-x. 1 root root 10401 Dec 14 17:53 ext4slower
    ...

    위의 목록의 doc 디렉터리에는 각 툴에 대한 문서가 포함되어 있습니다.

24.3.1.3. 선택한 bcc-tools를 성능 분석에 사용

이 섹션에서는 BCC(BPF Compiler Collection) 라이브러리에서 미리 생성된 특정 프로그램을 사용하여 이벤트별로 효율적이고 안전하게 시스템 성능을 분석하는 방법에 대해 설명합니다. BCC 라이브러리에서 미리 생성된 프로그램 집합은 추가 프로그램 생성의 예제 역할을 할 수 있습니다.

사전 요구 사항

execsnoop를 사용하여 시스템 프로세스 검사
  1. 하나의 터미널에서 execsnoop 프로그램을 실행합니다.

    # /usr/share/bcc/tools/execsnoop
  2. 예를 들어 다른 터미널 실행에서 다음을 실행합니다.

    $ ls /usr/share/bcc/tools/doc/

    위의 경우 ls 명령의 수명이 짧은 프로세스가 생성됩니다.

  3. execsnoop 를 실행하는 터미널에는 다음과 유사한 출력이 표시됩니다.

    PCOMM	PID    PPID   RET ARGS
    ls   	8382   8287     0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/
    ...

    execsnoop 프로그램은 시스템 리소스를 사용하는 각 새 프로세스의 출력 행을 인쇄합니다. ls 와 같이 매우 빨리 실행되는 프로그램의 프로세스도 감지하며 대부분의 모니터링 툴은 등록되지 않았습니다.

    execsnoop 출력에는 다음 필드가 표시됩니다.

    • PCOMM - 부모 프로세스 이름입니다(ls)
    • PID - 프로세스 ID입니다. (8382)
    • PPID - 상위 프로세스 ID입니다. (8287)
    • RET - 프로그램 코드를 새 프로세스로 로드하는 exec() 시스템 호출(0)의 반환 값입니다.
    • ARGS - 인수가 포함된 시작된 프로그램의 위치입니다.

execsnoop 에 대한 자세한 내용, 예제 및 옵션을 보려면 /usr/share/bcc/tools/doc/execsnoop_example.txt 파일을 참조하십시오.

exec() 에 대한 자세한 내용은 exec(3) 도움말 페이지를 참조하십시오.

opensnoop를 사용하여 명령이 여는 파일을 추적합니다.
  1. 하나의 터미널에서 opensnoop 프로그램을 실행합니다.

    # /usr/share/bcc/tools/opensnoop -n uname

    위의 출력은 uname 명령의 프로세스에 의해서만 열려 있는 파일의 출력을 인쇄합니다.

  2. 다른 터미널에서 다음을 실행합니다.

    $ uname

    위의 명령은 다음 단계에서 캡처된 특정 파일을 엽니다.

  3. opensnoop를 실행하는 터미널에는 다음과 유사한 출력이 표시됩니다.

    PID    COMM 	FD ERR PATH
    8596   uname 	3  0   /etc/ld.so.cache
    8596   uname 	3  0   /lib64/libc.so.6
    8596   uname 	3  0   /usr/lib/locale/locale-archive
    ...

    opensnoop 프로그램은 전체 시스템에서 open() 시스템 호출을 감시하고, 그 과정에서 uname 이 열려고 시도한 각 파일의 출력을 출력합니다.

    opensnoop 출력에는 다음 필드가 표시됩니다.

    • PID - 프로세스 ID입니다. (8596)
    • COMM - 프로세스 이름입니다(동일하지 않음)
    • fd - 파일 설명자 - open()가 열려 있는 파일을 참조하도록 반환되는 값입니다. (3)
    • ERR - 모든 오류.
    • PATH - 열기를 시도한 파일의 위치입니다.

      명령이 존재하지 않는 파일을 읽으려고 하면 FD 열은 -1 을 반환하고 ERR 열은 관련 오류에 해당하는 값을 출력합니다. 그 결과 opensnoop 는 제대로 작동하지 않는 애플리케이션을 식별하는 데 도움이 될 수 있습니다.

opensnoop 에 대한 자세한 내용, 예제 및 옵션을 보려면 /usr/share/bcc/tools/doc/opensnoop_example.txt 파일을 참조하십시오.

open() 에 대한 자세한 내용은 open(2) 매뉴얼 페이지를 참조하십시오.

biotop을 사용하여 디스크의 I/O 작업 검사
  1. 하나의 터미널에서 biotop 프로그램을 실행합니다.

    # /usr/share/bcc/tools/biotop 30

    명령을 사용하면 디스크에서 I/O 작업을 수행하는 최상위 프로세스를 모니터링할 수 있습니다. 인수를 사용하면 명령이 30초 요약을 생성할 수 있습니다.

    참고

    인수를 제공하지 않으면 기본적으로 출력 화면이 1초마다 새로 고쳐집니다.

  2. 다른 터미널의 예를 들면 다음과 같습니다.

    # dd if=/dev/vda of=/dev/zero

    위의 명령은 로컬 하드 디스크 장치에서 콘텐츠를 읽고 /dev/zero 파일에 출력을 씁니다. 이 단계에서는 biotop 을 설명하는 특정 I/O 트래픽을 생성합니다.

  3. biotop 을 실행하는 터미널은 다음과 유사한 출력을 보여줍니다.

    PID    COMM             D MAJ MIN DISK       I/O  Kbytes     AVGms
    9568   dd               R 252 0   vda      16294 14440636.0  3.69
    48     kswapd0          W 252 0   vda       1763 120696.0    1.65
    7571   gnome-shell      R 252 0   vda        834 83612.0     0.33
    1891   gnome-shell      R 252 0   vda       1379 19792.0     0.15
    7515   Xorg             R 252 0   vda        280  9940.0     0.28
    7579   llvmpipe-1       R 252 0   vda        228  6928.0     0.19
    9515   gnome-control-c  R 252 0   vda         62  6444.0     0.43
    8112   gnome-terminal-  R 252 0   vda         67  2572.0     1.54
    7807   gnome-software   R 252 0   vda         31  2336.0     0.73
    9578   awk              R 252 0   vda         17  2228.0     0.66
    7578   llvmpipe-0       R 252 0   vda        156  2204.0     0.07
    9581   pgrep            R 252 0   vda         58  1748.0     0.42
    7531   InputThread      R 252 0   vda         30  1200.0     0.48
    7504   gdbus            R 252 0   vda          3  1164.0     0.30
    1983   llvmpipe-1       R 252 0   vda         39   724.0     0.08
    1982   llvmpipe-0       R 252 0   vda         36   652.0     0.06
    ...

    biotop 출력에는 다음 필드가 표시됩니다.

    • PID - 프로세스 ID입니다. (9568)
    • COMM - 프로세스 이름입니다. (dd)
    • DISK - 읽기 작업을 수행하는 디스크입니다 (vda)
    • I/O - 수행된 읽기 작업 수입니다. (16294)
    • kbytes - 읽기 작업에서 얻은 K바이트 양입니다. (14,440,636)
    • mms - 평균 읽기 작업 I/O 시간입니다. (3.69)

biotop 에 대한 자세한 내용, 예제 및 옵션을 보려면 /usr/share/bcc/tools/doc/biotop_example.txt 파일을 참조하십시오.

dd 에 대한 자세한 내용은 dd(1) 도움말 페이지를 참조하십시오.

예기치 않게 느린 파일 시스템 작업 노출을 위해 xfsslower 사용
  1. 한 터미널에서 xfsslower 프로그램을 실행합니다.

    # /usr/share/bcc/tools/xfsslower 1

    위의 명령은 XFS 파일 시스템이 읽기, 쓰기, 열기 또는 동기화(fsync) 작업을 수행하는 데 소비하는 시간을 측정합니다. 1 인수를 사용하면 프로그램이 1ms보다 느린 작업만 표시합니다.

    참고

    인수를 지정하지 않으면 기본적으로 xfsslower 는 10ms보다 느리게 작업을 표시합니다.

  2. 다른 터미널에서 다음을 실행합니다.

    $ vim text

    위의 명령은 vim 편집기에서 텍스트 파일을 생성하여 XFS 파일 시스템과의 특정 상호 작용을 시작합니다.

  3. xfsslower를 실행하는 터미널에는 이전 단계에서 파일을 저장할 때 유사한 내용이 표시됩니다.

    TIME     COMM           PID    T BYTES   OFF_KB   LAT(ms) FILENAME
    13:07:14 b'bash'        4754   R 256     0           7.11 b'vim'
    13:07:14 b'vim'         4754   R 832     0           4.03 b'libgpm.so.2.1.0'
    13:07:14 b'vim'         4754   R 32      20          1.04 b'libgpm.so.2.1.0'
    13:07:14 b'vim'         4754   R 1982    0           2.30 b'vimrc'
    13:07:14 b'vim'         4754   R 1393    0           2.52 b'getscriptPlugin.vim'
    13:07:45 b'vim'         4754   S 0       0           6.71 b'text'
    13:07:45 b'pool'        2588   R 16      0           5.58 b'text'
    ...

    위의 각 행은 파일 시스템에서 특정 임계값보다 더 많은 시간이 걸리는 작업을 나타냅니다. xfsslower 는 예기치 않게 느린 작업을 수행할 수 있는 가능한 파일 시스템 문제를 노출하는 데 효과적입니다.

    xfsslower 출력에는 다음 필드가 표시됩니다.

    • COMM - 프로세스 이름입니다. (b'bash')
    • t - 작업 유형입니다. (R)

      • 읽기
      • w rite
      • s ync
    • OFF_KB - KB 단위의 파일 오프셋. (0)
    • FILENAME - 읽기, 쓰기 또는 동기화되는 파일입니다.

xfsslower 에 대한 자세한 내용, 예제 및 옵션을 보려면 /usr/share/bcc/tools/doc/xfsslower_example.txt 파일을 참조하십시오.

fsync 에 대한 자세한 내용은 fsync(2) 매뉴얼 페이지를 참조하십시오.