Small tweaks to new load tester
This commit is contained in:
@@ -130,7 +130,6 @@ constexpr int kNetworkThreads = std::min(8, kConcurrency);
|
|||||||
|
|
||||||
constexpr int kEventBatchSize = 32;
|
constexpr int kEventBatchSize = 32;
|
||||||
constexpr int kConnectionBufSize = 1024;
|
constexpr int kConnectionBufSize = 1024;
|
||||||
constexpr uint32_t kMandatoryEpollFlags = EPOLLONESHOT;
|
|
||||||
|
|
||||||
sem_t connectionLimit;
|
sem_t connectionLimit;
|
||||||
|
|
||||||
@@ -232,20 +231,14 @@ struct Connection {
|
|||||||
assert(w != 0);
|
assert(w != 0);
|
||||||
request = request.substr(w, request.size() - w);
|
request = request.substr(w, request.size() - w);
|
||||||
if (request.empty()) {
|
if (request.empty()) {
|
||||||
if (requestsSent == 0) {
|
|
||||||
sentFirstRequest = now();
|
|
||||||
}
|
|
||||||
++requestsSent;
|
++requestsSent;
|
||||||
if (requestsSent == kRequestsPerConnection) {
|
if (requestsSent == kRequestsPerConnection) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
initRequest();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double sentFirstRequest;
|
|
||||||
|
|
||||||
const int fd;
|
const int fd;
|
||||||
const int64_t id;
|
const int64_t id;
|
||||||
|
|
||||||
@@ -282,6 +275,7 @@ private:
|
|||||||
int on_message_complete() {
|
int on_message_complete() {
|
||||||
responseId = 0;
|
responseId = 0;
|
||||||
++responsesReceived;
|
++responsesReceived;
|
||||||
|
initRequest();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -373,9 +367,10 @@ int main() {
|
|||||||
|
|
||||||
// Transfer back to epoll instance. This thread or another thread
|
// Transfer back to epoll instance. This thread or another thread
|
||||||
// will wake when fd is ready
|
// will wake when fd is ready
|
||||||
events[i].events = EPOLLIN | kMandatoryEpollFlags;
|
|
||||||
if (!conn->request.empty() && !conn->error) {
|
if (!conn->request.empty() && !conn->error) {
|
||||||
events[i].events |= EPOLLOUT;
|
events[i].events = EPOLLOUT | EPOLLONESHOT;
|
||||||
|
} else {
|
||||||
|
events[i].events = EPOLLIN | EPOLLONESHOT;
|
||||||
}
|
}
|
||||||
conn->tsan_release();
|
conn->tsan_release();
|
||||||
events[i].data.ptr = conn.release();
|
events[i].data.ptr = conn.release();
|
||||||
@@ -408,7 +403,7 @@ int main() {
|
|||||||
fd, connectionId.fetch_add(1, std::memory_order_relaxed));
|
fd, connectionId.fetch_add(1, std::memory_order_relaxed));
|
||||||
// Post to epoll instance
|
// Post to epoll instance
|
||||||
struct epoll_event event{};
|
struct epoll_event event{};
|
||||||
event.events = EPOLLOUT | kMandatoryEpollFlags;
|
event.events = EPOLLOUT | EPOLLONESHOT;
|
||||||
conn->tsan_release();
|
conn->tsan_release();
|
||||||
event.data.ptr = conn.release();
|
event.data.ptr = conn.release();
|
||||||
e = epoll_ctl(epollfd, EPOLL_CTL_ADD, fd, &event);
|
e = epoll_ctl(epollfd, EPOLL_CTL_ADD, fd, &event);
|
||||||
@@ -420,16 +415,6 @@ int main() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
auto now = []() {
|
|
||||||
struct timespec t;
|
|
||||||
int e = clock_gettime(CLOCK_MONOTONIC_RAW, &t);
|
|
||||||
if (e == -1) {
|
|
||||||
perror("clock_gettime");
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
return double(t.tv_nsec) * 1e-9 + double(t.tv_sec);
|
|
||||||
};
|
|
||||||
|
|
||||||
for (double prevTime = now(),
|
for (double prevTime = now(),
|
||||||
prevConnections = connectionId.load(std::memory_order_relaxed);
|
prevConnections = connectionId.load(std::memory_order_relaxed);
|
||||||
;) {
|
;) {
|
||||||
|
|||||||
Reference in New Issue
Block a user