Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

7.1. 최적화 요소

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

Table of Contents

최적화 요소

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

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

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

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

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

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

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

7.2. 성능지표

...

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


성능지표

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

...

버퍼링 성능: memusage

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

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

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

    • Capacity: 리소스에 설정한 BAB 사이즈이며 단위는 Kilobytes입니다버퍼의 크기이며 단위는 KB 입니다
    • Use (Size) 항목 : BAB 사용률과 Size입니다: 버퍼 사용량과 (크기)입니다. Size의 단위는 Kilobytes입니다KB 입니다
    • BAB Latency는 TX, RX, Compress, Decompress 항목에 대한 현재(cur), 평균(avg), 최대(max), 최소(min)값을 microseconds 단위로 출력합니다. 


      Code Block
      themeDJango
      titlememusage
      collapsetrue
      < 일반 모드 >
      [root@c73-p1 dgkimdrx]# 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 dgkimdrx]# 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 dgkimdrx]#
      
      

...


압축 성능: statistics

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

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

    Code Block
    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입니다. 


      Code Block
      themeDJango
      titlestatistics
      collapsetrue
      < 상세 모드 >
      [root@c69-1 drbdbsr.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 drbdbsr.d]#
      
      
      < 사용자 출력 모드로 압축 항목만 출력 >
      [root@c69-1 drbdbsr.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 
      ---------------------------------     0      
      r0-c69-2-c69-1 meta 
      --------------------------------------------------------------------------
       All connections : 2, Established : 2
      [root@c69-1 drbd.d]#
      
      

      축약어 설명

      축약어설명축약어설명축약어설명txTX speedratiocompress average ratioecencryptorxRX speedcurcompress current ratio dcdecryptot-netTX-Network 전송 사이즈worstcompress worst ratiot-rawTX RAW 사이즈bestcompress best ratior-netRX-Network 전송 사이즈cpcompressr-rawRX RAW 사이즈dedecompress

7.3. 최적화 절차

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

7.3.1 버퍼(BAB) 크기

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

Code Block
proxy {
	memlimit 1G;
}

7.3.2 압축 종류 및 레벨

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

...

압축 종류

...

방식

...

압축률 설정 범위

...

ETC

...

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

...

themeDJango
titleset compress
collapsetrue

...

    • ----------------------------------
       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의 크기를 설정합니다. 

Code Block
proxy {
	memlimit 1G;
}


압축 종류 및 레벨

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


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


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

압축 타입명령출력 예시
ZLIB drx-ctl set compress zlib [level] [connect name] 


Code Block
themeDJango
titleset compress
collapsetrue
< 압축 플러그인을 ZLIB로 설정 >
[root@c73-qat-1 drbdbsr.d]# drx-ctl set compress zlib 1 r0-c73-qat-2-c73-qat-1
r0-c73-qat-2-c73-qat-1: updated.
Result: 1 resource(s) updated.

[root@c73-qat-1 drbdbsr.d]#


LZ4drx-ctl set compress lz4 [level] [connect name] 


Code Block
themeDJango
titleset compress
collapsetrue
< 압축 플러그인을 LZ4로 설정 >
[root@c73-qat-1 drbdbsr.d]# drx-ctl set compress lz4 1 r0-c73-qat-2-c73-qat-1
r0-c73-qat-2-c73-qat-1: updated.
Result: 1 resource(s) updated.

[root@c73-qat-1 drbdbsr.d]#


NONEdrx-ctl set compress none 0 [connect name] 


Code Block
themeDJango
titleset compress
collapsetrue
< 압축 플러그인을 OFF >
[root@c73-qat-1 drbdbsr.d]# drx-ctl set compress none 0 r0-c73-qat-2-c73-qat-1
r0-c73-qat-2-c73-qat-1: updated.
Result: 1 resource(s) updated.

[root@c73-qat-1 drbdbsr.d]#

...



패킷 Thread 

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

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

...

/wiki/spaces/QA/pages/819396836 

...

"로 설정하면 "auto"모드로 동작하며 CPU core개수의 1/2로 계산되어 입력됩니다. 

  • 명령어 


    Code Block
    themeDJango
    titleprocess-thread-count
    collapsetrue
    < 설정 >
    [root@c73-qat-1 drbdbsr.d]# drx-ctl set process-thread-count 10
    Result: done.
    
    [root@c73-qat-1 drbdbsr.d]# 
    
    
    < 설정 확인 > 
    [root@c73-qat-1 drbdbsr.d]# drx-ctl show all
    ...(생략)...
    ip-verification=on
    process-thread-count=10
    
    [root@c73-qat-1 drbdbsr.d]#
    
    

...




기타

...

Linux Kernel Network Parameter

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

Info

sysctl을 이용해서 값을 변경하는 것은 시스템이 crash될 위험 요소가 있다는 것을 인지해야 합니다. 시스템에 무리한 값을 설정했을 경우 그 즉시 시스템이 멈출 수도 있기 때문에 충분한 테스트 후에 진행되야 합니다. 시스템 설정값을 변경하는 것에는 주의가 필요합니다. 설정이 지나치면 시스템 동작에 문제를 일으킬 수 있으므로 충분한 테스트를 거친 후 적용해야 합니다.


    환경 변수 MALLOC_ARENA_MAX 값을 설정하는 방법
    Code Block
    $> export MALLOC_ARENA_MAX=1 
    Info

    예제로 설정한 "1"은 절대값이 아니며 서버 및 환경에 따라서 다르게 설정되야 합니다. 

    고려 사항MALLOC_ARENA_MAX 값을 변경하면 VIRT 사용률을 줄여서 메모리풀을 확보하지만 CPU 사용률이 증가할 수 있습니다.
  • TCP socket buffer size 변경
    • 테스트에 사용한 서버 : Appendix D. Appliance Configuration Guide의 서버
    • 참고 문서 링크 참조https://www.ibm.com/support/knowledgecenter/en/SSZTET_10.1/smpi01/smpi01_tysfbpjp.htmlDefault : 208KBytes
      Code Block
      themeDJango
      [root@c73-qat-1 drbd.d]# sysctl -a | grep net.core.[rw]mem
      net.core.rmem_default = 212992
      net.core.rmem_max = 212992
      net.core.wmem_default = 212992
      net.core.wmem_max = 212992
      [root@c73-qat-1 drbd.d]#
      
      
      수정 명령어 : max만 2 MBytes로 변경합니다.
      Code Block
      themeDJango
      sysctl -w net.core.rmem_max="2097152"
      sysctl -w net.core.wmem_max="2097152" 
      Info

      설정한 값은 절대 수치가 아니며 서버 및 네트워크 환경에 따라서 성능 결과가 다를수 있습니다. 

7.4.2 VIRT 사용량 조정

VIRT는 프로세스가 사용하는 총 메모리양이며, 환경 변수 MALLOC_ARENA_MAX를 통해서 조정할 수 있습니다. 

Info

환경 변수 MALLOC_ARENA_MAX설정은 프로세스의 메모리풀을 조정하기 때문에 전체 시스템에 대한 영향이 있을 수 있습니다. 

충분한 테스트 후에 진행되야 합니다. 

    • /www.ibm.com/support/knowledgecenter/en/SSZTET_10.1/smpi01/smpi01_tysfbpjp.html
    • 기본 : 208KBytes


      Code Block
      themeDJango
      [root@c73-1 bsr.d]# sysctl -a | grep net.core.[rw]mem
      net.core.rmem_default = 212992
      net.core.rmem_max = 212992
      net.core.wmem_default = 212992
      net.core.wmem_max = 212992
      [root@c73-1 bsr.d]#
      
      


    • max 2 MB로 변경합니다.


      Code Block
      themeDJango
      sysctl -w net.core.rmem_max="2097152"
      sysctl -w net.core.wmem_max="2097152"