You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by sc...@apache.org on 2018/02/07 06:19:50 UTC
[trafficserver] 04/06: Add syscall into EventIO for qvc to avoid
system call
This is an automated email from the ASF dual-hosted git repository.
scw00 pushed a commit to branch quic-latest
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit 04dfc12f56e034d041789a3d2ebbbdf069a10f44
Author: scw00 <sc...@apache.org>
AuthorDate: Sat Feb 3 08:59:27 2018 +0800
Add syscall into EventIO for qvc to avoid system call
---
iocore/net/P_UDPNet.h | 2 ++
iocore/net/P_UnixNet.h | 33 ++++++++++++++++-----------------
iocore/net/QUICNet.cc | 2 +-
iocore/net/QUICNetProcessor.cc | 2 ++
iocore/net/QUICNetVConnection.cc | 1 +
iocore/net/UnixUDPNet.cc | 4 ++--
6 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/iocore/net/P_UDPNet.h b/iocore/net/P_UDPNet.h
index 599b6af..52de3b8 100644
--- a/iocore/net/P_UDPNet.h
+++ b/iocore/net/P_UDPNet.h
@@ -59,6 +59,8 @@ extern UDPNetProcessorInternal udpNetInternal;
#define SLOT_TIME HRTIME_MSECONDS(SLOT_TIME_MSEC)
#define N_SLOTS 2048
+constexpr int UDP_PERIOD = 9;
+
class PacketQueue
{
public:
diff --git a/iocore/net/P_UnixNet.h b/iocore/net/P_UnixNet.h
index 6b9ad5f..ab45b66 100644
--- a/iocore/net/P_UnixNet.h
+++ b/iocore/net/P_UnixNet.h
@@ -83,6 +83,7 @@ struct EventIO {
int events = 0;
#endif
EventLoop event_loop = nullptr;
+ bool syscall = true;
int type = 0;
union {
Continuation *c;
@@ -575,15 +576,8 @@ EventIO::start(EventLoop l, NetAccept *vc, int events)
TS_INLINE int
EventIO::start(EventLoop l, UnixNetVConnection *vc, int events)
{
- int r;
type = EVENTIO_READWRITE_VC;
- r = start(l, vc->con.fd, (Continuation *)vc, events);
- if (r < 0 && vc->options.ip_proto == NetVCOptions::USE_UDP) {
- // Hack for QUICNetVC
- return 0;
- } else {
- return r;
- }
+ return start(l, vc->con.fd, (Continuation *)vc, events);
}
TS_INLINE int
EventIO::start(EventLoop l, UnixUDPConnection *vc, int events)
@@ -594,6 +588,10 @@ EventIO::start(EventLoop l, UnixUDPConnection *vc, int events)
TS_INLINE int
EventIO::close()
{
+ if (!this->syscall) {
+ return 0;
+ }
+
stop();
switch (type) {
default:
@@ -615,15 +613,13 @@ EventIO::close()
TS_INLINE int
EventIO::start(EventLoop l, int afd, Continuation *c, int e)
{
+ if (!this->syscall) {
+ return 0;
+ }
+
data.c = c;
fd = afd;
event_loop = l;
- // Hack for QUICNetVC:
- // quicnetvc->con.fd == NO_FD
- // quicnetvc->options.ip_proto == NetVCOptions::USE_UDP
- if (afd == NO_FD) {
- return -1;
- }
#if TS_USE_EPOLL
struct epoll_event ev;
memset(&ev, 0, sizeof(ev));
@@ -656,9 +652,10 @@ EventIO::start(EventLoop l, int afd, Continuation *c, int e)
TS_INLINE int
EventIO::modify(int e)
{
- if (fd == NO_FD) {
+ if (!this->syscall) {
return 0;
}
+
ink_assert(event_loop);
#if TS_USE_EPOLL && !defined(USE_EDGE_TRIGGER)
struct epoll_event ev;
@@ -738,9 +735,10 @@ EventIO::modify(int e)
TS_INLINE int
EventIO::refresh(int e)
{
- if (fd == NO_FD) {
+ if (!this->syscall) {
return 0;
}
+
ink_assert(event_loop);
#if TS_USE_KQUEUE && defined(USE_EDGE_TRIGGER)
e = e & events;
@@ -782,9 +780,10 @@ EventIO::refresh(int e)
TS_INLINE int
EventIO::stop()
{
- if (fd == NO_FD) {
+ if (!this->syscall) {
return 0;
}
+
if (event_loop) {
int retval = 0;
#if TS_USE_EPOLL
diff --git a/iocore/net/QUICNet.cc b/iocore/net/QUICNet.cc
index 3e730af..33763b8 100644
--- a/iocore/net/QUICNet.cc
+++ b/iocore/net/QUICNet.cc
@@ -154,5 +154,5 @@ initialize_thread_for_quic_net(EThread *thread)
new ((ink_dummy_for_new *)quicpc) QUICPollCont(thread->mutex, nh);
- thread->schedule_every(quicpc, -9);
+ thread->schedule_every(quicpc, -UDP_PERIOD);
}
diff --git a/iocore/net/QUICNetProcessor.cc b/iocore/net/QUICNetProcessor.cc
index da372c6..1064bd7 100644
--- a/iocore/net/QUICNetProcessor.cc
+++ b/iocore/net/QUICNetProcessor.cc
@@ -181,6 +181,8 @@ QUICNetProcessor::connect_re(Continuation *cont, sockaddr const *remote_addr, Ne
vc->mutex = cont->mutex;
vc->action_ = cont;
+ SET_CONTINUATION_HANDLER(vc, &QUICNetVConnection::state_pre_handshake);
+
vc->start(this->_ssl_ctx);
vc->connectUp(t, NO_FD);
diff --git a/iocore/net/QUICNetVConnection.cc b/iocore/net/QUICNetVConnection.cc
index e71c109..ee1d16f 100644
--- a/iocore/net/QUICNetVConnection.cc
+++ b/iocore/net/QUICNetVConnection.cc
@@ -70,6 +70,7 @@ QUICNetVConnection::init(QUICConnectionId original_cid, UDPConnection *udp_con,
this->_packet_handler = packet_handler;
this->_original_quic_connection_id = original_cid;
this->_quic_connection_id.randomize();
+ this->ep.syscall = false;
// PacketHandler for out going connection doesn't have connection table
if (ctable) {
this->_ctable = ctable;
diff --git a/iocore/net/UnixUDPNet.cc b/iocore/net/UnixUDPNet.cc
index 5a68206..d5004fe 100644
--- a/iocore/net/UnixUDPNet.cc
+++ b/iocore/net/UnixUDPNet.cc
@@ -86,7 +86,7 @@ initialize_thread_for_udp_net(EThread *thread)
REC_ReadConfigInt32(g_udp_numSendRetries, "proxy.config.udp.send_retries");
g_udp_numSendRetries = g_udp_numSendRetries < 0 ? 0 : g_udp_numSendRetries;
- thread->schedule_every(get_UDPPollCont(thread), -9);
+ thread->schedule_every(get_UDPPollCont(thread), -UDP_PERIOD);
thread->schedule_imm(get_UDPNetHandler(thread));
}
@@ -923,7 +923,7 @@ UDPNetHandler::startNetEvent(int event, Event *e)
(void)event;
SET_HANDLER((UDPNetContHandler)&UDPNetHandler::mainNetEvent);
trigger_event = e;
- e->schedule_every(-HRTIME_MSECONDS(9));
+ e->schedule_every(-HRTIME_MSECONDS(UDP_PERIOD));
return EVENT_CONT;
}
--
To stop receiving notification emails like this one, please contact
scw00@apache.org.