Linux system에서 성능을 평가할 때, 검증된 data로 trace replay를 돌려봄으로써 성능 측정이 가능하다.
오늘은 YCSB trace data에서 내가 원하는 data를 추출해서 trace replay를 돌리는 도중, trace 추적 및 측정을 위해 필요한 자료구조에 대해 코드를 통해 간략하게 정리해본다.
struct trace_info_t{
pthread_spinlock_t trace_lock;
FILE *trace_fp;
int trace_buf_size;
struct trace_io_req *trace_buf;
int trace_io_cnt;
int trace_io_cur;
int trace_io_issue_count;
char tracename[STR_SIZE];
char filename[STR_SIZE];
int fd;
int synthetic;
long long wanted_io_count;
int utilization; // % Percent
int working_set_size; // in MB
int working_set_pages; // in pages
int io_size; // in bytes
int io_pages; // in pages
int synth_rand;
int synth_read;
int synth_write;
int synth_mixed;
int trace_repeat_count;
int trace_repeat_num;
long long total_capacity;
long long total_pages;
long long total_sectors;
long long start_partition;
long long start_page;
double trace_timescale;
double timeout;
};
'trace_info_t' 구조체는 trace 관련 정보를 저장하고 관리하는 데 사용된다. trace는 일반적으로 system의 I/O 활동을 기록하여 분석하는 데 사용된다. 이 구조체는 다양한 필드들을 통해 trace data, 상태 및 설정을 관리한다. 각 필드의 역할을 분석하면
'pthread_spinlock_t trace_lock'
'FILE *trace_fp'
'int trace_buf_size'
'struct trace_io_req *trace_buf'
'int trace_io_cnt'
'int trace_io_cur'
'int trace_io_issue_count'
'char tracename[STR_SIZE]'
'char filename[STR_SIZE]'
'int fd'
'int synthetic'
'long long wanted_io_count'
'int utilization'
'int working_set_size'
'int working_set_pages'
'int io_size'
'int io_pages'
'int synth_rand/read/write/mixed'
'int trace_repeat_count'
'int trace_repeat_num'
'long long total_capacity'
'long long total_pages'
'long long total_sectors'
'long long start_partition'
'long long start_page'
'double trace_timescale'
'double timeout'
다시 한번 요약하자면 이 trace_info_t 구조체는 trace data를 효과적으로 관리하고 분석하는 데 필요한 다양한 정보를 포함하고 있다. 이를 통해 다음과 같은 작업을 수행할 수 있다.
즉, 고성능 컴퓨팅 시스템에서 I/O 성능을 모니터링하고 최적화하는 데 중요한 도구로 사용될 수 있다.
추가적으로 working set이라는 것에 대해 설명하자면
working set은 특정 시간 동안 process가 main memory(RAM)에서 접근하는 데이터와 코드의 집합을 의미한다. 이는 현재 수행 중인 작업에서 실제로 사용되는 데이터의 양을 나타낸다. 아래와 같은 역할을 하는데
활성 상태 데이터는 시스템에서 현재 사용되고 있는 데이터를 의미한다. 이 데이터는 아래와 같은 특징을 가진다.
working set size는 활성 상태 데이터를 포함하는 메모리의 양을 나타낸다. 이는 아래와 같은 이유로 중요하다.
요약하자면 "활성 상태"는 특정 시간 동안 시스템에서 실제로 사용되고 있는 데이터와 코드를 의미하며, working set size는 이 활성 데이터를 포함하는 메모리의 양을 나타낸다. working set size를 적절히 관리하면 시스템 성능을 최적화할 수 있으며, 이는 page fault 빈도를 줄이고 cache 효율성을 높이는데 기여한다.
끝.