[ovs-dev] [ovsdb-server multithreading RFC 3/9] ovsdb: Spawn threads to handle jsonrpc sessions
Ben Pfaff
blp at ovn.org
Sat Mar 19 00:27:33 UTC 2016
On Thu, Mar 03, 2016 at 12:13:22AM -0800, Andy Zhou wrote:
> Add the basic infrastructure to create and destroy threads that
> will be used to handle jsonrpc sessions.
>
> This patch implements a simple logic to create thread on demand.
> Using number of sessions a server services as an rough measure of
> system load, A jsonrpc server creates more threads as the number of
> sessions exceeds a pre defined number of session per thread, Until
> a user specified maximum is reached.
>
> The threading model is simple. OVSDB server starts up with no threads
> (This is required to handle the --run option). Once created,
> a thread is never destroyed until the OVSDB server is shut down.
>
> Session thread does not do anything useful. In fact, the threads
> won't even be created because the max number threads is hard coded
> to zero. Later patch will create and make use of those threads.
>
> Signed-off-by: Andy Zhou <azhou at ovn.org>
Seems like a good start!
I'm going to ack this but I'd prefer to get more functionality reviewed
before you push it.
Acked-by: Ben Pfaff <blp at ovn.org>
Some style suggestions:
diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c
index 7c674ba..b890a88 100644
--- a/ovsdb/jsonrpc-server.c
+++ b/ovsdb/jsonrpc-server.c
@@ -129,7 +129,7 @@ struct ovsdb_jsonrpc_server {
struct ovs_list all_sessions; /* All 'ovsdb_jsonrpc_session's managed
by the main process. Those are sessions
created before multithreading, or
- connections of active remotes.. */
+ connections of active remotes. */
/* Threads. */
size_t n_max_threads;
@@ -147,7 +147,7 @@ ovsdb_jsonrpc_server_cast(struct ovsdb_server *s) {
/* The minimal number of sessions per thread, before a new thread will be
* added, until 'n_max_threads' is reached. Once created, the thread
* will not destroyed. */
-#define N_SESSIONS_THREASHHOLD (2)
+#define N_SESSIONS_THRESHOLD (2)
static bool ovsdb_jsonrpc_server_use_threads(struct ovsdb_jsonrpc_server *);
/* A configured remote. This is either a passive stream listener plus a list
@@ -167,7 +167,7 @@ static void ovsdb_jsonrpc_server_del_remote(struct shash_node *);
/* Creates and returns a new server to provide JSON-RPC access to an OVSDB.
*
- * 'max_threads' limits * the number of threads it can create.
+ * 'max_threads' limits the number of threads it can create.
*
* The caller must call ovsdb_jsonrpc_server_add_db() for each database to
* which 'server' should provide access. */
@@ -224,13 +224,12 @@ void
ovsdb_jsonrpc_server_destroy(struct ovsdb_jsonrpc_server *svr)
{
struct shash_node *node, *next;
- size_t i;
SHASH_FOR_EACH_SAFE (node, next, &svr->remotes) {
ovsdb_jsonrpc_server_del_remote(node);
}
- for (i = 0; i < svr->n_active_threads; i++) {
+ for (size_t i = 0; i < svr->n_active_threads; i++) {
struct sessions_thread *thread = &svr->threads[i];
sessions_thread_exit(thread);
}
@@ -446,11 +445,12 @@ ovsdb_jsonrpc_server_get_memory_usage(const struct ovsdb_jsonrpc_server *svr,
}
static bool
-ovsdb_jsonrpc_server_use_threads(struct ovsdb_jsonrpc_server *svr) {
+ovsdb_jsonrpc_server_use_threads(struct ovsdb_jsonrpc_server *svr)
+{
if (svr->n_active_threads != svr->n_max_threads) {
/* Look up the number of sessions to decide if there is a need
* for a new thread. */
- size_t n_desired_threads = svr->n_sessions / N_SESSIONS_THREASHHOLD;
+ size_t n_desired_threads = svr->n_sessions / N_SESSIONS_THRESHOLD;
if (n_desired_threads > svr->n_active_threads) {
sessions_thread_init(&svr->threads[svr->n_active_threads++]);
More information about the dev
mailing list