2009 년 10월자로 솔라리스 10의 업데이트 8 버전인 Solaris 10 10/09가 릴리즈 되었습니다. 현재 sun.com 사이트를 통하여 다운로드 가능하며 최근의 다른 업데이트들처럼 ZFS와 Container 를 중심으로 많은 기능들이 추가되었습니다. 또한 10G 이더넷 및 Infiniband와 같은 새로운 네트워크 장치에 대한 추가적인 지원들을 포함하고 있습니다. 차세대 네트워크 인터페이스를 사용하시거나 컨테이너를 사용하시는 분들은 이번 업데이트로 업그레이드하시거나 새로 설치하시는 것을 추천 드립니다. 아래 이번 업데이트의 주요 기능들을 정리해 보겠습니다.

주요 링크 :

Solaris 10 10/09 What's New 문서를 통해서 본 이번 업데이트의 상세한 내용입니다.


시스템 관리 기능 향상

  • 설치 및 부팅 디바이스로 2테라바이트 디스크 지원

기존의 릴리즈에서는 1TB 이상 크기의 디스크를 OS 디스크로 사용할 수 없었지만, Solaris 10 10/09 릴리즈부터 2TB이상 크기의 디스크를 설치 및 부트 디스크로 사용할 수 있습니다. 최근 SATA 디스크의 경우 최대 2TB에 달하는 대용량의 디스크들이 나오고 있는데, 기존에는 이들 디스크들을 데이터 디스크로만 사용할 수 있고 OS 디스크로는 사용할 수 없었습니다. 하지만 이번 릴리즈부터는 2TB 디스크들도 OS 디스크로 사용할 수 있게 되었습니다. 이는 이번 릴리즈부터 모든 용량의 디스크에 대하여 VTOC(Volume Table of Contents) label을 사용할 수 있도록 지원하게 되었기 때문인데요. 하지만 VTOC의 Addressable space가 2TB로 제한이 되어있기 때문에 2TB 이상 용량 이상의 디스크를 사용하여도 실제 가용 크기는 2TB로 제한이 됩니다.

  • pcitool 유틸리티

pcitool 툴은 시스템 관리자가 성능향상을 위하여 인터럽트를 특정 하드웨어 스트랜드에 바인드할 수 있습니다. 이 툴은 SUNWio-tools 패키지 내에 포함되어 있으며, 자세한 내용은 man 페이지를 통하여 확인할 수 있습니다.

ZFS 관련 기능 향상

  • Flash 인스톨의 ZFS 지원
Solaris 10 Update 6 이후 솔라리스 설치시 루트 파일시스템으로 ZFS를 선택하는 것을 지원하여 왔습니다. 하지만 네트워크를 통한 Jumpstart 설치는 지원하지 않고 있었는데요. 이번 Update 8부터는 ZFS root pool의 플래쉬 아카이브(Flash Archive)를 Jumpstart 프로파일(Profile)에서 인식할 수 있도록 지원함으로서 Jumpstart로부터 설치 시에도 ZFS 루트 파일 시스템으로 설치할 수 있습니다. Jumpstart 지원은 ZFS 파일시스템을 루트파일시스템으로 사용하는 사용자들의 큰 요구사항 가운데 하나였었는데, 이제는 솔라리스의 거의 모든 기능들이 ZFS 루트파일시스템을 지원하게 된 것 같습니다.
  • 사용자 및 그룹 쿼터 지원
기존에는 데이터셋에서 구성한 파일시스템 및 볼륨 단위로 용량을 제한(Quota)하고 사전할당(Reservation)할 수 있었는데,이번 릴리즈부터는 데이터셋에 대하여 사용자 및 그룹 단위로 용량 제한 및 사전할당을 지원합니다. 솔라리스의 자원관리(SRM, Solaris Resource Management) 기능을 통하지 않고도 아래처럼 간단하게 ZFS의 속성만을 부여함으로서 사용자 및 그룹 별 용량을 쉽게 제어할 수 있습니다.

# zfs set userquota@user1=5G tank/data
# zfs set groupquota@staff=10G tank/staff/admins


사용자, 그룹 별 용량 설정 정보를 조회하기 위해서는 아래와 같이 조회할 수 있습니다. 

# zfs get userquota@user1 tank/data
     NAME         PROPERTY VALUE SOURCE
tank/data  userquota@user1    5G  local

# zfs get groupquota@staff tank/staff/admins
             NAME         PROPERTY VALUE SOURCE
tank/staff/admins groupquota@staff   10G  local


  • 실행 권한에 대한 ZFS ACL의 선택적 상속 지원
ZFS에서는 데이터셋 내에서 디렉토리 및 파일이 생성될 때 ACL(Access Control List)의 상속에 대한 여부를 결정하기 위하여 discard | noallow | restricted | passthrough 네가지 옵션을 제공하고 있었습니다. 이 가운데 paththgough 옵션이 설정되어 있으면 생성되는 파일들이 dataset으로부터 모든 권한설정을 상속 받도록 되어 있었는데, 이번 릴리즈로부터는 실행비트에 대해서만 권한을 따로 상속받을 수 있도록 passthrough-x 옵션이 추가되었습니다. 데이터셋에 대하여 aclinherit=passthrough-x로 설정되어 있으면 하부 디렉토리에 새로 실행 파일이 생성될 때 실행권한만을 데이터셋으로부터 상속을 받으며 상속한 ACL에 실행권한이 없으면 chmod 등을 통해 따로 실행 권한을 부여하기 전까지는 실행할 수 없습니다.

  • ZFS 스토리지 풀 내 캐시 디바이스 지원
최근 스토리지 관련 기술 가운데 가장 핫이슈인 기술은 아마도 SSD(Solid State Drive)일 것입니다. 개인적으로 PC의 OS용 디스크로 SSD를 사용하고 있습니다만, 체감 속도로 볼 때 마치 신세계가 열리는 듯한 느낌일 정도로 뛰어난 성능을 보입니다. 이번 릴리즈부터는 ZFS 스토리지 풀 내에 cache 디바이스를 지정할 수 있는 기능을 제공하는데, cache 디바이스로 SSD를 사용하는 경우 '저비용으로' 스토리지 성능을 획기적으로 향상시킬 수 있습니다.

Cache 디바이스는 시스템 내에서 메인메모리와 하드디스크 사이에 존재하면서 메인메모리에 존재하는 데이터 캐시에 대해서 추가적인 캐시영역을 제공해 주는 것과 같은 역할을 합니다. 데이터 캐시는 속도가 느린 하드디스크로부터 시스템에서 자주 사용하는 데이터를 메모리 내에 저장함으로서 빠르게 억세스할 수 있도록 함으로서 데이터 I/O에 대한 성능을 향상시키는 역할을 하는데요. 메인메모리와 하드디스크 사이에 DRAM 메모리를 사용하는 경우에 비해 가격은 비교적 저렴하면서 더욱 큰 용량을 제공하는 SSD를 Level 2 캐시(L2ARC, L2 Adaptive Replacement Cache) 형태로 제공함으로서 캐시 영역을 크게 확장하는 것입니다. 이를 통해서 읽기 속도를 크게 향상시킬 수 있으며 하드디스크와 플래시 메모리의 읽기 특성의 차이로 인하여 Random Read에 있어서 더욱 크게 성능을 향상할 수 있습니다.

ZFS는 이미 ZIL(ZFS Intent Log) 기능을 제공하여 ZFS 스토리지 풀에 대해 쓰기 속도를 크게 향상시킬 수 있는 방안을 제공하고 있었는데요.  Write Cache로서 ZIL, Read Cache로서 L2ARC를 지원함으로써 '저렴한 비용'으로 뛰어난 성능의 대용량 스토리지 풀을 구성할 수 있도록 합니다. 

SSD 하면 뛰어난 성능을 제공하지만 가격이 비싼 것이 큰 단점인데 어떻게 '저렴한 비용'으로 성능과 용량을 제공할 수 있을까요? 그 방법을 제공하는 것이 바로 ZFS에서 제공하는 Hybrid Storage Pool입니다. 아래 실제 시스템에서 동일한 비용으로 'SAS 디스크만을 구성한 경우' vs. 'SSD와 SATA의 Hybrid Storage Pool을 구성한 경우' 두 경우를 비교해 보도록 하겠습니다.


- 'SAS 디스크' vs. 'SSD와 HDD의 Hybrid Storage Pool 조합'-


- Hybrid Storage Pool의 뛰어난 성능과 용량  -

Hybrid Storage Pool 을 구성한 쪽이 비용은 약 4% 밖에 더 들지 않았으면서 Read 성능은 거의 3배 이상, Write 성능은 10% 이상의 뛰어난 성능을 제공하면서 용량은 2배, 전력은 20% 밖에 소모하지 않는 것을 확인할 수 있습니다. 이는 ZFS에서 Hybrid Storage Pool을 구성하여 Read Cache 및 Write Cache로 SSD를 사용하여  뛰어난 성능을 제공하도록 하고, 저렴한 비용의 SATA  디스크를 사용하여 대용량을 제공할 수 있도록 하였기 때문입니다.

최근 서버 및 스토리지에 SSD 장착을 지원함에 따라 많은 분들이 SSD의 사용을 고려하고 있습니다만, 고가의 비용과 하드디스크에 비해 작은 용량 때문에 딜레마에 빠지는 경우가 많습니다. 이경우 ZFS의 Hybrid Storage Pool을 이용하여 부분적인 SSD 채택만으로도 전체 디스크 스토리지 풀에 대해서 SSD의 뛰어난 성능을 얻으면서도 스토리지 용량을 구성할 수 있어 아주 큰 장점이 있다고 할 수 있겠습니다.

OpenSolaris에서는 이미 ZFS log 디바이스 및 cache 디바이스 속성을 지원하고 있었는데 Solaris 10 또한 이번 릴리즈부터 cache 디바이스를 기능을 제공하며 사용은 다음과 같습니다.

# zpool create pool mirror c0t2d0 c0t4d0 cache c0t0d0
# zpool status pool
pool: pool
state: ONLINE
System Administration Enhancements
10 Solaris 10 10/09What's New • October 2009
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t2d0 ONLINE 0 0 0
c0t4d0 ONLINE 0 0 0
cache
c0t0d0 ONLINE 0 0 0
errors: No known data errors


  • zpool 속성 향상
  • zpool 생성시 zfs 속성 지정
zpool 생성시 옵션을 통해서 ZFS filesystem 속성을 지정하는 것이 가능해졌습니다. 예를 들어 아래는 풀 생성시 압축 속성을 on으로 지정하는 것입니다.

# zpool create -O compression=on pool mirror c0t1d0 c0t2d0


기존에는 zpool 커맨드 실행 후 zfs 커맨드를 추가로 실행하여야 하는 것을 명령어 한 번으로 실행할 수 있도록 하는 것입니다.

# zpool create pool mirror c0t1d0 c0t2d0
# zfs set compression=on pool


  • 캐시 데이터 컨트롤 기능
primary cache(ARC)와 secondary cache(ARC2)에 대하여 캐시되는 내용을 지정할 수 있습니다.

# zfs set primarycache=metadata tank/datab
# zfs create -o primarycache=metadata tank/newdatab


  • 데이터셋 용량  옵션
데이터셋의 용량에 대하여 다음과 같은 옵션을 제공하여 실제 용량이 어떻게 쓰였는지 상세한 정보를 제공합니다.

  • usedbychildren - child에 의하여 사용된 용량을 표시합니다.
  • usedbydataset - dataset 자체만에 의하여 사용된 용량을 포함합니다.
  • usedbyrefreservation - refreservation의 용량을 포함합니다. reservation은 최대값만을 지정하는 quota와 달리 미리 지정된 용량을 할당하는데 refreservation은 snapshot, clone 등을 제외한 dataset 자체만의 용량을 미리 할당한 크기를 이야기합니다.
  • usedbysnapshots - 스냅샷에 의해 사용된 용량들을 포함합니다. 단,이 용량이 해당 데이터셋에 달린 모든 snapshot들의 크기의 총합은 아닌데, 스냅샷은 copy-on-write에 따라 데이터의 비변동 부분은 데이터블록을 공유하기 때문입니다.

위 옵션 지원에 따라 zfs list 등에서 조회되는 used (사용)량 옵션은 used = usedbychildren + usedbydataset + usedbyrefreservation + usedbysnapshots 로 나뉘게 됩니다.

위 옵션들은 다음과 같이 조회해 볼 수 있습니다.

# zfs list -o space
NAME              AVAIL   USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
pool              33.2G    72K        0    21K             0       51K
rpool             27.0G  6.27G    20.5K    97K             0     6.27G
rpool/ROOT        27.0G  4.73G        0    21K             0     4.73G
rpool/ROOT/zfsBE  27.0G  4.73G    97.5M  4.63G             0         0
rpool/dump        27.0G  1.00G      16K  1.00G             0         0
rpool/export      27.0G    60K      16K    23K             0       21K
rpool/export/home 27.0G    21K        0    21K             0         0
rpool/swap        27.5G   553M        0  41.5M          512M         0

  • zfs list 디스플레이 변경

이번 릴리즈 버전부터는 #zfs list 커맨드 실행시 스냅샷은 기본으로 보이지 않습니다. #zfs list -t snapshot 커맨드를 통해 타입을 지정하여야 스냅샷들을 조회할 수 있습니다. 데이터셋 리스트를 조회할 때 스냅샷이 기본으로 디스플레이되면 한번에 보이는 리스트가 너무 많기 때문에 기본으로 보이지 않도록 한 것 같습니다. 리스트의 타입은 filesystem | snapshot | volume 등으로 '|'기호를 통해서 연결하여 조회할 수 있습니다.

개인적으로 OpenSolaris에서 이미지 업데이트 이후 ZFS 리스트 조회시 snapshot이 보이지 않도록 변경이 된 것을 보고 당황한 적이 있었는데 이번 업데이트로 인하여 많은 분들이 스냅샷 조회 시 당황하실 수 있을 것 같습니다. :D

  • ZFS log 디바이스 복구

ZIL 디바이스가 failure 시 FMA를 통해서 보고될 뿐 아니라 zpool status 커맨드를 통해서 Intent Log Failure를 파악할 수 있습니다. ZFS와 FMA 모두 Failure에 대한 복구방안을 제시합니다. Log Device에 대한 복구, 교체 등은 ZFS Aministration Guide의 Chapter 11. ZFS Troubleshooting and Data Recovery를 참고하시면 됩니다.

  • ZFS ACL Sets 사용

이번 릴리즈부터 NFSv4 스타일의 ACL 세트 사용을 지원합니다. ACL들을 각각 나열해서 지원하지 않고 세트를 한 번에 지정할 수 있습니다.

  • full_set = all permissions
  • modify_set = all permissions except write_acl and write_owner
  • read_set = read_data, read_attributes, read_xattr, and read_acl
  • write_set = write_data, append_data, write_attributes, and write_xattr

설치 기능 향상

  • Turbo-Charging SVR4 Packaging
Solaris 10 10/09 버전부터, SVR4 패키지 설치가 현저하게 빨라졌습니다. 이는 곧 OS설치, 업그레이드, 라이브 업그레이드, 존 설치 등의 속도가 매우 빨라진 것을 의미합니다. 제가 설치해본 바로는 OS 설치 시간이 20~50% 이상 (1/3~1/2 시간) 빨라진 것 같습니다.


자원관리 향상
  • Zones Parallel Patching
Solaris Container 기술은 업계에서 독보적인 운영체제 가상화 기술로 커널의 공유를 통하여 최소의 자원 사용만으로 가상머신이 제공해 주는 그 것과 같은 독립적인 어플리케이션 실행 공간을 제공해준다는 점에서 매우 훌륭한 기능입니다. Update 4의 IP Instance 및 ZULU(Zone Upgrade Live Upgrade), Update 6의 Update-on-Attach, Update 7의 ZFS-Container 결합 등 지속적인 컨테이너 기능 향상에 이어 이번 Update 8부터는 Zones Parallel Patching 기능을 제공합니다. 기존에 여러 개의 로컬 존(local zone)을 가지고 있는 글로벌 존(global zone)을 업데이트하게 되면 동일한 내용의 패치를 적용하기 위해 글로벌 존을 패치한 뒤 로컬 존들을 차례대로 패치를 하게 되서 상당한 시간이 소요되었습니다만, Parallel Patching을 통해서 글로벌 존 패치 시간 + α 의 시간만으로 신속하게 패치를 적용할 수 있습니다. 특히 이번 릴리즈에는 Turbo-Charging SVR4 Packaging 기술이 적용되어 로컬 존을 가진 시스템의 패치가 더욱 빨라지게 되었습니다.

  • PVIO Drives in Solaris 10 Guest Domains
이번 릴리즈부터는 xVM hypervisor를 위한 Solaris 10 게스트 운영체제용 PV(Para Virtualization) 드라이버가 포함되어 있습니다. (Update 7 버전을 위해서는 패치가 제공됩니다.) xVM hypervisor는 OpenSolaris에 IPS 패키지 형태로 설치 가능한 Xen 기반의 가상화 하이퍼바이저입니다. xVM hypervisor는 가상화 I/O의 성능향상을 위한 반가상화(PV, Para Virtualization) 기능을 제공하는데 네트워크 및 디스크 I/O에 대하여 하이퍼바이저가 가상 디바이스를 일일히 에뮬레이션 하지 않고 hypervisor에서 제공하는 채널을 통하여 Back-end Device Driver(호스트 측)와 Front-end Device Driver(게스트 측)가 통신하도록 함으로서 I/O의 에뮬레이션에 대한 오버헤드를 없앨 수 있도록 하는 것입니다. 이번 릴리즈에서는 Solaris 10을 위한 PV 드라이버를 기본으로 내장하고 있습니다.


장치 관리 기능 향상

  • iSCSI Initiator SMF Service
svc:/network/iscsi/initiator:default 라는 SMF 서비스가 새로 추가되어 iSCSI 디바이스의 사용을 제어합니다. 또한 이 서비스는 시스템 부팅시에 iSCSI 디바이스의 탐색과 열거(enumeration)를 제어합니다.
  • LSI 6180 Controller Support in Solaris MPxIO

LSI 6180 Controller를 사용하는 스토리지 디바이스에 대하여 MPxIO를 지원합니다.


시스템 성능 향상

  • Callout SubsystemScalability
  • 성능 및 확장성 향상
Mutex 경쟁을 최소화 하기 위한 CPU별 데이터 스트럭쳐
확장성 향상을 위한 CPU별 callout 처리
polling 오버헤드를 피하기 위한 이벤트 기반의 구현
  • 고해상도 타이머 지원
고해상도 타이머 사용을 통한 다수 API들의 지연(latency) 감소
poll(), nanosleep() 등 콜 지원
  • 시스템 관측성 향상
Comprehensive set of options for the MDB dcmd callout
NewMDB dcmd calloutid
New callout kstats

드라이버 향상

  • 10Gigabit Ethernet 성능 향상
  • nxge 10GbE 드라이버 향상
TCP receive 쓰루풋 성능이 40%(8 커넥션)에서 90%(32, 100, 400, 1000 커넥션) 이상 향상
TCP transmit 쓰루풋 성능이 80%(8 커넥션)에서 100%(다수 커넥션) 이상 향상
UDP transmit 쓰루풋 성능이 80%(64바이트 메시지)에서 160%(8K바이트 메시지) 이상 향상
  • x86시스템의 ixgbe 드라이버 향상
TCP transmit 쓰루풋 성능이 거의 100%(8 커넥션 이상) 이상 향상
TCP receive rate 성능이 10Gb line rate에 상당
UDP transmit 최대 쓰루풋 성능이 10Gb line rate 2배에 상당
Pingpong data rate가 메시지 크기가 64바이트에서 512바이트로 변화함에 다라 2배에서 3배 향상

위에서 보이는 드라이버 성능 향상으로 인하여 Solaris의 10Gb 이더넷은 10G 네트워크 회선 자체가 낼 수 있는 최적의 성능을 발휘하고 있습니다.

  • InfiniBand Feature Improvements
  • InfiniBandHost Channel Adapter (HCA) – Mellanox ConnectXHCA에 대한 인피니밴드 드라이버가 현저히 향상되었습니다. 인피티밴드가 DDR(Double Data Rate) 및 QDR(Quad Data Rate) 모두에서 동작하고 또한 솔라리스 FMA 프레임워크에 통합되었습니다.
  • InfiniBand Transport Framework (IBTF) – 솔라리스 내의 RDMA기반 인피니밴드 프로토콜 지원을 위하여 IBTF 구현이 향상되었습니다.
  • Internet Protocol over InfiniBand (IPoIB) – IPoIB 드라이버(ibd)가 향상되었습니다. 이번 릴리즈의 ibd는 UserDatagram(UD) 동작 모드 및 IPv4 and IPv6 Addressing 등을 지원하며 ConnectXHCA를 이용한 하드웨어 Offloading 기능을 지원하여 CPU의 부하를 절감할 수 있습니다. IPoIB-UD 기능은 DDR 및 QDR 모두에서 SSH, HTTP, FTP, NFS 및 iSCSI 등의 TCP/IP 프로토콜을 사용할 수 있도록 합니다. 이번 릴리즈의 ibd는 기존의 드라이버에 비해서 현저한 성능 향상이 있었습니다.
  • Sockets Direct Protocol (SDP) – SDP 드라이버 및 sockfs 구현의 성능 향상이 있었습니다. SDP는 TCP와 유사한 신뢰성 있는 바이트스트림 및 플로우컨트롤된 쌍방향 데이터 전송 기능을 제공하는 IBTF 상의 전송 프로토콜입니다. 인피니밴드 개발자는 libsdp C 라이브러리를 이용하여 SDP를 사용하게 되는데 SDP는 supports graceful close, IPv4 and IPv6 addressing, the connecting/accepting connect model, out-of-band (OOB) data 및 일반적인 소켓 옵션들을 제공합니다.
  • Reliable Datagram Sockets (RDS) – 이번 릴리즈는 Oracle RAC 10gR2에 인증된(Certified)향상된 RDSv1 드라이버를 지원합니다.

이번 포스트에서는 조금 늦었지만 Solaris 10 Update 8 10/09 버전의 새로운 기능들을 간략히 살펴보았습니다. 대개 위의 설명만으로도 충분히 파악할 수 있는 직관적인 기능들입니다만, ZFS라던지 Container 등에 있어서 그 동안에 사용자들이 꼭 필요로 하는 내용들을 충실하게 반영한 업데이트라 판단됩니다. 많은 사용자 분들이 시스템 및 이번 업데이트 버전을 점검하여 업그레이드를 적용하시면 좋겠습니다.


Comments:

Post a Comment:
  • HTML Syntax: NOT allowed

This blog copyright 2009 by Sangpill Kim