Date | Commit message (Collapse) |
|
RARRAY_PTR is expensive with GCs in Ruby 2.1.0dev and Rubinius, so
use rb_ary_entry for non-performance critical paths. Eventually,
RARRAY_AREF/RARRAY_ASET may be common, but for now, using
rb_ary_entry should require the least cognitive overhead for a
developer.
|
|
Using an extra 4 bytes for the listener_stats should not
significantly increase space usage, and it has the side benefit
of making our code slightly smaller.
$ ~/linux/scripts/bloat-o-meter before.so after.so
add/remove: 0/0 grow/shrink: 1/2 up/down: 14/-32 (-18)
function old new delta
tcp_stats 392 406 +14
st_to_hash 195 187 -8
diag 763 739 -24
|
|
This initialization was unnecessary and avoids the following
warning with -Wmissing-braces on gcc 4.7.2-5 on Debian testing:
linux_inet_diag.c: In function ‘stats_for’:
linux_inet_diag.c:192:8: warning: missing braces around initializer [-Wmissing-braces]
linux_inet_diag.c:192:8: warning: (near initialization for ‘sa.ss’) [-Wmissing-braces]
|
|
This allows reusing existing Linux::TCP_Info objects to avoid
generating garbage.
|
|
The runnable CPUs of a process may change over the lifetime of
the process. So favor the count of configured processor count
since that is more likely to be stable.
We do not currently do not have special handling for
hot-plugging/removal of CPUs on systems that may load raindrops
in a single CPU state.
|
|
This is exported (visibly) under Ruby 1.9.3 but not
in headers, so it was causing warnings.
|
|
Attempting to test for CMPXCHG on x86 should allow this check to
fail on i386 systems. We also won't need try_run as a result,
enabling cross-compilation. The configure.in check in Ruby
1.9.3 does something similar and that's far more widely used
than raindrops is.
|
|
A non-profit TLD makes more sense for a Free Software project.
|
|
This appears to cause __BSD_VISIBLE to not be defined,
which is required for MAP_ANON to be visible in
sys/mman.h
Thanks for Aleksandar Simic for the hint and Troex Nevelin
for the bug report!
|
|
No need to cast when C has handy unions. Maybe the compiler
will be able to make better optimization choices here, but
at least it'll be less noisy.
|
|
We can't even pull in linux/*.h headers to check
for TCP_INFO.
|
|
dir_config may be used to build for libatomic_ops. The
previous use of dir_config was from back when I didn't
understand mkmf.
This means you can now use:
gem install raindrops -- --with-atomic_ops-dir=/usr/local
If you libatomic_ops library was installed in /usr/local
instead of /usr
|
|
Seems to breaks under newer libc headers (on Debian sid).
|
|
We no longer use it.
|
|
|
|
Very few programs can take advantage of inheriting FDs
across exec() boundaries, and inet_diag sockets have no
reason to be used in this way.
|
|
It can detect cross-thread close() calls
|
|
Oops :x This was totally broken with the all-listener
filter.
|
|
|
|
getaddrinfo() needs to get a list of available interfaces
from the kernel with every single call (since ipv6 could've
been modprobed), so it's a waste of syscalls.
|
|
No need to waste resources on creating/destroying
a socket.
|
|
I thought my compiler would be smarter :<
|
|
The way we dump, we dump it all, it seems.
|
|
This means we can read multiple addresses at once,
even IPv6 ones.
|
|
It's slow, but at least it works.
|
|
No reason to have an extra method. This also speeds up
the multi-listener case for tcp_listener_stats since it
avoids expensive sendmsg() syscalls.
|
|
|
|
netlink is fast and predictable in response times, so permitting
interrupts would just complicate things and lead to errors.
|
|
Fewer places to check for errors, we think.
|
|
Be stricter about invalid inputs.
|
|
This is a work-in-progress and will probably be modified
before the next release.
|
|
64-bit counters are unnecessarily large for tracking
active or queued connections until we have IP_ROFLSCALE
support :>
|
|
Oops :x
|
|
Too hard to maintain.
|
|
We can't have negative values
|
|
We don't care for this address.
|
|
Oops, strings are always true :x
|
|
We're going to experiment with something...
|
|
It's useful, yes.
|
|
Oops, it could give the GC problems.
|
|
This allows limited resizing of the Raindrops memory
area since we always over-allocate due to the required
page aligment for mmap.
It would be nice if mremap() worked with MAP_SHARED,
but it does not and triggers a bus error when attempting
to access the new area.
ref: https://bugzilla.kernel.org/show_bug.cgi?id=8691
|
|
Of course, RDoc doesn't know quantity vs quality :)
|
|
It's more complete for people on ancient systems where
"struct tcp_info" is defined in netinet/tcp and missing
tcp_ircv_rtt, tcpi_rcv_space and tcpi_total_retrans.
|
|
This is the highest number a counter may be incremented to
before it overflows.
|
|
This returns a Raindrops::TCP_Info object
that wraps a tcp_info struct.
|
|
We might reuse that for other code...
|
|
We'll be doing more Linux-only stuff
|
|
inet_diag already supports AF_INET6.
|
|
Acked-by: Eric Wong <normalperson@yhbt.net>
|
|
Nobody uses i386 anymore (especially not with Ruby!),
but some systems like FreeBSD 7.0 still target GCC at
i386 by default, so we force GCC to use a slightly
more modern instruction set and allow it to use
atomic builtins.
|