Switch to fireusage
This commit is contained in:
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -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
|
||||||
|
|||||||
8
Makefile
8
Makefile
@@ -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
1
fireusage
Submodule
Submodule fireusage added at 5fea6af3c3
22
server.cc
22
server.cc
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user