IT/OS&Middleware

[os] 서버 OS 모니터링-Disk

Hayley Shim 2023. 10. 29. 00:24

안녕하세요. 서버 OS 모니터링을 공부하기 위해 ‘실무로 배우는 시스템 성능 최적화’ 책 내용을 참고하여 관심있는 내용 위주로 정리했습니다.

 

사용량 분석

디스크 사용량 분석은 아래 세 가지 측면에서 이뤄진다

  • 디스크 사용률과 서비스 소요시간
  • 파일 입출력 발생량과 용도
  • 파일시스템 여유율

디스크 성능의 핵심 항목은 디스크의 사용률과 서비스 소요시간이다. 파일 입출력 발생량과 용도는 사용률과 서비스 요소시간에 문제가 있는 경우 불필요한 입출력 제거나 감소를 통해 개선하기 위해 상세분석하는 것이다. 그리고 파일시스템 여유율은 공간 부족으로 인한 장애 발생을 미연에 방지하기 위해 확인한다.

디스크 소요시간

  • 성능에서 응답시간이 가장 중요하듯 디스크 자원에 대한 성능 평가에서 가장 중요한 것은 디스크 소요시간이다.
  • 디스크 소요 시간은 대기 시간(wait time)과 서비스 시간(service time)으로 구성된다
  • 대기시간 : 해당 디스크가 다른 스레드가 요청한 데이터를 읽고 잇어 큐(Queue)에서 대기하는 시간
  • 서비스 시간 : 대기가 끝나고 요청한 데이터를 디스크에서 읽어오는데 걸리는 시간
# 서비스 시간 성능 기준
평상시 디스크 소요시간 : 2~3ms 이내(디스크 성능에 따라 5ms 이내)
과부하 시 디스크 소요시간 : 20~30ms 이내
# iostat을 이용한 디스크 소요시간 확인
$ iostat -x 5 10

파일 입출력 발생량과 용도

  • 파일 입출력은 시스템 구성 요소 중 크게 성능을 저하시키는 부분으로 중요 개선 대상이다
# 프로세스별 사용 파일 목록
$ isof
$ /proc/[pid]/fd
# 프로세스별 입출력 모니터링
$ strace# 프로세스별 입출력 위치 확인
$ pstack
$ jstack# 파일시스템 용량과 여유율
$ df -h

유닉스/리눅스 디스크 관리

  • 유닉스와 리눅스는 논리 볼륨 관리자(LVM: Logical Volume Manager)가 파일시스템에 대한 디스크의 할당과 관리를 담당한다.
  • 논리 볼륨 매니저는 디스크 공간을 논리적 수준에서 관리해 논리 공간과 물리 공간을 연결함으로써 비연속적인 공간에 데이터를 저장하고 다수의 디스크에 걸쳐서 복제하고 공간을 동적으로 조정할 수 있게 한다.
# 파일시스템
$ df
# 논리 볼륨 목록
$ lvdisplay# 볼륨 그룹 목록
$ vgscan# 물리 볼륨 목록
$ pvdisplay# 볼륨 그룹 정보
$ vgdisplay -v

파일시스템 입출력 방식

  • 파일시스템은 입출력 성능을 개선하기 위해 여러 방식을 제공하는데 이러한 방식들을 이해하려면 먼저 일반적인 파일시스템의 입출력을 먼저 이해해야 한다. 일반 파일시스템은 데이터 읽기를 요청받으면 파일 버퍼 캐시에 존재하는지 확인한 후 캐시돼 있지 않다면 디스크에서 읽어와 캐시에 올리고 애플리케이션에 데이터를 넘겨준다

비동기 입출력

  • 보통 파일 입출력이 완료될 때까지 프로세스나 스레드가 블록킹되는데 비동기 입출력(AIO; Async IO)은 읽고 쓰는 작업이 백그라운드에서 수행되어 입출력 작업을 호출한 후 완료되기까지 기다리지 않고 후속 작업을 진행할 수 있다.
  • 비동기 입출력을 담당하는 서버 커널 프로세스가 존재한다.

직접 입출력

  • 직접 입출력(DIO; Direct IO)은 파일 버퍼 캐시 영역을 거치지 않고 디스크로부터 애플리케이션으로 바로 파일 데이터가 곧장 ㄷ전달되게 한다. 직접 입출력은 항 상 디스크로부터 동기 읽기(Synchronous read)가 발생하기 때문에 성능이 나빠질 수 있다. 그러나 DB의 경우 DB 엔진에 캐시가 구현돼 있어 파일시스템이 제공하는 파일 캐시를 사용하지 않는 편이 성능 측면에서 유리하다. DB에서 파일 캐시를 사용하면 파일 캐시와 DB 데이터 캐시에 두번 캐시되어 메모리 사용의 비효율성과 처리 오버헤드가 발생한다. 그래서 DB가 파일시스템을 사용할 때는 직접 입출력을 설정해서 사용하는 것이 성능 측면에서 우수하다.

동시 입출력

  • 데이터 완전성을 유지하기 위해 파일시스템은 inode 락을 통해 쓰기 직렬화해서 한 시점에 한 파일에 대한 쓰기 작업은 한 스레드만 가능하게 한다.
  • 동시 입출력(CIO; Concurrent IO)은 이러한 inode 락을 처리하지 않음으로써 공유된 파일에 대해 여러 개의 스레드가 동시에 읽고 쓸 수 있게 한다.
  • 동시 입출력은 직접 입출력에서 파일 캐시를 사용하지 않는 특성도 포함하고 있다.

스토리지

  • 서버의 서비스 운영용 데이터를 저장하기 위해 주로 사용하는 DAS, NAS, SAN에 대해 알아보자.
참고 : DAS, NAS, SAN

대용량 스토리지는 아래와 같은 기능을 통해 성능과 운영 안정성을 보장하고 있다.

  • 캐시 메모리 : 데이터 입출력 성능 개선
  • 레이드 : 데이터 보호 및 입출력 성능 개선
  • 온라인 장치 교체(Hot-swap)과 온라인 데이터 재구성: 무정지 유지보수
  • 전원 이중화 : 무정지 운영

LUN(Logical Unit Number)

  • SCSI(Small Computer System Interface) 버스에서 사용되는 고유 식별자로서 독립적인 논리 단위 장치를 서로 구별할 수 있게 해준다. SCSI는 병렬 인터페이스로서 여러 개의 장치를 연결할 수 있으며 모든 장치는 하나 케이블로 연결해 호스트 어댑터와 SCSI 버스를 구성함으로써 호스트와는 독립적으로 장치 간에 정보 교환이 가능하다.
  • LUN은 SCSI에서 시작됐으나 iSCSI와 광 채널 등에서도 사용된다.
  • 서버가 스토리지를 사용할 때 파일시스템에서 하드디스크에 해당하는 물리 볼륨이 LUN이다.
  • 스토리지에서 하나의 디스크나 디스크의 한 섹션 또는 디스크 어레이 전체나 디스크 어레이의 한 섹션으로 구성된다.
  • LUN은 SAN을 통해 공유된 블록 스토리지를 관리하는데 중심적인 역할을 한다.

레이드

  • 여러 개의 하드디스크를 하나처럼 묶는 방법으로 다수의 하드디스크를 어레이로 연결함으로 고용량 하드디스크를 구성할 수 있고 데이터 저장 시 분산 저장되기 때문에 속도상의 이점도 얻을 수 있다.
  • 하드디스크의 물리적 이상이 발생할 때 데이터의 손실 없이 복구할 수 있고 이를 위해 서버를 셧다운할 필요가 없다.

레이드 0 — 스트라이핑

  • 데이터를 여러 하드디스크에 분산해서 저장하는 방식. 단, 장애 발생에 대비한 여분으 공간을 갖지 않는 방식으로 엄밀히 말하면 레이드의 정의에 부합하지 않는다
  • 안정성 측면에서는 한 파일도 스트라이프 단위에 맞게 여러 하드디스크에 분산 저장됨으로써 한 하드디스크에 장애가 발생해도 어레이 데이터가 사라지기 때문에 단일 하드디스크보다 신뢰도가 낮다.
  • 하드디스크가 늘어날수록 성능은 좋아지지만 장애 포인트는 증가하므로 안정성은 떨어지는 구조다.
  • 데이터 스트라이핑으로 읽고 쓸때는 병렬로 작업이 이뤄져 좋은 성능을 보여준다.
참고 : RAID 0

레이드 1 — 미러링

  • 한 하드디스크에 기록되는 모든 데이터를 다른 하드디스크에 복사해 둠으로써 데이터 복구를 지원한다. 그래서 실제로 사용할 수 있는 디스크 용량은 전체 디스크 용량의 1/2이 된다.
  • 단일 하드디스크에 비해 읽은 때는 더 나은 성능을 제공하지만 쓸 때는 약간 느리다. 적어도 2개의 디스크가 있어야 가능하다.
참고 : RAID 1

레이드 0+1 — 스트라이핑과 미러링

  • 레이드 0의 스트라이핑과 레이드1의 미러링의 장점을 결합한 방식으로 다른 하드디스크에 스트라이핑된 데이터의 완벽한 복사본을 유지한다.
  • 따라서 읽고 쓰는 성능도 우수하고 데이터 안정성 또한 뛰어나다. 그래서 대형 시스템의 스토리지를 구축할 때 많이 사용하는 레이드 방식이다.
  • 하지만 여전히 전체 디스크 용량의 50%만 사용할 수 있어 비용이 많이 든다는 단점이 있다.
참고: RAID 0+1

레이드 4 — 스트라이핑과 전용 패리티

  • 한 하드디스크에 패리티 정보를 저장하고 나머지 디스크에 데이터를 블록 단위로 분산해서 저장하는 방식이다. 한 드라이브에 장애가 발생했을 때 패리티 정보를 기반으로 데이터를 복구한다.
  • 읽기 성능은 레이드 0+1과 견줄만 하지만 쓸 때는 매번 연산 후 패리티 정보를 갱신해야 하기 때문에 추가적인 시간이 필요하고 패리티 디스크가 병목 원인이 될 수 있다.
  • 레이드 3과 4의 차이는 3은 바이트 단위로 디스크에 분산하고 패리티를 생성하는 반면, 4는 블록 단위로 구현되어 스트라이프 단위가 커 작은 파일인 경우에는 하나의 디스크에서 읽어들일 수도 있다. 이것도 데이터 크기가 작고 동시다발적으로 일어나는 읽기 작업에서 좋은 성능을 낸다.
참고: RAID4

레이드 5 — 스트라이핑과 분산 패리티

  • 레이드 5는 패리티 정보를 모든 하드디스크에 나눠서 기록함으로써 패리티를 담당하는 디스크가 병목 현상을 일으키지 않는다.
  • 멀티프로세스 시스템과 같이 작고 빈번한 데이터 기록이 있을 경우 성능이 우수하지만 읽기만 할 경우 각 디스크에서 패리티 정보를 건너뛰어야 하기 때문에 레이드4보다 느리다. 용량당 비용은 레이드 4와 동일하다.
참고: RAID 5

 

 

blog migration project

written in 2023.3.13

https://medium.com/techblog-hayleyshim/os-%EC%84%9C%EB%B2%84-os-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-disk-4e2b430804b9

'IT > OS&Middleware' 카테고리의 다른 글

[os] 서버 OS 모니터링-Memory  (1) 2023.10.29
[os] 서버 OS 모니터링-CPU  (0) 2023.10.29
[os] eBPF  (0) 2023.10.29