class SharedDriverData {
   unsigned id;
+  uint32_t core_id;
   std::string sn;
   spdk_nvme_ctrlr *ctrlr;
   spdk_nvme_ns *ns;
   bool aio_stop = false;
   void _aio_thread();
   void _aio_start() {
-    int r = rte_eal_remote_launch(dpdk_thread_adaptor, static_cast<void*>(&run_func), id);
+    int r = rte_eal_remote_launch(dpdk_thread_adaptor, static_cast<void*>(&run_func),
+                                  core_id);
     assert(r == 0);
   }
   void _aio_stop() {
       aio_stop = true;
       queue_cond.Signal();
     }
-    int r = rte_eal_wait_lcore(id);
+    int r = rte_eal_wait_lcore(core_id);
     assert(r == 0);
     aio_stop = false;
   }
   std::atomic_ulong completed_op_seq, queue_op_seq;
   PerfCounters *logger = nullptr;
 
-  SharedDriverData(unsigned i, const std::string &sn_tag,
+  SharedDriverData(unsigned i, uint32_t core, const std::string &sn_tag,
                    spdk_nvme_ctrlr *c, spdk_nvme_ns *ns)
       : id(i),
+        core_id(core),
         sn(sn_tag),
         ctrlr(c),
         ns(ns),
     // only support one device per osd now!
     assert(shared_driver_datas.empty());
     // index 0 is occured by master thread
-    shared_driver_datas.push_back(new SharedDriverData(shared_driver_datas.size()+1, sn_tag, c, ns));
+    shared_driver_datas.push_back(new SharedDriverData(shared_driver_datas.size()+1, rte_get_next_lcore(-1, 0, 0), sn_tag, c, ns));
     *driver = shared_driver_datas.back();
   }
 };