소개

본 장에서는 TCache의 기본 구조와 환경설정을 하는 방법에 대해서 설명한다.

1. 개요

Tmax에서 캐시 처리를 위하여 TCache를 제공한다. TCache는 Tmax의 운영 중에 데이터베이스에서 Access하는 정보를 공유 메모리에 캐싱하여 Tmax의 성능을 보장하도록 하는 유틸리티이다. TCache가 Tmax의 성능을 보장할 수 있는 이유는 데이터베이스로의 데이터 요청이 발생할 때 매번 발생되는 DB 접속으로 인한 OverHead를 감소시킬 수 있기 때문이다.

TCache는 공유 메모리에 데이터가 존재하지 않는 경우에만 데이터베이스로부터 데이터를 쿼리해 오며, 쿼리된 결과 데이터를 TCache에 적재하는 작업을 수행한다. 이후 변경되는 데이터에 대하여는 INVALIDATE 기능을 사용하여 DB와 동기화시킬 수 있다.

다음은 TCache의 기본 구조와 프로세스를 나타낸 그림이다.

figure 1 1
TCache 구조
  • pfmtcacheadmin

    pfmTCacheadmin은 기본 동작을 제어하는 기능을 한다. TCache를 초기화하거나 삭제, 생성할 수 있고, 상태를 조회할 수 있으며, 초기화한 이후 현재까지 캐싱에 대한 리포트 결과를 확인할 수 있다.

  • pfmTCache.cfg

    환경설정 파일로 공유 메모리 주소, 권한, 캐싱을 할 이름과 메모리의 크기, hash 테이블의 크기, hash 키의 크기, 저장할 데이터의 크기를 지정한다.

  • libpfmTCache.so

    TCache 라이브러리는 실제로 호출할 함수가 컴파일되어 있다. TCache를 사용할 경우 사용자의 소스를 컴파일할 때 링크에 포함되어야 한다.

  • TPFMAGENT

    TCache가 여러 개의 Node에 설정되어 Sync를 맞춰야 할 때 Invalidate하기 위한 Tmax 서버이다.

TCache의 성능을 보장하기 위해서는 write가 자주 일어나지 않는 자료를 저장하는데 TCache를 사용해야 한다.

2. 환경설정

pfmtcache.cfg은 TCache의 환경설정 파일로 공유 메모리 구조를 만드는 정보로 구성된다.

환경 파일은 아래의 경로에 위치한다(환경 파일의 위치는 설치 디렉터리에 따라 변경될 수 있다).

$TMAXDIR/config/pfmtcache.cfg

해당 파일에 공유 메모리 주소, 권한, 캐싱을 할 이름과 메모리의 크기, hash 테이블의 크기, hash 키의 크기, 저장할 데이터의 크기를 지정한다.

########################
# 공통 영역
########################
SHMKEY      = [shared-memory-key]
IPCPREM     = [shared-memory-permission]
SIZE_LOCAL  = [cache-size]
LIB_PTHREAD = [file-name]
INVALIDATE_TYPE = [invalidate-type]
AGENT_SVC = [agent_service]

########################
# 개별 영역
########################
CACHE_NAME = [chache-name]
SIZE_MEM   = [chache-memory-size]
SIZE_HASH  = [hash-key-size]
SIZE_KEY   = [key-size]
SIZE_REC   = [record-size]
INV_TIMEOUT= [timout-sec]
CALLBACK_NAME= [callback-name]
LOCK_WAITTIME= [wait-time]
항목 설명

SHMKEY

UNIX의 공유 메모리에 부여한 ID를 설정한다.

IPCPREM

공유 메모리에 대한 권한을 설정한다.

SIZE_LOCAL

서버 process 내부에 할당하여 데이터(레코드)를 기록하게 된다.

기록할 수 있는 최대 용량을 KB로 설정한다.

LIB_PTHREAD

현재 사용하지 않는다. (현재 Symbolic Link만 사용함)

INVALIDATE_TYPE

Invalidate 유형을 설정한다. (TCache 동기화 참조)

AGENT_SVC

Invalidate할 서버를 설정한다. (TCache 동기화 참조)

SHMKEY

UNIX의 공유 메모리에 부여한 ID를 설정한다.

SIZE_MEM

Cache name을 위해 할당되는 총 공유 메모리 크기를 설정한다.

초과하는 경우 least recently used 알고리즘 적용한다. (단위: KB)

SIZE_HASH

Hash Key의 범위를 설정한다.

SIZE_KEY

조회 key가 되는 값의 길이를 설정한다.

Key가 10Byte이고 데이터가 90Byte인 구조체(struct { char Key[10]; char Data[90]; })를 TCache에 등록하는 경우 'SIZE_KEY’를 10으로 설정한다.

예외적으로 여러 개의 멤버가 하나의 Key로 구성될 때는 Pading Bit의 영향으로 단순 합산의 길이와 다를 경우가 존재한다.

해당 Key 구조체를 sizeof한 값을 Key로 설정하면 정확한 Key를 설정을 할 수 있다.

SIZE_REC

메모리 할당의 최소 단위인 SLOT의 크기를 설정한다.

Key가 10Byte이고 데이터가 90Byte인 구조체(struct { char Key[10]; char Data[90]; })를 TCache에 등록하는 경우 'SIZE_REC’를 100으로 설정한다.

예외적으로 여러 개의 멤버가 하나의 레코드로 구성될 때는 Pading Bit의 영향으로 단순 합산의 길이와 다를 경우가 존재한다. 해당 Get할 구조체를 sizeof한 값을 SIZE_REC로 설정하면 하나의 Slot에 하나의 레코드를 설정할 수 있다. 참고로 SIZE_REC 가변길이 초과하는 Put된 레코드인 경우는 SIZE_REC 단위로 나눠져 Slot에 저장된다.

API에서 사용하는 데이터를 가져오는 임시 버퍼 사이즈를 설정한다.

INV_TIMEOUT

Invalidate 후 Put이 금지되는 시간을 설정한다.

CALLBACK_NAME

pfmTCacheItem에서 Get을 실패하는 경우 조회용 BM을 설정한다.

CALLBACK_NAME은 내부적인 처리 구조로 인해 ProFrame C의 BusinessModule로 제한한다.

BM의 물리명이 GET_PFM_SVC로 했을 때 libGET_PFM_SVC.so로 라이브러리 파일이 생성된다. 이때 CALLBACK_NAME 설정은 BM의 물리명으로 설정한다.

  • 설정 예

    CALLBACK_NAME=GET_PFM_SVC

LOCK_WAITTIME

동일한 key에 대해서 다른 프로세스에서 접근하는 경우 해당 프로세스가 데이터 접근을 완료할 때까지 내부적으로 지정한 시간동안 pthread_rwlock_timedlock()으로 대기한다.

최대 대기시간은 기본값 1초(기존과 동일)이며, 환경설정에서 사용하는 시간 단위는 밀리초이다. (범위: 1~86,400,000 밀리초)

  • 설정 예

    LOCK_WAITTIME=3000

다음은TCache 환경설정 파일의 예제이다.

# the configuration file of TCACHE
SHMKEY=0x70056             # the key of 공유 메모리
IPCPERM=0777               # permission of the 공유 메모리
SIZE_LOCAL=1024            # L1 cache size in kilo-bytes
LIB_PTHREAD=libpthread.so  # the pthread library file name
#INVALIDATE_TYPE=1         # Invalidate type 0:multi-node 1:multi-domain
#AGENT_SVC=SPFMAGENT|2     # multi-node sync. svc SPFMAGENT|2 = SPFMAGENT01, SPFMAGENT02

# cache for PFM_SVC
CACHE_NAME=PFM_SVC
SIZE_MEM=65536             # the total cache memory size in kilo-bytes
SIZE_HASH=1024             # the number of hash key (MAX=6553)
SIZE_KEY=30                # the number of digits of the index column
SIZE_REC=2048              # the size of a single record in bytes
INV_TIMEOUT=10             # invalidation timeout in sec
#CALLBACK_NAME=GET_PFM_SVC # Collback Func Nmae libGET_PFM_SVC.so
LOCK_WAITTIME=3000

3. 환경변수

tcache의 디버그 로그를 출력하거나 기타 로그들을 파일에 기록하려면 다음의 환경변수들을 사용한다.

항목 설명

TMAX_DEBUG

Tmax 시스템에서 공통적으로 사용하는 로그를 남기기 위한 path를 지정하는 환경변수이다.

tcache의 로그는 이 환경변수가 지정되어 있을 경우 해당 경로의 파일에 기록되게 된다. 지정되어 있지 않을 경우에는 그대로 화면에 출력된다.

TMAX_LOGLVL

Tmax 시스템에서 공통적으로 사용하는 로그의 레벨을 지정하는 환경변수이다.

tcache 역시 기본적으로 Tmax 시스템의 debug 레벨 체계를 따른다. tcache의 debug log는 현재 DEBUG1까지 밖에 없으므로 그 이상을 지정해도 DEBUG 2, 3, 4레벨의 로그는 출력되지 않는다.