You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@kudu.apache.org by "Todd Lipcon (Code Review)" <ge...@cloudera.org> on 2020/04/14 16:34:05 UTC

[kudu-CR] Add basic support for UNIX domain sockets

Hello Tidy Bot, Mike Percy, Andrew Wong, Kudu Jenkins, Andrew Wong, Volodymyr Verovkin, 

I'd like you to reexamine a change. Please visit

    http://gerrit.cloudera.org:8080/15691

to look at the new patch set (#5).

Change subject: Add basic support for UNIX domain sockets
......................................................................

Add basic support for UNIX domain sockets

This adds support to Sockaddr to represent UNIX domain sockets, and
fixes some code in the RPC stack and Socket classes that previously
assumed sockaddr_in.

This updates rpc-test to run all of the cases over both TCP and UNIX
sockets. It also adds a simple performance test of running RPC over a
UNIX domain socket.

The performance difference is small but measurable. The test has a lot
of variability depending on whether the reactor threads, test thread,
and RPC worker thread get scheduled to the same core, different
hyperthreads of the same core, same vs different NUMA nodes, etc. To
eliminate that variability I ran the performance test using 'taskset -c
1' to pin to a single CPU:

I0409 15:15:50.290123 42405 rpc-test.cc:1529] Connecting to 0.0.0.0:33635
I0409 15:15:50.646266 42405 rpc-test.cc:1543] Sending 1024MB via tcp socket: real 0.355s        user 0.110s     sys 0.245s
I0409 15:15:51.048060 42405 rpc-test.cc:1543] Sending 1024MB via tcp socket: real 0.402s        user 0.106s     sys 0.295s
I0409 15:15:51.455765 42405 rpc-test.cc:1543] Sending 1024MB via tcp socket: real 0.408s        user 0.120s     sys 0.287s
I0409 15:15:51.861732 42405 rpc-test.cc:1543] Sending 1024MB via tcp socket: real 0.406s        user 0.112s     sys 0.293s
I0409 15:15:52.268314 42405 rpc-test.cc:1543] Sending 1024MB via tcp socket: real 0.407s        user 0.119s     sys 0.287s
[       OK ] Parameters/TestRpc.TestPerformanceBySocketType/NoSSL_TCP (1987 ms)
[ RUN      ] Parameters/TestRpc.TestPerformanceBySocketType/NoSSL_UnixSocket
I0409 15:15:52.271142 42405 rpc-test.cc:1529] Connecting to unix:@kudu-test-42405
I0409 15:15:52.605296 42405 rpc-test.cc:1543] Sending 1024MB via unix socket: real 0.333s       user 0.098s     sys 0.235s
I0409 15:15:52.934170 42405 rpc-test.cc:1543] Sending 1024MB via unix socket: real 0.329s       user 0.107s     sys 0.222s
I0409 15:15:53.264912 42405 rpc-test.cc:1543] Sending 1024MB via unix socket: real 0.331s       user 0.115s     sys 0.216s
I0409 15:15:53.592478 42405 rpc-test.cc:1543] Sending 1024MB via unix socket: real 0.328s       user 0.115s     sys 0.212s
I0409 15:15:53.918494 42405 rpc-test.cc:1543] Sending 1024MB via unix socket: real 0.326s       user 0.107s     sys 0.219s

The results show about a 1.2x throughput improvement using unix sockets.

Another benefit we can make use of in the future is the ability to pass file
descriptors over sockets: this would enable us to do true "zero-copy" between
the server and client, which should have more significant benefits than seen
here.

Additionally, this patch will probably help get us closer to IPv6 support as
well, since it gets rid of some sockaddr_in-specific code paths in the RPC
stack.

Change-Id: I40ce3e4e1b98f806f0c29d2fbd88789657218c4b
---
M src/kudu/hms/hms_client-test.cc
M src/kudu/mini-cluster/mini_cluster.cc
M src/kudu/rpc/CMakeLists.txt
M src/kudu/rpc/acceptor_pool.cc
M src/kudu/rpc/connection.cc
M src/kudu/rpc/connection_id.cc
M src/kudu/rpc/messenger.cc
M src/kudu/rpc/mt-rpc-test.cc
M src/kudu/rpc/negotiation-test.cc
M src/kudu/rpc/reactor.cc
M src/kudu/rpc/reactor.h
M src/kudu/rpc/rpc-test-base.h
M src/kudu/rpc/rpc-test.cc
M src/kudu/rpc/server_negotiation.cc
M src/kudu/rpc/server_negotiation.h
M src/kudu/security/tls_socket-test.cc
M src/kudu/security/tls_socket.cc
M src/kudu/security/tls_socket.h
M src/kudu/util/net/net_util-test.cc
M src/kudu/util/net/net_util.cc
M src/kudu/util/net/sockaddr.cc
M src/kudu/util/net/sockaddr.h
M src/kudu/util/net/socket-test.cc
M src/kudu/util/net/socket.cc
M src/kudu/util/net/socket.h
M src/kudu/util/thread-test.cc
26 files changed, 584 insertions(+), 261 deletions(-)


  git pull ssh://gerrit.cloudera.org:29418/kudu refs/changes/91/15691/5
-- 
To view, visit http://gerrit.cloudera.org:8080/15691
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I40ce3e4e1b98f806f0c29d2fbd88789657218c4b
Gerrit-Change-Number: 15691
Gerrit-PatchSet: 5
Gerrit-Owner: Todd Lipcon <to...@apache.org>
Gerrit-Reviewer: Andrew Wong <an...@cloudera.com>
Gerrit-Reviewer: Andrew Wong <aw...@cloudera.com>
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy <mp...@apache.org>
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Volodymyr Verovkin <ve...@cloudera.com>