#include "common/errno.h"
#include "Event.h"
+#ifdef HAVE_DPDK
+#include "dpdk/EventDPDK.h"
+#endif
+
#ifdef HAVE_EPOLL
#include "EventEpoll.h"
#else
idx = i;
+ if (cct->_conf->ms_async_transport_type == "dpdk") {
+#ifdef HAVE_DPDK
+ driver = new DPDKDriver(cct);
+#endif
+ } else {
#ifdef HAVE_EPOLL
driver = new EpollDriver(cct);
#else
driver = new SelectDriver(cct);
#endif
#endif
+ }
if (!driver) {
lderr(cct) << __func__ << " failed to create event driver " << dendl;
return -1;
}
- int r = driver->init(n);
+ int r = driver->init(this, n);
if (r < 0) {
lderr(cct) << __func__ << " failed to init event driver." << dendl;
return r;
bool trigger_time = false;
auto now = clock_type::now();
- bool blocking = pollers.empty() && !external_num_events.load() ? &tv : nullptr;
+ bool blocking = pollers.empty() && !external_num_events.load();
// If exists external events or poller, don't block
if (!blocking) {
tv.tv_sec = 0;
class EventDriver {
public:
virtual ~EventDriver() {} // we want a virtual destructor!!!
- virtual int init(int nevent) = 0;
+ virtual int init(EventCenter *center, int nevent) = 0;
virtual int add_event(int fd, int cur_mask, int mask) = 0;
virtual int del_event(int fd, int cur_mask, int del_mask) = 0;
virtual int event_wait(vector<FiredFileEvent> &fired_events, struct timeval *tp) = 0;
#undef dout_prefix
#define dout_prefix *_dout << "EpollDriver."
-int EpollDriver::init(int nevent)
+int EpollDriver::init(EventCenter *c, int nevent)
{
events = (struct epoll_event*)malloc(sizeof(struct epoll_event)*nevent);
if (!events) {
free(events);
}
- int init(int nevent) override;
+ int init(EventCenter *c, int nevent) override;
int add_event(int fd, int cur_mask, int add_mask) override;
int del_event(int fd, int cur_mask, int del_mask) override;
int resize_events(int newsize) override;
return 0;
}
-int KqueueDriver::init(int nevent)
+int KqueueDriver::init(EventCenter *c, int nevent)
{
// keep track of possible changes of our thread
// because change of thread kills the kqfd
sav_max = 0;
}
- int init(int nevent) override;
+ int init(EventCenter *c, int nevent) override;
int add_event(int fd, int cur_mask, int add_mask) override;
int del_event(int fd, int cur_mask, int del_mask) override;
int resize_events(int newsize) override;
#undef dout_prefix
#define dout_prefix *_dout << "SelectDriver."
-int SelectDriver::init(int nevent)
+int SelectDriver::init(EventCenter *c, int nevent)
{
ldout(cct, 0) << "Select isn't suitable for production env, just avoid "
<< "compiling error or special purpose" << dendl;
explicit SelectDriver(CephContext *c): max_fd(0), cct(c) {}
virtual ~SelectDriver() {}
- int init(int nevent) override;
+ int init(EventCenter *c, int nevent) override;
int add_event(int fd, int cur_mask, int add_mask) override;
int del_event(int fd, int cur_mask, int del_mask) override;
int resize_events(int newsize) override;