struct thread_info_t{
int tid;
// struct flist_head queue;
pthread_mutex_t mutex;
pthread_cond_t cond_main, cond_sub;
io_context_t io_ctx;
struct io_event events[MAX_QDEPTH];
int queue_depth;
int queue_count;
int active_count;
int fd;
int fsync_period;
struct io_job *th_jobs[MAX_QDEPTH];
void *th_buf[MAX_QDEPTH];
int buf_cur;
struct io_stat_t io_stat;
struct trace_info_t *trace;
int done;
};
이 코드는 trace replay하는 과정속에 있는 tread_info data structure이다.
thread data structure 를 통해서 qdepth와 jobs에 관련된 지식을 대략적으로 정리해보도록 하겠다.
위 코드는 'thread_info_t' data structure가 thread와 관련된 정보를 관리하는 데 사용된다. 이 구조체에서 특히 중요한 요소는 'queue_depth', 'queue_count', 'th_jobs', 'events' 등이 있다. 이들은 thread와 qdepth, 그리고 job 관리와 관련이 있다. 각 요소와 관련된 역할을 설명하겠다.
추가로 Mutex와 Condition Variables는 ('mutex', 'cond_main', 'cond_sub')
다시 한번 thread와 queue_depth, jobs의 관련성을 요약하자면,
thread는 각 thread는 독립적으로 작업을 처리한다. 여러 thread가 동시에 실행될 때, system의 전체 throughput이 증가한다.
queue_depth는 각 thread에서 처리할 수 있는 최대 작업 수를 의미한다. thread는 queue_depth 내에서 작업을 관리하고, 이 범위를 넘어서지 않도록 한다.
jobs는 각 thread는 'queue_depth' 범위 내에서 작업을 처리한다. 현재 처리중인 jobs는 'queue_count'로 추적되며, 'queue_depth'와 비교하여 현재 queue가 얼마나 차 있는지를 나타낸다.
따라서 thread_info_t 구조체는 각 thread가 처리하는 작업의 수와 queue 깊이를 효율적으로 관리해서 system의 성능을 최적화하는 데 중요한 역할을 한다. 각 thread는 독립적으로 I/O 작업을 처리하고, queue depth와 jobs를 기반으로 동작을 조정하여 최적의 성능을 달성하는 것을 목표로 한다.