최적화

최적화 요소

DRX의 최적화는 DRX가 제공하는 버퍼링과 압축 기능이 최적의 성능을 낼 수 있도록 DRX 내부 파라미터를 조절하거나 또는 시스템의 설정을 변경하는 것으로 수행합니다.

DRX가 낼 수 있는 버퍼링 성능은 10Gbps 네트워크에서 최대 6~7 Gbps 수준이며 압축 시 이 수치의 최소 1.5배 이상의 처리량을 보일 때 적절한 성능을 낸다고 볼 수 있습니다. 이러한 고성능 수치는 네트워크 대역이 충분할 때 측정 가능하며 보통의 WAN 구간에선 TX 네트워크 대역이 상당히 낮기 때문에 I/O 부하가 커지는 즉시 혼잡에 이르게 됩니다. 실제 운영 I/O 를 통해 최적화를 수행하기는 쉽지 않은 것 입니다. 이러한 상황을 감안하여 DRX에선 복제 I/O에 대한 적정한 수준의 시뮬레이션을 수행하는 drxsim을 별도 도구로 제공하고 있으며 drxsim 을 통해 복제 대역 상황을 미리 파악할 수 있게 합니다.

일반적으로 네트워크 대역은 iperf 와 같은 도구로 측정할 수 있으며 iperf 는 네트워크가 낼 수 있는 최대 대역을 산출합니다. drxsim은 로컬 drxsim에서 DRX로 I/O 부하를 주입시키고 WAN 구간으로 릴레이된 데이터를 원격 drxsim에서 수신하여 DRX가 네트워크에서 처리할 수 있는 순수한 처리량을 산출 합니다. drxsim에서 산출한 처리량이 iperf 의 수치와 비슷하거나 또는 drxsim 수치가 그 이상일 때(압축을 할 경우) DRX가 적절한 성능을 발휘한다고 할 수 있습니다. 반대로 drxsim의 수치가 iperf 수치에 비해 낮다면 DRX 설정에 조정이 필요하다고 판단할 수 있습니다.

이런 방식으로 WAN 구간의 대역 상황을 미리 파악함과 더불어 DRX의 기본 버퍼링 성능을 점검하고 그에 따라 DRX 버퍼의 적정한 크기를 산정하거나 압축 기능 도입 여부를 판단할 수 있습니다. drxsim의 자세한 사용방법은 drxsim 사용 가이드 의 내용을 참고하세요.

이상의 내용을 토대로 최적화의 요소는 다음으로 요약됩니다.

  • 복제 I/O 부하
  • 네트워크 대역
  • DRX 버퍼링
  • 압축

로컬 I/O 측면의 지연(latency), 처리량(throughput) 최적화는 복제 측면의 최적화로 다루어져야 합니다. 이에 대해선 BSR 최적화의 내용을 참고하십시요


성능지표

DRX의 성능지표는 CLI 명령들을 통해 확인 할 수 있습니다.

버퍼링 성능: memusage

버퍼의 사용량과 지연을 확인하는 명령어 입니다. 

  • 버퍼의 사용량과 지연을 통해 성능을 확인합니다.
    • 2.4 물리 메모리 사양 항목에서 계산으로 설정한 버퍼 사용량을 확인할 수 있습니다. 

    • 지연(Latency)값의 변동을 통해서 병목이 발생하는 상태를 확인할 수 있습니다. 
  • 출력 예시

    • Capacity: 리소스에 설정한 버퍼의 크기이며 단위는 KB 입니다. 
    • Use (Size): 버퍼 사용량과 (크기)입니다. Size의 단위는 KB 입니다. 
    • BAB Latency는 TX, RX, Compress, Decompress 항목에 대한 현재(cur), 평균(avg), 최대(max), 최소(min)값을 microseconds 단위로 출력합니다. 
      memusage
      < 일반 모드 >
      [root@c73-p1 drx]# drx-ctl mem all
      --------------------------------------------------------------------------------------
      Name                 Capacity Use (Size)                                  Full Counts 
      --------------------------------------------------------------------------------------
      DR-1-3-c73-p2-c73-p1 716800   [>>>>>>>.....................] 23% (163277) 0           
                           10240    [............................]  0% (0)      -           
      --------------------------------------------------------------------------------------
      DR-2-3-c73-p2-c73-p1 512000   [............................]  0% (0)      0           
                           10240    [............................]  0% (0)      -           
      --------------------------------------------------------------------------------------
       Active bab counts : 2
      
      <상세 모드>
      [root@c73-p1 drx]# drx-ctl mem all -v
      ----------------------------------------------------------------------------------------------------------
      Name                 Capacity Begin     End       Use (Size)                                  Full Counts 
      ----------------------------------------------------------------------------------------------------------
      DR-1-3-c73-p2-c73-p1 716800   340236152 504137496 [>>>>>>>.....................] 22% (160060) 0           
                           10240    0         0         [............................]  0% (0)      -           
      ----------------------------------------------------------------------------------------------------------
      DR-2-3-c73-p2-c73-p1 512000   64273922  64273922  [............................]  0% (0)      0           
                           10240    0         0         [............................]  0% (0)      -           
      ----------------------------------------------------------------------------------------------------------
       Active bab counts : 2
      ----------------------------------------------------------------------------------------------------------
      name                 Latency    cur             avg             max             min             
      ----------------------------------------------------------------------------------------------------------
      DR-1-3-c73-p2-c73-p1 TX BAB     00:00:00.000000 00:00:00.443516 00:00:06.765142 00:00:00.000101 
                           RX BAB     00:00:00.000000 00:00:00.000000 00:00:00.000000 00:00:00.000000 
                           Compress   00:00:00.000088 00:00:00.000087 00:00:00.001439 00:00:00.000001 
                           Decompress 00:00:00.000000 00:00:00.000000 00:00:00.000000 00:00:00.000000 
      ----------------------------------------------------------------------------------------------------------
      DR-2-3-c73-p2-c73-p1 TX BAB     00:00:00.000000 00:00:00.001627 00:00:00.004173 00:00:00.000261 
                           RX BAB     00:00:00.000000 00:00:00.000000 00:00:00.000000 00:00:00.000000 
                           Compress   00:00:00.000000 00:00:00.000113 00:00:00.001440 00:00:00.000001 
                           Decompress 00:00:00.000000 00:00:00.000000 00:00:00.000000 00:00:00.000000 
      ----------------------------------------------------------------------------------------------------------
       Active bab counts : 2
      [root@c73-p1 drx]#
      
      

압축 성능: statistics

DRX의 통계 정보를 확인하는 명령어입니다. 

  • 사용자 출력 모드인 filter옵션을 사용해서 압축 통계 정보를 확인합니다. 
    • 압축률의 평균(ratio)값으로 복제가 이루어지는 데이터의 압축 효율을 확인할 수 있습니다. 
    • 압축시 평균시간(cp-avg)과 압축 해제시 평균시간(dc-avg)으로 압축 성능을 확인할 수 있습니다. 
  • 사용한 명령어

    drx-ctl st all -v --filter=name,type,ratio,cur,best,worst,cp-avg,cp-cur,cp-min,cp-max,dc-avg,dc-cur,dc-min,dc-max
  • 출력 예시
    • 출력되는 단위는 KiloBytes입니다. 
    • 압축 ratio는 (압축전 사이즈 / 압축후 사이즈)로 계산되기 때문에 가독성을 위해서 소수점 둘째 자리까지 출력됩니다. 

    • compress(cp), decompress(de), encypto(ec), decrypto(dc)의 Latency 단위는 microseconds입니다. 
      statistics
      < 상세 모드 >
      [root@c69-1 bsr.d]# drx-ctl st all -v
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      name           type tx  rx t-raw t-net r-raw r-net ratio cur  best  worst cp-avg   cp-cur cp-min   cp-max   ec-avg ec-cur ec-min ec-max dc-avg dc-cur dc-min dc-max de-avg   de-cur de-min   de-max   
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      r0-c69-2-c69-1 data 184 0  13660 6821  0     1     1.93  0.00 18.07 1.00  0.000098 0      0.000001 0.013818 0      0      0      0      0      0      0      0      0.000189 0      0.000001 0.002338 
      r0-c69-2-c69-1 meta 0   0  
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       All connections : 2, Established : 2
      [root@c69-1 bsr.d]#
      
      
      < 사용자 출력 모드로 압축 항목만 출력 >
      [root@c69-1 bsr.d]# drx-ctl st all -v --filter=name,type,ratio,cur,best,worst,cp-avg,cp-cur,cp-min,cp-max,dc-avg,dc-cur,dc-min,dc-max
      -----------------------------------------------------------------------------------------------------------
      name           type ratio cur  best  worst cp-avg   cp-cur   cp-min   cp-max   dc-avg dc-cur dc-min dc-max 
      -----------------------------------------------------------------------------------------------------------
      r0-c69-2-c69-1 data 1.91  1.94 18.07 1.00  0.000088 0.000139 0.000001 0.013818 0      0      0      0      
      r0-c69-2-c69-1 meta 
      -----------------------------------------------------------------------------------------------------------
       All connections : 2, Established : 2
      [root@c69-1 bsr.d]#
      
      
    • 축약어 설명

      축약어설명축약어설명축약어설명
      txTX speedratiocompress average ratioecencrypto
      rxRX speedcurcompress current ratio dcdecrypto
      t-netTX-Network 전송 사이즈worstcompress worst ratio

      t-rawTX RAW 사이즈bestcompress best ratio

      r-netRX-Network 전송 사이즈cpcompress

      r-rawRX RAW 사이즈dedecompress

최적화 절차

최적화는 DRX의 BAB를 적절한 크기로 조정하고 압축을 위한 압축 인자를 조절하는 과정입니다.

버퍼(BAB) 크기

bsr 구성파일 내의 "proxy" 섹션에서 "memlimit"의 값으로 BAB의 크기를 설정합니다. 

proxy {
	memlimit 1G;
}


압축 종류 및 레벨

DRX에서 제공하는 압축 플러그인은 아래와 같습니다.

압축 종류
방식
압축률 설정 범위
ETC
ZLIBSW1~9-
LZ4SW1~9-
NONE--OFF

압축 플러그인을 설정하는 명령어는 아래와 같습니다. 

압축 타입명령출력 예시
ZLIB drx-ctl set compress zlib [level] [connect name] 
set compress
< 압축 플러그인을 ZLIB로 설정 >
[root@c73-1 bsr.d]# drx-ctl set compress zlib 1 r0-c73-2-c73-1
r0-c73-2-c73-1: updated.
Result: 1 resource(s) updated.

[root@c73-1 bsr.d]#

LZ4drx-ctl set compress lz4 [level] [connect name] 
set compress
< 압축 플러그인을 LZ4로 설정 >
[root@c73-1 bsr.d]# drx-ctl set compress lz4 1 r0-c73-2-c73-1
r0-c73-2-c73-1: updated.
Result: 1 resource(s) updated.

[root@c73-1 bsr.d]#

NONEdrx-ctl set compress none 0 [connect name] 
set compress
< 압축 플러그인을 OFF >
[root@c73-1 bsr.d]# drx-ctl set compress none 0 r0-c73-2-c73-1
r0-c73-2-c73-1: updated.
Result: 1 resource(s) updated.

[root@c73-1 bsr.d]#

패킷 Thread 

패킷 처리를 담당하는 Thread의 개수를 변경할 수 있습니다. 

Thread 개수는 설정 파일의 "process-thread-count"값으로 설정됩니다. 설정하지 않거나 "-1"로 설정하면 "auto"모드로 동작하며 CPU core개수의 1/2로 계산되어 입력됩니다. 

  • 명령어 
    process-thread-count
    < 설정 >
    [root@c73-1 bsr.d]# drx-ctl set process-thread-count 10
    Result: done.
    
    [root@c73-1 bsr.d]# 
    
    
    < 설정 확인 > 
    [root@c73-1 bsr.d]# drx-ctl show all
    ...(생략)...
    ip-verification=on
    process-thread-count=10
    
    [root@c73-1 bsr.d]#
    
    


기타

Linux Kernel Network Parameter

DRX 전용 어플라이언스의 경우 BSR과 연결되는 로컬 복제 I/O 수신 구간에 대해 최적화를 수행할 수 있습니다. DRX는 기본적으로 응용주소 공간에서 버퍼링을 수행하도록 되어 있어서 BSR과 직접 연결되는 네트워크에서 구간의 수신성능에 따라 버퍼링 성능 차이가 있을 수 있습니다. 이 수신 성능은 OS 커널 소켓의 수신버퍼를 조절하여 RX 성능이 더욱 상향되도록 조절할 수 있습니다. OS 커널의 수신버퍼를 충분히 확보할 수 있도록 아래와 같은 방법으로 적용할 수 있습니다. 아래의 max 2 MB 적용은 하나의 예시로, 사용자 환경에 맞게 적용할 것을 권장합니다.

sysctl을 이용해서 시스템 설정값을 변경하는 것에는 주의가 필요합니다. 설정이 지나치면 시스템 동작에 문제를 일으킬 수 있으므로 충분한 ��스트를 거친 후 적용해야 합니다.


  • TCP socket buffer size 변경