Small tweaks to new load tester

This commit is contained in:
2025-08-20 10:40:29 -04:00
parent 339e9c6bec
commit a20b61ec56

View File

@@ -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);
;) { ;) {