반응형

iSCSI에 대한 상세 설명

1. iSCSI란 무엇인가?

iSCSI(Internet Small Computer System Interface)는 SCSI 명령을 TCP/IP 네트워크를 통해 전송하여 원격 스토리지를 로컬 디스크처럼 사용할 수 있도록 하는 스토리지 프로토콜이다.

즉, 일반적인 NAS(Network Attached Storage) 방식(SMB, NFS)과 달리, 네트워크를 통해 원격 디스크를 직접 마운트하여 로컬 블록 스토리지처럼 동작하게 만드는 기술이다.

💡 쉽게 말해:

  • SMB/NFS → 파일 단위(File-Level) 공유
  • iSCSI → 블록 단위(Block-Level) 공유 (로컬 디스크처럼 동작)

📌 iSCSI의 주요 특징:

  1. TCP/IP 기반이므로 기존 네트워크 인프라(이더넷)를 활용할 수 있음.
  2. SCSI 명령어를 encapsulation(캡슐화)하여 네트워크로 전송.
  3. OS에서 로컬 디스크로 인식되므로, 일반 HDD/SSD와 동일한 방식으로 사용할 수 있음.
  4. 스토리지 프로토콜 중에서 가장 범용성이 높고, 네트워크 기반 SAN(Storage Area Network)에서 많이 사용됨.

✅ iSCSI는 과거 데이터센터에서 SAN(Storage Area Network) 구축 시 광채널(Fibre Channel)보다 저렴한 대안으로 많이 사용되었음.
✅ 현재도 고성능 NAS나 가상화 환경(VMware, Proxmox, Hyper-V)에서 블록 스토리지 공유 용도로 여전히 널리 활용됨.


2. iSCSI의 구조 및 동작 방식

iSCSI는 크게 두 가지 역할로 나뉜다.

  • iSCSI Initiator (클라이언트): iSCSI Target에 연결하여 원격 디스크를 마운트하는 장치 (예: Windows/Linux PC, Hypervisor)
  • iSCSI Target (서버): iSCSI Initiator에게 스토리지를 제공하는 장치 (예: TrueNAS, Windows Server, SAN 장비)

📌 iSCSI 데이터 전송 과정:

  1. iSCSI Initiator가 Target에 연결 요청을 보냄.
  2. TCP/IP 기반으로 SCSI 명령을 캡슐화하여 전송.
  3. iSCSI Target이 명령을 받아 원격 스토리지 블록을 제공.
  4. Initiator는 이를 로컬 디스크처럼 사용하며 파일 시스템(FAT, NTFS, EXT4 등)으로 마운트.

💡 결과적으로:
➡ 네트워크를 통해 원격 스토리지를 직접 로컬 디스크처럼 사용 가능
➡ 네트워크 레벨에서 동작하는 블록 스토리지 방식


3. iSCSI vs SMB vs NFS – 성능 및 비교

구분 iSCSI (블록 레벨) SMB (파일 레벨) NFS (파일 레벨)
사용 방식 OS에서 로컬 디스크처럼 인식 네트워크 공유 폴더 네트워크 공유 폴더
프로토콜 계층 블록 단위 I/O (SCSI) 파일 단위 I/O 파일 단위 I/O
속도 가장 빠름 (CPU 부하 적음) 상대적으로 느림 (파일 단위) 중간 (파일 단위)
지연시간 (Latency) 가장 낮음 (0.20.5ms) 상대적으로 높음 (~1ms 이상) 중간 (0.51ms)
CPU 사용량 낮음 (네트워크 처리만 필요) 중간 (파일 접근 권한, 메타데이터 처리) 높음 (파일 메타데이터 + 락 처리)
멀티유저 동시 접속 제한적 (1:1 연결) 다수 동시 접속 가능 다수 동시 접속 가능
장점 높은 성능, 낮은 지연시간, 로컬 디스크처럼 사용 가능 광범위한 호환성, Windows에서 기본 지원 Linux 환경에서 빠르고 효율적
단점 설정이 복잡함, 여러 클라이언트가 동일 디스크를 공유할 수 없음 파일 단위라 속도가 제한됨 SMB보다 설정이 어려움

 

📌 성능 측면에서 보면:
✅ iSCSI는 네트워크를 통해 SCSI 명령을 직접 처리하므로 파일 단위 공유 방식(SMB, NFS)보다 속도가 빠르고, I/O 지연이 적음.
✅ SMB와 NFS는 파일 단위 접근 방식이라, 메타데이터 처리, 파일 락킹 등으로 인해 오버헤드가 발생하여 성능이 낮아질 수 있음.

💡 결론:
SMB는 파일 공유에 적합
NFS는 리눅스 기반 서버에서 유용
iSCSI는 고성능 블록 스토리지가 필요할 때 가장 적합


4. PC방 노하드 시스템과 iSCSI – 왜 느릴까?

과거 PC방에서 iSCSI 기반 "노하드 시스템"이 널리 사용되었지만, 일반적으로 느린 성능을 보였음.

📌 노하드 시스템이 느렸던 이유:

  1. 저속 네트워크 사용 (1Gbps 환경이 일반적)
    • 1GbE(125MB/s)에서는 OS 부팅 및 게임 실행 시 병목 발생.
    • OS 부팅 시 수십~수백 개의 클라이언트가 동시에 I/O 요청을 보내면서 속도가 저하됨.
  2. 스토리지 성능 부족
    • 당시 사용된 SATA HDD나 SSD의 IOPS(입출력 성능)가 부족하여 병목 발생.
    • RAID 설정이 비효율적이거나 캐싱이 부족하여 성능 저하.
  3. 대규모 동시 요청 처리 어려움
    • iSCSI는 1:1 연결이 기본 구조이므로, 다수의 클라이언트가 동시에 접속하면 트래픽이 과부하됨.

💡 하지만 최근 10GbE 이상 환경에서는 iSCSI도 충분히 빠름.


5. iSCSI를 사용할 때 성능을 극대화하는 방법

iSCSI의 성능을 최대한 활용하려면 네트워크 및 스토리지 최적화가 필수다.

📌 최적화 방법:
10GbE 이상 네트워크 사용 (1GbE는 속도 병목 발생)
MTU 설정 (Jumbo Frame 활성화, 9000으로 설정)
Flow Control 비활성화, NIC에서 RSS/TSO 활성화
NVMe SSD 캐시 적용 (HDD는 속도 한계가 있음)
iSCSI LUN을 SSD RAID로 구성하여 성능 극대화
Direct Access Mode 사용 (Windows iSCSI Initiator 설정에서 설정 가능)

➡ 이렇게 설정하면 로컬 NVMe SSD에 가까운 성능을 제공할 수 있음.


6. 결론 – 현재도 iSCSI가 가장 빠른가?

파일 공유라면 SMB/NFS가 더 유용하지만, 블록 단위 스토리지 성능이 중요할 경우 iSCSI가 여전히 최적의 솔루션.
특히, 10GbE 이상 네트워크와 SSD 스토리지 환경에서는 iSCSI의 성능이 매우 뛰어남.
반면, 1GbE 환경에서는 SMB/NFS와 큰 차이가 없으며, 설정이 잘못되면 속도가 오히려 낮아질 수 있음.
과거 PC방 노하드 시스템이 느렸던 이유는 네트워크 및 스토리지 병목 때문이며, 현재의 10GbE + SSD 환경에서는 충분히 고속으로 동작 가능.

결론적으로, 현재도 고성능 네트워크 스토리지가 필요하다면 iSCSI는 SMB/NFS보다 빠른 선택지! 🚀

 

 

 

 

설명에 사용된 용어 정리 및 iSCSI 관련 추가 설명


1. MTU (Maximum Transmission Unit) 설정

  • MTU란?
    네트워크에서 **한 번에 전송할 수 있는 최대 패킷 크기(Byte 단위)**를 의미함.
    • 일반적으로 이더넷의 기본 MTU는 1500바이트로 설정됨.
    • iSCSI, SMB Direct, RDMA 등의 고속 데이터 전송에서는 MTU를 9000으로 설정하여 더 큰 패킷을 한 번에 전송할 수 있음.
  • MTU 설정의 효과:
    • MTU가 크면, 더 적은 패킷 수로 동일한 데이터를 전송할 수 있어 CPU 부하가 감소하고 속도가 향상됨.
    • 하지만, MTU 설정이 네트워크의 모든 장치에서 동일하게 적용되지 않으면 패킷 단편화(fragmentation)가 발생하여 성능이 오히려 저하될 수 있음.

📌 MTU 설정 방법 (Windows/Linux 예시)

# Linux에서 MTU 9000으로 설정
ip link set eth0 mtu 9000
# Windows에서 MTU 확인 및 설정
netsh interface ipv4 show subinterfaces
netsh interface ipv4 set subinterface "Ethernet" mtu=9000 store=persistent

2. Jumbo Frame

  • Jumbo Frame이란?
    • 기본적으로 이더넷 패킷은 1500바이트(MTU 1500)까지 전송할 수 있지만, Jumbo Frame을 활성화하면 최대 9000바이트까지 증가시킬 수 있음.
    • MTU가 9000이면, 패킷 크기가 커져서 한 번에 더 많은 데이터를 보낼 수 있음.
  • Jumbo Frame의 장점:
    • 패킷 수 감소 → CPU 부하 감소 → 네트워크 효율 증가
    • 대량의 데이터 전송(iSCSI, SMB, NFS, 10GbE 환경 등)에서 성능 향상
  • Jumbo Frame 사용 시 주의점:
    • 네트워크의 모든 장치(스위치, 라우터, 서버, 클라이언트)에서 동일한 설정이 필요함.
    • 하나라도 설정이 다르면 패킷 단편화(fragmentation) 문제가 발생하여 성능이 저하될 수 있음.

📌 Jumbo Frame 활성화 방법 (Windows 예시)

# 네트워크 인터페이스 MTU 9000으로 설정
netsh interface ipv4 set subinterface "Ethernet" mtu=9000 store=persistent

📌 Jumbo Frame 활성화 방법 (Linux 예시)

ip link set eth0 mtu 9000

3. Flow Control (흐름 제어, FC)

  • Flow Control이란?
    네트워크에서 송신 속도를 조절하여 수신 측이 데이터를 감당할 수 있도록 하는 기능.
    • 네트워크 트래픽이 과부하 상태가 되면 송신 측이 전송 속도를 줄이도록 제어함.
    • 일반적으로 스위치와 네트워크 카드(NIC)에서 활성화할 수 있음.
  • Flow Control의 문제점:
    • 대역폭이 큰 환경(10GbE 이상)에서는 Flow Control이 오히려 성능 저하를 유발할 수 있음.
    • iSCSI, SMB Direct 등의 고속 네트워크 환경에서는 Flow Control을 비활성화하는 것이 일반적임.

📌 Flow Control 비활성화 방법 (Windows 예시)

  1. 장치 관리자 → 네트워크 어댑터 → 속성
  2. 고급(Advanced) 탭 → "Flow Control"을 "Disabled"로 변경

📌 Flow Control 비활성화 방법 (Linux 예시)

ethtool -A eth0 rx off tx off

4. RSS (Receive Side Scaling) / TSO (TCP Segmentation Offload)

RSS (Receive Side Scaling):

  • 다중 CPU 코어를 활용하여 네트워크 트래픽을 병렬 처리하는 기술
  • 기본적으로 네트워크 트래픽은 단일 CPU 코어에서 처리되는데, RSS를 활성화하면 여러 코어에서 동시에 처리하여 성능을 높일 수 있음.

TSO (TCP Segmentation Offload):

  • 패킷을 작은 단위로 나누는 작업을 CPU가 아닌 네트워크 카드(NIC)에서 처리하도록 하는 기술
  • CPU 부하를 줄이고 네트워크 성능을 향상시킬 수 있음.

📌 RSS/TSO 활성화 방법 (Windows 예시)

  1. 장치 관리자 → 네트워크 어댑터 → 속성 → 고급(Advanced)
  2. "Receive Side Scaling" 옵션을 "Enabled"로 변경
  3. "TCP Segmentation Offload" 옵션을 "Enabled"로 변경

📌 RSS/TSO 활성화 방법 (Linux 예시)

ethtool -K eth0 rx on tx on tso on gso on

5. iSCSI LUN (Logical Unit Number)

  • iSCSI LUN이란?
    • iSCSI Target에서 클라이언트(Initiator)에게 제공하는 블록 스토리지 단위
    • 하나의 LUN은 하나의 논리적 디스크(Logical Volume)처럼 동작

📌 예제:

  • 10TB의 스토리지가 있는 iSCSI 서버에서,
    • 5TB를 LUN 1로 설정 → Windows 서버에서 사용
    • 3TB를 LUN 2로 설정 → Linux 서버에서 사용
    • 2TB를 LUN 3으로 설정 → VMware에서 사용

➡ 클라이언트 입장에서는 LUN이 하나의 독립적인 로컬 디스크처럼 보임.


6. iSCSI는 꼭 전용 용량을 할당해야 하나?

iSCSI는 기본적으로 "블록 스토리지"이므로, 반드시 특정 용량을 LUN으로 할당해야 함.
✅ 즉, NFS처럼 하나의 스토리지 전체를 공유하는 방식이 아님.

📌 차이점 비교:

구분 iSCSI (블록 스토리지) NFS (파일 스토리지)
데이터 접근 방식 블록 단위 (Raw Disk) 파일 단위 (Shared Folder)
사용 방식 OS에서 로컬 디스크처럼 마운트 네트워크 공유 폴더로 사용
멀티 클라이언트 지원 제한적 (1:1 연결이 기본) 다중 클라이언트 접근 가능
유연성 정해진 용량만큼 LUN 할당 필요 전체 스토리지를 공유 가능

 

➡ iSCSI는 블록 단위 접근이므로, 특정 용량을 LUN으로 할당해야 사용 가능.
➡ 반면, NFS는 스토리지 전체를 공유할 수 있으며, 여러 사용자가 동시에 접근 가능.

📌 iSCSI를 유연하게 사용하는 방법:

  1. Thin Provisioning 사용 → 필요할 때만 실제 공간을 차지하도록 설정
  2. LVM(Logical Volume Manager)과 조합하여 관리

결론

MTU & Jumbo Frame → 네트워크 패킷 크기 조절하여 성능 최적화
Flow Control 비활성화 → 고속 네트워크 환경에서 오버헤드 방지
RSS/TSO 활성화 → 네트워크 트래픽 처리 최적화
iSCSI LUN → 특정 용량을 할당하여 사용
iSCSI는 블록 단위 스토리지이므로, NFS처럼 전체 공유는 불가능

iSCSI는 성능이 뛰어나지만, 블록 스토리지 방식이라 반드시 용량을 지정해서 할당해야 함.
NFS처럼 자유롭게 공유하고 싶다면, 대신 SMB/NFS를 사용하는 것이 더 적절함.

반응형
블로그 이미지

우물 밖 개구리.

우물 밖 개구리의 블로그입니다.

,