void * Query_queue::threadInitQuery(void * This) { Query_queue * query_queue = (Query_queue *)This; uint32_t tid = ATOM_FETCH_ADD(_next_tid, 1); // set cpu affinity set_affinity(tid); query_queue->init_per_thread(tid); return NULL; }
void * tpcc_wl::threadInitWarehouse(void * This) { tpcc_wl * wl = (tpcc_wl *) This; int tid = ATOM_FETCH_ADD(wl->next_tid, 1); uint32_t wid = tid + 1; tpcc_buffer[tid] = (drand48_data *) _mm_malloc(sizeof(drand48_data), 64); assert((uint64_t)tid < g_num_wh); srand48_r(wid, tpcc_buffer[tid]); if (tid == 0) wl->init_tab_item(); wl->init_tab_wh( wid ); wl->init_tab_dist( wid ); wl->init_tab_stock( wid ); for (uint64_t did = 1; did <= DIST_PER_WARE; did++) { wl->init_tab_cust(did, wid); wl->init_tab_order(did, wid); for (uint64_t cid = 1; cid <= g_cust_per_dist; cid++) wl->init_tab_hist(cid, did, wid); } return NULL; }
void Client_query_queue::initQueriesParallel() { UInt32 tid = ATOM_FETCH_ADD(next_tid, 1); uint64_t request_cnt; request_cnt = g_max_txn_per_part + 4; uint32_t final_request; if (tid == g_init_parallelism-1) { final_request = request_cnt; } else { final_request = request_cnt / g_init_parallelism * (tid+1); } #if WORKLOAD == YCSB YCSBQueryGenerator * gen = new YCSBQueryGenerator; gen->init(); #elif WORKLOAD == TPCC TPCCQueryGenerator * gen = new TPCCQueryGenerator; #elif WORKLOAD == PPS PPSQueryGenerator * gen = new PPSQueryGenerator; #endif #if SERVER_GENERATE_QUERIES for ( UInt32 thread_id = 0; thread_id < g_thread_cnt; thread_id ++) { for (UInt32 query_id = request_cnt / g_init_parallelism * tid; query_id < final_request; query_id ++) { queries[thread_id][query_id] = gen->create_query(_wl,g_node_id); } } #else for ( UInt32 server_id = 0; server_id < g_servers_per_client; server_id ++) { for (UInt32 query_id = request_cnt / g_init_parallelism * tid; query_id < final_request; query_id ++) { queries[server_id][query_id] = gen->create_query(_wl,server_id+g_server_start_node); } } #endif }