Requests per second: how many HTTP requests the server completed per second during the test (throughput). Higher is better.
Latency
Time from sending a request until the full response arrives. Lower is better.
p50
50th percentile (median) latency: half of the requests were faster than this, half slower. The "typical" request.
p99
99th percentile latency: 99% of the requests were faster than this, and the slowest 1% took longer. It shows the "tail", the worst cases users actually hit.
Tail latency
The slow end of the latency distribution (p99 and above).
wrk
The HTTP load generator used by benchmarks/run.sh. It keeps a fixed number of connections open (256 here) and sends requests as fast as the server answers.
Warm-up
A short unmeasured run before each measurement, so caches and connection pools are filled before the numbers count.
Upstream
The backend server a proxy forwards requests to. In the benchmark it's an nginx returning a 20-byte body.
Keep-alive
Reusing one TCP connection for many HTTP requests instead of opening a new one each time.
RSS
Resident Set Size: memory pages of a process that are currently in RAM, including shared ones (program code, libraries). Summing RSS over several processes counts shared pages several times.
PSS
Proportional Set Size: like RSS, but each shared page is divided among the processes that share it. The fair way to compare one process (Ferrix) with a group of processes (nginx master + workers).
System call: a request from a program to the operating system kernel (read a socket, open a file, read the clock). Each one has a fixed cost, so fast servers try to make fewer.
TSC / HPET
Hardware clocks. With a usable TSC (Time Stamp Counter), reading the time is almost free; machines that fall back to HPET (High Precision Event Timer) pay a slow syscall per clock read, which is why Ferrix caches the time.