사용 및 관리

TDL을 사용하기 위해서는 TDL 환경설정을 반드시 해야 하며, 암시적 버전 보호 기능을 사용하려면 Tmax 환경설정을 해야 한다. 본 장에서는 각 환경설정 방법과 툴의 사용법에 대해서 설명한다.

1. 디렉터리 구성

TDL 디렉터리는 환경 파일을 위한 config 디렉터리, 업데이트할 라이브러리를 위한 mod 디렉터리, 업데이트된 라이브러리를 위한 run 디렉터리로 구성된다.

디렉터리 설명

config

TDL 환경 파일(tdl.cfg)을 위한 디렉터리이다. RACFILE 파라미터의 기본적인 위치 또한 config 디렉터리를 사용한다.

mod

업데이트할 라이브러리를 위한 디렉터리이다. 업데이트할 공유 라이브러리(*.so 또는 *.sl)를 mod 디렉터리에 복사한 후 tdlupdate를 수행해야 한다.

run

tdlupdate 후 버전이 부연된 라이브러리들을 위한 디렉터리이다. 이곳에는 시스템에서 내부적으로 사용하는 파일도 존재하므로 사용자가 임의로 삭제하면 안 된다.

${TDLDIR}은 TDL의 루트 경로로 특별히 지정하지 않을 경우 ${TMAXDIR} 환경변수에 설정된 경로를 사용한다. 만일 경로를 다르게 지정하려면 ${TDLDIR} 환경변수를 설정해야 한다. 또한, 로컬 클라이언트에서 TDL을 사용하려면 ${TDLDIR}을 반드시 지정해야 한다.

TDL 2.x 버전에서는 config가 아닌 $TDLDIR에 tdl.cfg가 존재해야 한다.

2. 환경설정

TDL을 사용하기 위해서 TDL 환경설정 파일과 Tmax에 TDL 관련 항목의 환경을 설정해야 한다.

환경설정의 기본적인 문법은 "파라미터=값"이고 라인 내에 공백은 허용되지 않는다. 또한 라인의 첫 번째 문자가 '#'인 경우 해당 라인은 주석 처리된다. 환경변수를 지원하며 포맷은 $site 형태이다. (예: LOGDIR=${TDLDIR}/log)

2.1. TDL 환경설정

TDL 환경설정 파일은 $TMAXDIR/config/tdl.cfg로 다음은 TDL 환경 파일의 예제와 항목에 대한 설명이다.

# shared memory version (1|2|3|4)
VERSION=2
# shared memory key
SHMKEY=0x90000
# shared memory and file creation permission
IPCPERM=0750
# number of dynamic loadable modules, rouded up to powers of 2
MAXMODULES=256
# shared memory backup
BACKUP=/home/tdl/tdl.bak
# path of a command file for searching export functions
#COMMAND=tdlcmd
# path of a log directory
LOGDIR=/home/tdl/log
# running mode (single|master|slave|shared)
MODE=single
# mornitoring statistics
MONITOR=Y
# crc check
BACKUPCRC=Y

# language of tdl application [C | COBOL | IBMCOBOL | PL1 | MIXED]
LANG=C
# path of a file including addresses for accessing remote tdl nodes
#RACFILE=tdl.rac
# tdl domain ID
DOMAINID=1
# multiple run, mod dir
#DIRMAPPINGLIST=(mod:run),(mod2:run2),(mod2:run2)
# HASHFUNC=[ LOOKUP2 | LOOKUP3 | SUPERFASTHASH | TDLHASH | MURMURHASH ]
#HASHFUNC=MURMURHASH
# Excluding global variables
CUSTOMCMD=Y
# copy method
#COPY=[ cp | mmap | self | dma ]
# tdl log name
#TDLNAME=REGION1
# compare to glosebal sequence number
GSEQNOTIME=Y

# shared mode with localrun
#MODE=shared
#MASTERNODENO=0
#NODELIST=node1,node2
#SMODDIR=${TDLDIR}/mod
#SRUNDIR=${TDLDIR}run<
#LRUNDIR=/home/tmax1/localrun
#KEEPEXT=asmo
#SHMKEY_SHARED=Y
항목 설명

VERSION

TDL 운영을 위한 버전을 설정한다. 1, 2, 3, 4 중 선택해야 한다. (기본값: 1)

자세한 내용은 VERSION 항목의 설명을 참고한다.

SHMKEY

TDL 운영에 사용되는 공유 메모리 키값을 설정한다.

IPCPERM

run 디렉터리의 동적 모듈 및 공유 메모리의 권한을 설정한다.

MAXMODULES

동적 모듈의 최대 개수이다. 2^n으로 올림되어 사용된다. 모듈의 재배치 없이 변경 가능하다. 자세한 내용은 예제를 참고한다.

BACKUP

공유 메모리 백업 파일을 지정한다.

tdlinit, tdlupdate를 실행할 때 자동으로 공유 메모리가 지정한 파일로 백업된다. 상대 경로일 경우 $TDLDIR 또는 $TMAXDIR에서 경로가 시작된다. 경로 정보의 $TDLDIR이 우선한다.

COMMAND

라이브러리에서 export할 함수를 자동 추출하기 위한 스크립트 파일의 위치를 지정한다.

상대 경로일 경우 $TDLDIR/config 또는 $TMAXDIR/config에서 경로가 시작된다. 경로 정보의 $TDLDIR이 우선한다.

LOGDIR

에러 및 정보 메시지 로깅 디렉터리를 지정한다.

로그 파일명은 "tdllog.mmddyyyy" 형식이다. 상대 경로일 경우 $TDLDIR 또는 $TMAXDIR에서 경로가 시작된다. 경로 정보의 $TDLDIR이 우선한다.

MODE

멀티 노드 혹은 도메인 환경에서 다음 중 하나를 설정한다.

  • master

  • slave

  • single (기본값)

  • shared

MONITOR

TDL 통계 정보를 수집할지 여부(Y|N)를 설정한다. (기본값: N )

  • Y : 모듈별 수행시간 AVG/MIN/MAX, CPU AVG/MIN/MAX가 수집되며, 'tdlshm –S' 옵션을 통해 조회할 수 있다.

다음의 명령어로 활성화해야 사용 가능하다.

tdlshm -s e

BACKUPCRC

crc check 기능의 활성화/비활성화 여부(Y|N)를 성정한다. (기본값 : Y)

tdlupdate 수행속도가 옵션을 활성화할 때 crc 계산으로 인해 느려질 수 있다.

'BACKUPCRC= Y’로 설정한 경우 다음과 같이 동작한다.

  • tdlinit, tdlupdate, tdlsync를 수행할 때 백업 파일에 crc 정보를 기록한다.

  • tdlinit -b, tdlshm -a|-b를 수행할 때 TDL의 hash table 정합성 체크 기능을 수행한다.

  • tdlinit -b, tdlshm -a|-b를 수행할 때 백업 파일의 crc check 기능을 수행한다.

  • tdlupdate을 수행할 때 백업 파일의 crc check는 성능적인 문제로 인해 수행하지 않는다.

LANG

TDL 애플리케이션이 사용하는 언어를 다음 중 선택하여 설정한다.

  • C

  • COBOL

  • IBMCOBOL

  • PL1

  • MIXED

선택하지 않을 경우에는 C로 설정되며, 모듈 확장자는 OS에 따라 결정된다.

RACFILE

멀티 노드 혹은 도메인 환경에서 모든 노드의 racd 주소를 가지고 있는 파일을 지정한다. 상대 경로일 경우 $TDLDIR/config 또는 $TMAXDIR/config에서 경로가 시작된다. 경로 정보의 $TDLDIR이 우선한다.

RACFILE에 대한 예는 RACFILE 예제를 참고한다.

DOMAINID

TDL 도메인에 대한 ID로 도메인마다 반드시 다르게 설정해야 한다.

(기본값: 0)

DIRMAPPINGLIST

run 디렉터리를 2개 이상 사용할 경우에 설정한다.

mod와 run 디렉터리의 쌍을 괄호와 콜론(:)으로 구분하여 최대 10쌍까지 설정할 수 있다. (Tmax 5 SP1 Fix#2부터 적용)

HASHFUNC

TDL에서 내부적(각 모듈의 인덱스 설정)으로 사용되는 HASH의 종류를 선택하여 설정할 수 있다. (Tmax 5 SP1 Fix#2부터 적용)

CUSTOMCMD

IBM 플랫폼 특성상 nm으로 전역 변수까지 검색이 된다.

'CUSTOMCMD = Y’로 설정한 경우 tdlinit, tdlupdate로 명령어를 수행하는 경우 전역변수를 등록하지 않는다.

COPY

tdlcall 내부적으로 수행하는 파일 복사 방식을 결정한다.

  • cp : /bin/cp를 이용하는 방법이다.

  • mmap : tdlcall 내부적으로 파일 복사를 memory map 방식으로 복사한다. 해당 기능을 사용할 수 있는 환경은 AIX, SUN, LINUX 플랫폼만 가능하며, HP 플랫폼은 불가능하다. (기본값)

  • self : cp와 유사하지만, tdlcall 내부적으로 파일 복사를 read/write 방식으로 복사한다.

  • DMA : sendfile()과 같은 zero copy 기능을 이용하여 파일을 복사한다. 현재 해당 기능을 사용할 수 있는 환경은 Linux(kernel 2.6.33이상), SUN 플랫폼만 가능하다.

TDLNAME

TDLNAME이 지정되어 있으면 로그를 출력할 때 'TDLNAME’이 접두어로 붙는다.

GSEQNOTIME

  • Y : 채번할 때 호출 시점의 시간을 가져온다. 무조건 Global Seqno를 채번하는 것이 아닌 tdlgetseqno() 호출 시점의 시간과 서로 비교하여 더 큰 번호를 채번해주도록 하는 기능이다.

  • N : 채번할 때 TDL의 Global Seqno를 가져온다. (기본값)

MASTERNODENO

멀티 노드 환경에서 마스터 노드의 번호 또는 노드명을 지정한다. 모든 노드의 환경설정 파일에 반드시 기입해야 한다. 이를 설정하면 마스터 노드가 아닌 노드에서도 tdlupdate가 수행 가능한다.

'MODE = SHARED’로 설정한 경우 반드시 설정해야 한다.

NODELIST

'MODE = SHARED’로 설정한 경우 동기화 대상의 노드를 선택적으로 지정하는 기능이다. 지정하지 않으면 기본적으로 Tmax 환경설정이나 racfile 설정파일에 정의된 모든 노드를 동기화 대상으로 한다. 환경설정에 정의된 노드명을 입력한다. 최대 100개의 노드까지 지정 가능하며 다수의 노드를 지정할 때는 콤마(,)로 구분한다.

  • tdlinit, tdlrm, tdlshm(-n옵션 미지정) 명령은 해당 옵션으로 지정된 노드에서만 수행이 가능하다. 그 외의 노드에서 수행하는 경우 에러로 처리된다.

  • tdlupdate, tdlclean 명령은 해당 옵션에 지정되지 않은 노드에서 실행 가능하며, 요청이 MASTERNODENO로 지정된 노드로 전달되어 대신 수행된다.

SMODDIR

mod 디렉터리 경로를 지정한다. 절대경로 및 상대경로를 지정할 수 있으며, 상대경로로 지정하는 경우 $TDLDIR를 기준으로 경로를 설정한다.

(기본값: $TDLDIR/mod 디렉터리)

SRUNDIR

run 디렉터리 경로를 지정한다. 절대경로 및 상대경로를 지정할 수 있으며, 상대경로로 지정하는 경우 $TDLDIR를 기준으로 경로를 설정한다.

(기본값: $TDLDIR/run 디렉터리)

LRUNDIR

local run 디렉터리 경로를 지정한다. 절대경로 및 상대경로를 지정할 수 있으며, 상대경로로 지정시 $TDLDIR 를 기준으로 경로를 설정한다. 설정하지 않으면 해당 기능을 사용하지 않는다.

tdlcall 명령을 호출하는 경우 SRUNDIR 디렉터리의 shared object가 아닌 LRUNDIR 경로에서 shared object를 load하여 프로그램을 호출한다.

tdlinit, tdlupdate, tdlclean 명령을 수행할 때 자동으로 SRUNDIR에서 LRUNDIR로 파일 복사를 수행한다. SRUNDIR과 LRUNDIR의 파일을 비교하여 파일 크기이나 마지막 수정 시간이 다른 경우에 파일 복사를 수행한다.

KEEPEXT

  • tdlinit를 수행할 때 SMODDIR 디렉터리에서 이 옵션에 설정된 확장자를 가지는 파일을 SRUNDIR 디렉터리로 복사할 수 있도록 허용한다.

  • tdlupdate를 수행할 때 -m 옵션에 확장자를 가지는 파일을 지정할 경우 다음과 같이 동작한다.

    • .so와 같은 shared object에 대해서는 기존과 동일하게 function symbol을 추출하여 공유 메모리에 등록한다.

    • KEEPEXT 옵션에 지정된 확장자를 가지는 파일은 symbol 체크 없이 파일만 SMODDIR 에서 SRUNDIR 으로 복사한다.

    • 그 외의 확장자를 가지는 경우 tdlupdate는 파일명 끝에 .so 확장자를 붙여서 shared object로 취급하여 등록한다.

      다음은 libtest.1.0.3.so 라이브러리를 등록 처리하는 예이다.

      tdlupdate -m libtest.1.0.3
  • tdlinit, tdlclean를 수행할 때 SRUNDIR 디렉터리의 불필요한 파일 삭제할 때 해당 확장자 파일은 삭제하지 않는다. 최대 100개까지 등록 가능하며 다수의 파일 확장자를 지정할 때는 콤마(,)로 구분한다.

SHMKEY_SHARED

SHMKEY_SHARED 기능 활성화 여부(Y|N)를 설정한다. Tmax를 논리 노드로 구성하는 경우 하나의 시스템에서 여러 노드가 존재할 수 있다.

'MODE = SHARED’로 설정한 경우 모든 노드가 동일한 설정 파일을 보기 때문에 SHMKEY를 한 시스템에서 중복 사용하는 문제가 발생한다. 이 옵션을 지정하면 각 노드는 SHMKEY 번호에 '자기 노드 번호 * 3’을 더해서 SHMKEY를 사용하게 된다. (기본값: N)

[주의 사항]

클라인언트 모듈에서 tdlcall() 함수를 호출할 때 이 옵션이 활성화되어 있으면, 자기 노드의 정확한 SHMKEY를 얻기 위해서 환경변수 TDL_CLI_NODENO 에 client가 속해있는 노드의 번호를 적절하게 입력해주어야 한다.

VERSION 항목

TDL에서는 현재 4가지 VERSION의 형태로 시스템을 운영할 수 있다. VERSION 값은 TDL 환경 파일(tdl.cfg)의 VERSION 파라미터를 통해서 설정할 수 있다.

  • VERSION 1

    VERSION=1로 설정하는 경우로, 라이브러리당 하나의 함수만을 가질 수 있다. 함수명 역시 라이브러리명과 일치해야 한다. 단, 함수명은 전체적으로 유일해야 한다.

  • VERSION 2

    VERSION=2로 설정하는 경우로, 라이브러리가 여러 개의 함수를 가질 수 있다.

    export할 함수에 대해서는 다음과 같은 방법을 지원한다. 단, 함수명은 전체적으로 유일해야 한다.

    • export 파일 지정 방법

      mod 디렉터리에 export 파일("라이브러리명.exp")을 두어 해당 라이브러리에서 export할 함수를 사용자가 명시한다. 자동 추출을 사용할 경우 의도하지 않은 함수들이 export될 수 있으므로 이 방식을 사용할 것을 권장한다.

      export 파일은 라인당 하나의 함수를 명시한다. 라인의 첫 번째 문자가 '#'인 경우는 그 라인을 주석으로 처리한다.

      사용 예는 다음과 같다.

      # mylibrary
      myfunction1
      myfunction2
      myfunction3
    • export 함수 자동 추출 방법

      export할 함수를 자동 추출한다. export 파일을 지정하지 않을 경우 함수는 자동 추출된다. 내부적으로 nm이 사용되며, 사용자가 nm 스크립트를 재정의할 수 있다. 스크립트는 반드시 하나의 라인으로 작성해야 한다. '#'이 라인 처음에 위치하면 그 라인을 주석으로 처리하며, '\'가 라인 마지막에 위치하면 다음 라인과 이어지는 것으로 처리한다. "$(LIB)"은 라이브러리명을 나타내는 매크로 변수이다.

      사용 예는 다음과 같다.

      # for HP32
      nm $(LIB) | awk -F"|" '{if ($3 == "extern" && $4 == "code   ")
       {print $1}}' | grep -ve "^_"
      
      # for HP64
      nm $(LIB) | awk -F"|" '{if ($4 == "FUNC " && $7 == "   .text")
      {print $8}}' | grep -ve "^_"
      
      # for IBM32
      nm $(LIB) | awk '{if ($2 == "D") {print $1}}'
      
      # for IBM64
      nm -X64 $(LIB) | awk '{if ($2 == "D") {print $1}}'
      
      # for SUN
      nm $(LIB) | awk -F"|" '{if ($4 == "FUNC ") {print $8}}' | grep -v "^_"
      
      # for linux
      nm $(LIB) | awk '{if ($2 == "T") {print $3}}' | grep -v "^_"
      
      (*단, 위 스크립트는 단지 예시일 뿐이며, 실제 플랫폼에 따라 수정이 필요함)

      위 스크립트는 TDL 환경 파일(tdl.cfg)의 COMMAND 파라미터를 사용하거나, 관리 툴에서 –x 옵션을 사용하여 이용할 수 있다. 또한, 시스템에서 자동 추출되는 함수에 대해서는 tdlnm을 통해서 미리 확인할 수 있다.

  • VERSION 3

    VERSION=3으로 설정하는 경우로 라이브러리명과 함수명을 키로 사용한다. 따라서, VERSION 1, 2와 달리 함수명은 라이브러리 내에서만 유일하면 된다. 단, VERSION 3을 사용할 경우, tdlcall2(), tdlcall2v(), tdlcall2s()를 사용해야 한다.

  • VERSION 4

    VERSION=4로 설정하는 경우로 라이브러리명과 클래스네임 네임스페이스를 사용한다. C++에서 사용하는 방식으로, tdlcall이 아닌 별도의 인터페이스를 이용한다. 자세한 내용은 예제를 참고한다.

RACFILE 예제

다음과 같이 설정된 파일을 ".rac" 확장자로 저장하고 RACFILE 항목에 해당 파일명을 설정한다.

hostname1 192.168.1.1 3333
hostname2 192.168.1.2 3333
hostname3 192.168.1.3 3333
환경변수 사용

변수명에는 적용이 불가하고, 변수의 값에만 지정이 가능하며, 다수의 환경변수도 지정이 가능하다. 다음과 같은 유형을 지정할 수 있다. 괄호 없이 사용하는 경우 ENV의 해석은 '문자열 + 숫자 + _ 문자열' 구성으로 한정한다. 괄호가 있으면 괄호 안의 문자열만 해석한다. ($ENV, $(ENV), $site)

  • 환경변수값

    $ENV = 'hello'
    $MY = 'of'
  • tdl.cfg 설정 예시 및 치환 결과

    OPTION=value1$ENV/value2/data$MY     ==> OPTION=value1hello/value2/dataof
    OPTION=value1$ENVvalue2/data$MY      ==> OPTION=value1/dataof
    OPTION=value1$(ENV)/value2/data${MY} ==> OPTION=value1hello/value2/dataof
    OPTION=value1$(ENV)value2/data${MY}  ==> OPTION=value1hellovalue2/dataof

2.2. TDL 환경변수

다음은 TDL 사용 시 설정 가능한 환경변수 목록이다.

항목 설명

TDL_ENABLE_DL_TIMER

디버그 라이브러리에서 tdlcall*, tdlload* 함수 호출 시 dlopen, dlsym, 모듈 호출에 대한 수행시간 측정 여부를 설정한다. (기본값: N)

  • 'Y': 수행시간을 측정하여 디버그 로그로 출력한다.

  • 디버그 라이브러리: libsvrd, libclid, libtdlcalld

2.3. Tmax 환경설정

암시적 버전 보호 기능을 사용하기 위해서는 DOMAIN 절 또는 NODE 절에 TDL 항목의 설정이 필요하다.

*DOMAIN
tmax ...,
         TDL = Y

*NODE
tmax1 ...,
         TDL = Y
  • DOMAIN 절

    항목 설명

    TDL

    TDL 암시적 버전 보호를 사용할 것인지 여부(Y|N)를 설정한다. (기본값: N)

  • NODE 절

    항목 설명

    TDL

    TDL 암시적 버전 보호를 사용할 것인지 여부(Y|N)를 설정한다. 설정되어 있지 않을 경우 DOMAIN 절의 TDL 값을 상속받는다.

3. 시스템 관리 툴

TDL에서는 다음과 같은 관리 툴을 제공한다. 관리 툴은 다음 경로에 위치한다.

$TMAXDIR/bin
명령어 설명

tdlinit

TDL 공유 메모리 및 동적 모듈 초기화를 수행한다.

tdlclean

run 디렉터리의 구버전 라이브러리 파일이나 불필요한 파일을 정리한다.

tdlnm

지정한 라이브러리에 대한 자동 export될 함수 목록을 조회한다.

tdlrm

TDL을 더 이상 사용하지 않을 경우에 공유 메모리를 완전히 제거한다.

tdlseqno

특정 모듈과 함수의 시퀀스 번호를 조회한다.

tdlshm

TDL 공유 메모리 정보를 조회하거나, 통계 모니터링 활성화 여부 및 모듈 활성화 여부를 설정한다.

tdlsync

TDL 공유 메모리와 백업 파일 동기화를 수행한다.

tdltrace

TDL 환경 설정 정보와 통계 정보를 조회한다.

tdlupdate

지정한 동적 모듈을 업데이트한다.

3.1. tdlinit

TDL 공유 메모리 및 동적 모듈을 초기화하는 명령어이다. tdlinit은 설치될 때 단 한 번만 수행하며 Tmax를 부팅하기 전에 수행해야 한다. 멀티 노드 환경인 경우 마스터 노드에서만 수행 가능하다.

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $ tdlinit [-p TDL 루트 디렉터리 경로] [-x export 함수 추출 스크립트 파일 경로] [-f] [-b]
              [-B 백업 파일 경로] [-i] [-v | -V] [-h]
    항목 설명

    [-p TDL 루트 디렉터리 경로]

    TDL 루트 디렉터리는 $TDLDIR 또는 $TMAXDIR을 사용한다.

    루트 경로를 별도로 지정해서 실행하는 경우 [-p] 옵션을 이용하여 경로를 지정할 수 있다.

    [-x export 함수 추출 스크립트 파일 경로]

    export 함수 추출을 위한 스크립트 파일 경로를 지정한다.

    [-f]

    공유 메모리가 이미 존재할 경우 강제로 초기화한다.

    [-b]

    백업 파일로부터 공유 메모리를 복구한다.

    [-B 백업 파일 경로]

    지정된 백업 파일로부터 공유 메모리를 복구한다.

    [-i]

    백업 복구 후 run 디렉터리를 체크한다. [-b] 또는 [-B] 옵션과 함께 사용한다.

    [-r]

    tdl 패치 적용 이후 백업 파일로부터 공유 메모리를 구성할 때 해시를 재구성한다. [-b] 또는 [-B] 옵션과 함께 사용해야 하며, 해당 옵션 없이 구성 시 오류가 발생할 수 있다.

    [-v | -V]

    버전 정보를 출력한다.

    [-h]

    사용법을 출력한다.

  • 예제

    • 다음은 TDL 환경 파일(tdl.cfg)을 참조하여 공유 메모리 및 모듈을 초기화하는 예제이다.

      $ tdlinit
    • 다음은 장비 장애 또는 재시작할 경우 백업 파일로부터 공유 메모리를 복구하는 예제이다.

      $ tdlinit -b
  • 참고

    VERSION=4로 설정한 경우에는 export 함수 추출을 위한 스크립트 파일이 반드시 필요하다.

    /* Example of exp file */
    /* dlib.exp */
    
    #! dlib.so
    TmaxSoft::Airplain
    Car

3.2. tdlclean

run 디렉터리의 구버전 라이브러리 파일이나 불필요한 파일을 정리하는 명령어이다. 특히, [-m] 옵션 또는 [-M] 옵션을 사용하면 공유 메모리에서 지정한 동적 모듈이 완전히 삭제된다.

tdlclean 명령어 실행 시 다음 사항에 유의해야 한다.

  • tdlclean을 사용할 때, 동일한 시간에 tdlupdate를 실행하면 run 디렉터리에 lock이 걸려 hang이 발생할 수 있다.

  • 현재 사용 중인 모듈에 대해 tdlclean -m을 실행하면 run 디렉터리 내 해당 모듈 파일이 삭제되지 않을 수 있다.

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $ tdlclean [-p TDL 루트 디렉터리 경로] [-m 라이브러리명] [-M 함수명] [-b]
               [-d yyyymmddhhmi] [-D “n hour|day” [-N 개수] [-v | -V] [-h]] [-f]
    항목 설명

    [-p TDL 루트 디렉터리 경로]

    TDL 루트 디렉터리는 $TDLDIR 또는 $TMAXDIR을 사용한다.

    루트 경로를 별도로 지정해서 실행하는 경우 [-p] 옵션을 이용하여 경로를 지정할 수 있다.

    [-m 라이브러리명]

    TDL 공유 메모리에서 지정한 라이브러리와 run 디렉터리에 파일을 삭제한다.

    [-M 함수명]

    공유 메모리에서 지정한 함수만 삭제하며, run 디렉터리의 관련 파일은 삭제하지 않는다. 단, VERSION=1로 설정된 경우는 [-m] 옵션과 동일하게 동작한다.

    [-b]

    TDL 환경 파일(tdl.cfg)에 BACKUP 파라미터가 지정되어 있더라도, 공유 메모리 파일 백업을 수행하지 않는다. [-m] 또는 [-M] 옵션과 함께 사용한다.

    [-d yyyymmddhhmi]

    지정한 시각(yyyymmddhhmi) 이전의 구버전 라이브러리 파일을 모두 삭제한다. [-m] 또는 [-M] 옵션과 함께 사용할 수 없다.

    [-D “n hour|day”]

    n은 시간(hour) 또는 일(day)을 설정한다. 지정한 시간 또는 일 이전의 구버전 라이브러리 파일을 모두 삭제한다. [-m] 또는 [-M] 옵션과 함께 사용할 수 없다.

    [-N 개수]

    지정한 개수(number)만큼의 구버전 라이브러리 파일을 남기고 나머지 구버전 파일을 모두 삭제한다. [-m] 또는 [-M] 옵션과 함께 사용할 수 없다.

    [-v | -V]

    버전 정보를 출력한다.

    [-h]

    사용법을 출력한다.

    [-f]

    run에 있는 라이브러리 정보를 힙 메모리에 모두 등록한 후 한번에 TDL 공유 메모리에 있는 최신 라이브러리의 함수들과 비교한다.

    [-f] 옵션 사용으로 성능향상을 기대할 수 있다. [-N], [-m], [-M] 옵션과 함께 사용할 수 없다.

  • 예제

    • 다음은 구버전 라이브러리 파일을 삭제하는 예제이다.

      $ tdlclean
    • 다음은 2009년 2월 1일 00시 00분 이전의 구버전 라이브러리 파일을 삭제하는 예제이다.

      $ tdlclean –d 200902010000
    • 다음은 5일 이전의 구버전 라이브러리 파일을 삭제하는 예제이다.

      $ tdlclean -D "5 day"
    • 다음은 mylibrary를 TDL 공유 메모리에서 완전히 제거하고 구버전 파일들도 삭제하는 예제이다.

      $ tdlclean -m mylibrary

3.3. tdlnm

VERSION=2 이상에서 지정한 라이브러리에 대한 자동 export될 함수 목록을 조회하는 명령어이다.

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $ tdlnm [-p TDL 루트 디렉터리 경로] [-x export 함수 추출 스크립트 파일 경로]
            [-m 라이브러리명] [-v | -V] [-h]
    항목 설명

    [-p TDL 루트 디렉터리 경로]

    TDL 루트 디렉터리는 $TDLDIR 또는 $TMAXDIR을 사용한다.

    루트 경로를 별도로 지정해서 실행하는 경우 [-p] 옵션을 이용하여 경로를 지정할 수 있다.

    [-x export 함수 추출 스크립트 파일 경로]

    export 함수 추출을 위한 스크립트 파일 경로를 지정한다.

    [-m 라이브러리명]

    자동 export 함수 목록 조회를 위한 라이브러리명을 지정한다.

    [-v|-V]

    버전 정보를 출력한다.

    [-h]

    사용법을 출력한다.

  • 예제

    다음은 mylibrary 파일의 export 함수 목록을 조회하는 예제이다.

    $ tdlnm -m mylibrary

3.4. tdlrm

TDL을 더 이상 사용하지 않을 경우에 공유 메모리를 완전히 제거하기 위한 명령어이다. tdlrm을 할 경우 tdlcall()을 사용할 수 없다.

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $ tdlrm [-p TDL 루트 디렉터리 경로] [-v | -V] [-h]
    항목 설명

    [-p TDL 루트 디렉터리 경로]

    TDL 루트 디렉터리는 $TDLDIR 또는 $TMAXDIR을 사용한다.

    루트 경로를 별도로 지정해서 실행하는 경우 [-p] 옵션을 이용하여 경로를 지정할 수 있다.

    [-v|-V]

    버전 정보를 출력한다.

    [-h]

    사용법을 출력한다.

  • 예제

    다음은 TDL 공유 메모리를 삭제하는 예제이다.

    $ tdlrm

3.5. tdlseqno

특정 모듈과 함수의 시퀀스 번호를 조회한다.

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $ tdlseqno [-m 라이브러리명|-M 함수명[-p TDL 루트 디렉터리 경로]] [-V] [-h]
    항목 설명

    [-p TDL 루트 디렉터리 경로]

    TDL 루트 디렉터리는 $TDLDIR 또는 $TMAXDIR을 사용한다.

    루트 경로를 별도로 지정해서 실행하는 경우 [-p] 옵션을 이용하여 경로를 지정할 수 있다.

    [-m 라이브러리명]

    해당 라이브러리 이름을 지정한다.

    [-M 함수명]

    해당 함수 이름을 지정한다.

    [-V]

    버전 정보를 출력한다.

    [-h]

    사용법을 출력한다.

  • 예제

    • $TDLDIR 또는 $TMAXDIR의 해당 모듈과 함수의 시퀀스 번호를 조회하는 예제이다.

      $ tdlseqno -m library1 -M module1
    • 특정 디렉터리 아래의 해당 모듈과 함수의 시퀀스 번호를 조회하는 예제이다.

      $ tdlseqno -m library1 -M module1 -p dirname

3.6. tdlshm

TDL 공유 메모리 정보를 조회하거나, 통계 모니터링 활성화 여부 및 모듈 활성화 여부를 설정하는 명령어이다.

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $ tdlshm [-p TDL 루트 디렉터리 경로] [-r] [-S] [-n 노드명] [-m 라이브러리명]
             [-M 함수명] [-C] [-c start_index end_index] [-s e|d|r]
             [-u e|d] [-I mincol] [-v | -V] [-b] [-B 백업 파일 경로] [-a] [-h]
    항목 설명

    [-p TDL 루트 디렉터리 경로]

    TDL 루트 디렉터리는 $TDLDIR 또는 $TMAXDIR을 사용한다.

    루트 경로를 별도로 지정해서 실행하는 경우 [-p] 옵션을 이용하여 경로를 지정할 수 있다.

    [-r]

    멀티 노드 환경에서 업데이트 동기화 중인 모듈 정보를 조회한다.

    [-S]

    동적 모듈 통계 정보를 조회한다. 통계 정보는 각 모듈별 수행시간 AVG/MIN/MAX와 CPU AVG/MIN/MAX가 조회된다.

    [-n 노드명]

    멀티 노드 환경에서 조회할 노드를 지정한다.

    [-m 라이브러리명]

    조회할 라이브러리명을 지정한다.

    [-M 함수명]

    조회할 함수명을 지정한다.

    [-C]

    전체 모듈에 대해 dlopen, dlsym을 수행한다.

    [-c start_index end_index]

    지정한 인덱스 범위의 모듈에 대해 dlopen, dlsym을 수행한다.

    [-s e|d|r]

    동적 모듈 통계 수집을 설정한다.

    • e : 활성화

    • d : 비활성화

    • r : 초기화

    [-u e|d]

    동적 모듈을 설정한다.

    • e : 활성화

    • d : 비활성화

    한 번에 하나의 모듈만 설정 가능하므로, 반드시 [-m] 또는 [-M] 옵션을 함께 사용해야 한다.

    • VERSION=1, VERSION=2인 경우 모듈은 전체 라이브러리에서 유일함으로 보장해야 하기 때문에 [-M] 옵션만 지정한다. 함수명이 전체적으로 유일해야 한다.

    • VERSION=3이고 라이브러리가 다를 경우 함수명은 중복되어도 상관없기 때문에 [-M] 옵션과 [-m] 옵션은 반드시 입력해야 한다. [-M] 옵션 없이 [-m] 옵션만 사용해서는 안된다.

    [-I mincol] (대문자 i)

    각 모듈들에 대해서 hash collision 발생하는 경우 모듈 이름 비교 횟수를 ", Collision=n"의 형식으로 덧붙여 표시한다. n의 값이 0이면 한 번의 비교로 검색이 완료된 것을 의미한다.

    mincol은 비교 횟수의 최소값으로 0 이상의 값을 지정해야 한다. 각 모듈을 출력하는 경우 비교 횟수가 지정한 값 이상인 경우에만 해당 모듈의 정보를 출력한다. 큰 값을 입력하면 비교 횟수가 큰 함수를 빠르게 찾을 수 있다. [-m], [-M], [-r], [-p] 옵션들을 함께 사용할 수 있다.

    [-v | -V]

    버전 정보를 출력한다.

    [-b]

    공유 메모리에 저장된 정보를 출력하지 않고, TDL 환경 파일(tdl.cfg)에 BACKUP 파라미터에 정의된 파일의 정보를 출력한다.

    [-B 백업 파일 경로]

    공유 메모리에 저장된 정보를 출력하지 않고, 옵션으로 지정한 백업 파일의 정보를 출력한다.

    [-a]

    TDL 환경 파일(tdl.cfg)에 BACKUP 파라미터에 정의된 파일과 공유 메모리의 정보를 비교하여 다른 부분이 발생하면 출력한다.

    [-B 백업 파일 경로]와 함께 사용하는 경우 지정한 파일과 공유 메모리의 정보를 비교하여 다른 부분이 발생하면 출력한다. 비교할 때 동일하다면 마지막 라인에 SUCCESS를 출력하고, 동일하지 않다면 다른 부분에 대한 정보와 다른 부분에 대한 개수(header 개수, module 개수, index 개수)를 출력한다.

    [-h]

    사용법을 출력한다.

  • 예제

    • 다음은 기본적인 tdlshm 사용 예이다.

      $ tdlshm TDLNAME = REGION1
      - TDLDIR = /home/jeffry/tmax LOGDIR = /home/jeffry/tmax/log/dlog
      - BACKUP = /home/jeffry/tmax/log/dlog/tdl.bak VERSION = 2, SHMKEY = 0x90000,
      - IPCPERM = 0750 MAXMODULES = 256, CURMODULES = 3, Global SEQNO = 45e27d28,
      - MONITOR = Y MODE = SINGLE, DOMAINID = 1 Index = 125, Funcname = myfunction1,
      - Libname = myfunction1, Seqno = 45e27d28, Active = Y Index = 126,
      - Funcname = myfunction2, Libname = myfunction2, Seqno = 45e27d28, Active = Y,
      - Index = 127, Funcname = myfunction3, Libname = myfunction3, Seqno = 45e27d28,
       Active = Y
    • 다음은 TDL 통계 정보 조회를 위한 사용 예이다.

      $ tdlshm -S TDLNAME = REGION1
      - TDLDIR = /home/jeffry/tmax LOGDIR = /home/jeffry/tmax/log/dlog
      - BACKUP = /home/jeffry/tmax/log/dlog/tdl.bak VERSION = 2, SHMKEY = 0x90000,
      - IPCPERM = 0750 MAXMODULES = 256, CURMODULES = 3, Global SEQNO = 45e27d28,
      - MONITOR = Y MODE = SINGLE, DOMAINID = 1 Index = 125, Funcname = myfunction1,
      - Libname = myfunction1, Seqno = 45e27d28, Active = Y Count = 0 SVC: Avg = 0.000,
      - MinTime = 0.000, Maxtime = 0.000 CPU: Avg = 0.000, MinTime = 0.000,
      - Maxtime = 0.000 Index = 126, Funcname = myfunction2, Libname = myfunction2,
      - Seqno = 45e27d28, Active = Y Count = 0 SVC: Avg = 0.000, MinTime = 0.000,
      - Maxtime = 0.000 CPU: Avg = 0.000, MinTime = 0.000, Maxtime = 0.000 Index = 127,
      - Funcname = myfunction3, Libname = myfunction3, Seqno = 45e27d28, Active = Y,
      - Count = 0 SVC: Avg = 0.000, MinTime = 0.000, Maxtime = 0.000 CPU: Avg = 0.000,
      - MinTime = 0.000, Maxtime = 0.000
    • 다음은 [-s] 또는 [-u] 옵션 사용 예이다.

      $ tdlshm -s r
      $ tdlshm -s e
      $ tdlshm -s d
      
      # VERSION=1|2
      $ tdlshm -u e -M myfunction
      $ tdlshm -u d -M myfunction
      
      # VERSION=3
      $ tdlshm -u e -m mylibrary -M myfunction
      $ tdlshm -u d -m mylibrary -M myfunction
    • 다음은 [-C] 또는 [-c] 옵션 사용 예이다.

      $ tdlshm -C
      $ tdlshm -c 0 1024
      $ tdlshm -c 1024

3.7. tdlsync

TDL 공유 메모리와 백업 파일 동기화를 수행하는 명령어이다. 자동 백업을 사용하지 않을 경우 필요한 관리 툴이다.

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $ tdlsync [-p TDL 루트 디렉터리 경로] [-B 백업 파일 경로] [-v | -V] [-h]
    항목 설명

    [-p TDL 루트 디렉터리 경로]

    TDL 루트 디렉터리는 $TDLDIR 또는 $TMAXDIR을 사용한다.

    루트 경로를 별도로 지정해서 실행하는 경우 [-p] 옵션을 이용하여 경로를 지정할 수 있다.

    [-B 백업 파일 경로]

    백업 파일 경로를 지정한다.

    [-v|-V]

    버전 정보를 출력한다.

    [-h]

    사용법을 출력한다.

  • 예제

    다음은 TDL 환경 파일(tdl.cfg)의 BACKUP 파라미터에 지정된 파일로 공유 메모리를 백업하는 예제이다.

    $ tdlsync

3.8. tdltrace

TDL 환경 설정 정보와 통계 정보를 조회한다.

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $ tdltrace [-p 디렉터리 경로] [-P PID] [-V] [-h] [-c]
    항목 설명

    [-p 디렉터리 경로]

    TDL 루트 디렉터리는 $TDLDIR 또는 $TMAXDIR을 사용한다. 루트 경로를 별도로 지정해서 실행하는 경우 [-p] 옵션을 이용하여 경로를 지정할 수 있다.

    [-P PID]

    특정 서버 프로세스의 정보를 조회한다.

    [-V]

    버전 정보를 출력한다.

    [-h]

    사용법을 출력한다.

    [-c]

    좀비 프로세스를 찾고 이와 관련된 정보를 지운다.

  • 예제

    $ tdltrace
    $ tdltrace -P 20113
    $ tdltrace -P 20113 -p dirname
    $ tdltrace -c

3.9. tdlupdate

지정한 동적 모듈을 업데이트하는 명령어이다. [-m] 옵션으로 라이브러리명을 반드시 지정해야 한다. 지정한 라이브러리가 이미 등록되어 있을 경우는 지정한 라이브러리를 업데이트하며 아직 등록되어 있지 않을 경우 새로 추가한다. 멀티 노드 환경인 경우 마스터, 슬레이브 노드에서 수행 가능하다.

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $ tdlupdate [-p TDL 루트 디렉터리 경로] [-r 디렉터리 경로]
                [-x export 함수 추출 스크립트 파일 경로] [-f] [-m 라이브러리명] [-b]
                [-c] [-l 파일명] [-i] [-Q seqno] [-C [cp | mmap | self]] [-e] [-N] [-v|-V] [-h]
    항목 설명

    [-p TDL 루트 디렉터리 경로]

    TDL 루트 디렉터리는 $TDLDIR 또는 $TMAXDIR을 사용한다.

    루트 경로를 별도로 지정해서 실행하는 경우 [-p] 옵션을 사용하여 경로를 지정할 수 있다.

    [-r 디렉터리 경로]

    tdlupdate를 실행 할 원격 노드의 TDLDIR을 지정한다.

    [-p] 옵션을 사용할 경우 두 개 이상의 TDL 루트 디렉터리를 가지게 되는데 이를 지정하는 용도로 사용한다.

    [-x export 함수 추출 스크립트 파일 경로]

    export 함수 추출을 위한 스크립트 파일 경로를 지정한다.

    [-f]

    VERSION=2에서 다른 라이브러리에 함수명이 이미 존재하더라도 강제로 업데이트한다.

    [-m 라이브러리명]

    업데이트할 라이브러리명을 지정한다. 여러 개의 모듈을 업데이트 시 구분자는 콤마(,)이며, 공백 없이 쉼표로 구분해 작성해야 한다.

    라이브러리 수와 각 라이브러리에 등록된 함수 수에는 제한이 없으나, TDL 멀티 노드 환경에서는 각 라이브러리에 등록된 함수 수가 총 1024개를 초과할 수 없다.

    [-b]

    TDL 환경 파일(tdl.cfg)에 BACKUP 파라미터가 지정되어 있더라도, 공유 메모리 파일 백업을 수행하지 않는다.

    [-c]

    멀티 노드 환경에서 노드 사이 버전 동기화를 수행한다.

    [-l 파일명]

    업데이트할 라이브러리 목록을 파일에 작성하여 업데이트를 수행한다. 전체 파일을 검사해 이상이 없을 경우에만 업데이트가 진행되며, 문제가 발생되면 롤백된다. 라이브러리 이름은 콤마(,) 또는 줄바꿈(Enter)으로 구분하여 나열할 수 있다.

    파일 내에 명시할 수 있는 라이브러리 수와 각 라이브러리에 등록된 함수 수에는 제한이 없으나, TDL 멀티 노드 환경에서는 각 라이브러리에 등록된 함수 수가 총 1024개를 초과할 수 없다.

    [-i]

    반영해야 하는 대상 파일이 존재하지 않더라도 중단하지 않고 계속 다음 파일을 update한다.

    [-Q seqno]

    현재 시간이 아닌 강제로 부여한 seqno를 사용한다.

    [-C [cp|mmap|self]]

    TDL 환경 파일(tdl.cfg)에 COPY 파라미터 설정보다 우선하여 파일 복사 방법을 변경한다.

    • cp

    • mmap

    • self

    [-e]

    멀티 노드(MODE=SHARED) 환경에서 일부 노드의 tdlupdate가 실패할 경우 에러 코드를 반환한다.

    옵션을 설정하지 않으면 일부 노드에서 tdlupdate가 실패하더라도 마스터 노드는 성공 리턴값(0)을 반환한다.

    [-N]

    멀티 노드(MODE=SHARED) 환경에서 tdlupdate 대상 모듈만 동기화된다.

    옵션을 설정하지 않으면 SRUNDIR에 등록된 모든 모듈이 LRUNDIR과 동기화되며, 이로 인해 전체 동기화에 따른 시간이 소요될 수 있다.

    멀티 노드(MODE=SHARED) 환경에서 안정적인 동기화를 위해 -N 옵션은 사용하지 않는 것이 좋다. 동기화 관련 문제가 발생한 경우에는 부하가 적은 시간대에 tdlupdate -c 옵션을 사용하여 전체 동기화를 수행할 것을 권장한다.

    [-v|-V]

    버전 정보를 출력한다.

    [-h]

    사용법을 출력한다.

  • 예제

    • 다음은 <mylibrary.so> 파일을 업데이트하는 예제이다.

      $ tdlupdate -m mylibrary
    • 다음은 여러 개의 모듈을 업데이트하는 예제이다. 구분자는 콤마(,)이며, 공백 없이 작성해야 한다.

      $ tdlupdate -m mylibrary,mylibrary2,mylibrary3
    • 다음은 업데이트할 목록을 파일로 작성하여 업데이트를 수행하는 예제이다.

      $ tdlupdate -l update.list
    • update.list 작성 방법이다. 다음과 같이 콤마(,)나 <Enter>를 구분자로 사용하여 작성한다.

      mylibrary,mylibrary2
      mylibrary3
    • 다음은 멀티 노드 환경에서 공유 메모리 정합성에 문제가 있을 경우 동기화를 수행하는 예제이다.

      $ tdlupdate -c
    • 다음은 멀티 노드 환경에서 -e 옵션을 사용하는 예제이다.

      $ tdlupdate -m func001 -e
      TDLUPDATE.redhat73.14389.174419:(E) TDLUTIL0028 socket connect error: nodename = node2, racport = 3478 [TDL0018]
      TDLUPDATE.redhat73.14389.174419:(I) TDLUTIL0095 /home/tmaxha/tmax/run/func001.64d5f4e3 is being processed [TDL0417]
      TDLUPDATE.redhat73.14389.174419:(I) TDLUTIL0118 Synchronization succeeded [TDL0064]
      TDLUPDATE.redhat73.14389.174419:(I) TDLUTIL0083 func001.64d5f4e3 updated successfully [TDL0443]
      $ echo $?
      9
  • 참고

    VERSION=4로 설정한 경우에는 export 함수 추출을 위한 스크립트 파일이 반드시 필요하다.

    /* Example of exp file */
    /* dlib.exp */
    
    #! dlib.so
    TmaxSoft::Airplain
    Car

4. 제약 사항

  • 라이브러리명과 함수명은 최대 63자까지 입력할 수 있다.

  • tdlupdate 명령어를 사용할 때, 타깃 파일 경로는 다음과 같은 경로 형식을 따른다: {경로}/{라이브러리명}.{seqno}

    • 이 전체 경로 문자열의 길이는 최대 260자로 제한된다.

    • 경로가 너무 길 경우 `tdlupdate`가 실제 동작이 실패할 수 있으므로, 디렉터리 구조나 라이브러리명 길이에 주의해야 한다.