Nice results! I've done some tests using your concurrency script and
found that (with patched AE_SETSIZE) I also hit a wall at 28K
concurrent clients. This is caused by the Linux limit on ephemeral
ports that is set to 32768-61000 (or 28233 ports). So, instead of
hitting the maximum number of open file descriptors, you're hitting
the maximum number of open ports. This can be changed in
/proc/sys/net/ipv4/ip_local_port_range . Changing this range
effectively changes your maximum number of concurrent requests, thus
got me to 50K+ concurrent requests. The latency, however, is huge when
there are this many concurrent clients.
I wasn't able to reproduce the assertion error you got when hitting
28K. I'd like to explore this a little more, because the assertion
error would imply there is something weird going on in this scenario.
My tests were done on a vanilla Ubuntu 10.04 (running in a VM), with
ulimit -n 90000. Can you elaborate a little on the environment, and
check out if the same assertion error also happens inside a VM?
Thanks!
Pieter
> --
> You received this message because you are subscribed to the Google Groups "Redis DB" group.
> To post to this group, send email to redi...@googlegroups.com.
> To unsubscribe from this group, send email to redis-db+u...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/redis-db?hl=en.
>
>
Cheers,
Salvatore
> --
> You received this message because you are subscribed to the Google Groups "Redis DB" group.
> To post to this group, send email to redi...@googlegroups.com.
> To unsubscribe from this group, send email to redis-db+u...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/redis-db?hl=en.
>
>
--
Salvatore 'antirez' Sanfilippo
http://invece.org
"We are what we repeatedly do. Excellence, therefore, is not an act,
but a habit." -- Aristotele
I found the cause of the assertion error and this is now fixed on both
2.0 and master. This means we can go forward with pushing Redis
concurrency to its limits. With the fix applied (and proper ulimit -n,
enlarged ephemeral port range, echo 1 >
/proc/sys/net/ipv4/tcp_tw_recycle), the benchmark tool gets "Cannot
assign requested address" on connect when the kernel has run out of
free ephemeral ports (tcp_tw_recycle helps a bit, but not much). This
leaves the open issue of manually editing AE_SETSIZE, but my guess is
we can leave it this way for a while as 99% of the users don't need
this much concurrent connections.
Eager to see the throughput you get with 50K clients!
Cheers,
Pieter