Switch to fireusage

This commit is contained in:
flamingcow
2019-05-11 18:16:17 -07:00
parent ac42dd07dc
commit 16bd9ddc3e
4 changed files with 19 additions and 15 deletions

3
.gitmodules vendored
View File

@@ -1,3 +1,6 @@
[submodule "firebuf"] [submodule "firebuf"]
path = firebuf path = firebuf
url = ../firebuf.git url = ../firebuf.git
[submodule "fireusage"]
path = fireusage
url = ../fireusage.git

View File

@@ -10,13 +10,16 @@ objects = server.o connection.o request.o parse.o
firebuf/firebuf.o: firebuf/firebuf.o:
$(MAKE) --directory=firebuf firebuf.o $(MAKE) --directory=firebuf firebuf.o
fireusage/fireusage.o:
$(MAKE) --directory=fireusage fireusage.o
firecgi.a: $(objects) firecgi.a: $(objects)
ar rcs $@ $^ ar rcs $@ $^
firecgi.o: $(objects) firebuf/firebuf.o firecgi.o: $(objects) firebuf/firebuf.o fireusage/fireusage.o
gold -z relro -z now -r --output=$@ $+ gold -z relro -z now -r --output=$@ $+
firecgi.so: $(objects) firebuf/firebuf.o firecgi.so: $(objects) firebuf/firebuf.o fireusage/fireusage.o
$(FIRE_CXX) $(FIRE_CXXFLAGS) $(FIRE_LDFLAGS) -shared -o $@ $+ $(FIRE_LDFLIBS) $(FIRE_CXX) $(FIRE_CXXFLAGS) $(FIRE_LDFLAGS) -shared -o $@ $+ $(FIRE_LDFLIBS)
example_simple: example_simple.o firecgi.o example_simple: example_simple.o firecgi.o
@@ -27,6 +30,7 @@ example_simple: example_simple.o firecgi.o
clean: clean:
$(MAKE) --directory=firebuf clean $(MAKE) --directory=firebuf clean
$(MAKE) --directory=fireusage clean
rm --force example_simple connection_afl *.so *.o *.a rm --force example_simple connection_afl *.so *.o *.a
afl: afl:

1
fireusage Submodule

Submodule fireusage added at 5fea6af3c3

View File

@@ -9,6 +9,8 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <thread> #include <thread>
#include "fireusage/usage.h"
#include "server.h" #include "server.h"
#include "connection.h" #include "connection.h"
@@ -87,7 +89,9 @@ void Server::ServeInt() {
} }
std::unordered_set<Connection*> connections; std::unordered_set<Connection*> connections;
uint64_t requests = 0;
fireusage::UsageTracker usage_tracker;
usage_tracker.Start();
while (true) { while (true) {
constexpr auto max_events = 256; constexpr auto max_events = 256;
@@ -103,28 +107,20 @@ void Server::ServeInt() {
connections.insert(CHECK_NOTNULL(NewConn(listen_sock, epoll_fd))); connections.insert(CHECK_NOTNULL(NewConn(listen_sock, epoll_fd)));
} else if (events[i].data.ptr == &shutdown) { } else if (events[i].data.ptr == &shutdown) {
for (auto& conn : connections) { for (auto& conn : connections) {
requests += conn->Requests(); usage_tracker.AddEvents(conn->Requests());
delete conn; delete conn;
} }
usage_tracker.Stop();
PCHECK(close(listen_sock) == 0); PCHECK(close(listen_sock) == 0);
PCHECK(close(epoll_fd) == 0); PCHECK(close(epoll_fd) == 0);
usage_tracker.Log();
rusage usage;
PCHECK(getrusage(RUSAGE_THREAD, &usage) == 0);
LOG(INFO) << std::setfill('0')
<< "thread shutting down ("
<< "handled " << requests << " requests, "
<< usage.ru_utime.tv_sec << "." << std::setw(6) << usage.ru_utime.tv_usec << " user seconds, " << std::setw(0)
<< usage.ru_stime.tv_sec << "." << std::setw(6) << usage.ru_stime.tv_usec << " system seconds" << std::setw(0)
<< ")";
return; return;
} else { } else {
auto conn = static_cast<Connection*>(events[i].data.ptr); auto conn = static_cast<Connection*>(events[i].data.ptr);
auto fd = conn->Read(); auto fd = conn->Read();
if (fd != -1) { if (fd != -1) {
PCHECK(epoll_ctl(epoll_fd, EPOLL_CTL_DEL, fd, nullptr) == 0); PCHECK(epoll_ctl(epoll_fd, EPOLL_CTL_DEL, fd, nullptr) == 0);
requests += conn->Requests(); usage_tracker.AddEvents(conn->Requests());
connections.erase(conn); connections.erase(conn);
delete conn; delete conn;
} }