Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
session: segment manager refactor
[vpp.git]
/
src
/
vnet
/
session
/
session.c
diff --git
a/src/vnet/session/session.c
b/src/vnet/session/session.c
index
ec6d781
..
de3cbc5
100644
(file)
--- a/
src/vnet/session/session.c
+++ b/
src/vnet/session/session.c
@@
-85,12
+85,12
@@
session_alloc (u32 thread_index)
pool_get_aligned_will_expand (smm->sessions[thread_index], will_expand,
CLIB_CACHE_LINE_BYTES);
/* If we have peekers, let them finish */
pool_get_aligned_will_expand (smm->sessions[thread_index], will_expand,
CLIB_CACHE_LINE_BYTES);
/* If we have peekers, let them finish */
- if (PREDICT_FALSE (will_expand))
+ if (PREDICT_FALSE (will_expand
&& vlib_num_workers ()
))
{
{
- clib_
spinlock_lock_if_init (&smm->peekers_write
_locks[thread_index]);
+ clib_
rwlock_writer_lock (&smm->peekers_rw
_locks[thread_index]);
pool_get_aligned (session_manager_main.sessions[thread_index], s,
CLIB_CACHE_LINE_BYTES);
pool_get_aligned (session_manager_main.sessions[thread_index], s,
CLIB_CACHE_LINE_BYTES);
- clib_
spinlock_unlock_if_init (&smm->peekers_write
_locks[thread_index]);
+ clib_
rwlock_writer_unlock (&smm->peekers_rw
_locks[thread_index]);
}
else
{
}
else
{
@@
-1115,6
+1115,7
@@
listen_session_get_local_session_endpoint (stream_session_t * listener,
static clib_error_t *
session_manager_main_enable (vlib_main_t * vm)
{
static clib_error_t *
session_manager_main_enable (vlib_main_t * vm)
{
+ segment_manager_main_init_args_t _sm_args = { 0 }, *sm_args = &_sm_args;
session_manager_main_t *smm = &session_manager_main;
vlib_thread_main_t *vtm = vlib_get_thread_main ();
u32 num_threads;
session_manager_main_t *smm = &session_manager_main;
vlib_thread_main_t *vtm = vlib_get_thread_main ();
u32 num_threads;
@@
-1133,9
+1134,7
@@
session_manager_main_enable (vlib_main_t * vm)
vec_validate (smm->pending_disconnects, num_threads - 1);
vec_validate (smm->free_event_vector, num_threads - 1);
vec_validate (smm->vpp_event_queues, num_threads - 1);
vec_validate (smm->pending_disconnects, num_threads - 1);
vec_validate (smm->free_event_vector, num_threads - 1);
vec_validate (smm->vpp_event_queues, num_threads - 1);
- vec_validate (smm->session_peekers, num_threads - 1);
- vec_validate (smm->peekers_readers_locks, num_threads - 1);
- vec_validate (smm->peekers_write_locks, num_threads - 1);
+ vec_validate (smm->peekers_rw_locks, num_threads - 1);
for (i = 0; i < TRANSPORT_N_PROTO; i++)
for (j = 0; j < num_threads; j++)
for (i = 0; i < TRANSPORT_N_PROTO; i++)
for (j = 0; j < num_threads; j++)
@@
-1153,10
+1152,7
@@
session_manager_main_enable (vlib_main_t * vm)
vec_validate (smm->pending_disconnects[i], 0);
_vec_len (smm->pending_disconnects[i]) = 0;
if (num_threads > 1)
vec_validate (smm->pending_disconnects[i], 0);
_vec_len (smm->pending_disconnects[i]) = 0;
if (num_threads > 1)
- {
- clib_spinlock_init (&smm->peekers_readers_locks[i]);
- clib_spinlock_init (&smm->peekers_write_locks[i]);
- }
+ clib_rwlock_init (&smm->peekers_rw_locks[i]);
}
#if SESSION_DBG
}
#if SESSION_DBG
@@
-1167,8
+1163,9
@@
session_manager_main_enable (vlib_main_t * vm)
session_vpp_event_queues_allocate (smm);
/* Initialize fifo segment main baseva and timeout */
session_vpp_event_queues_allocate (smm);
/* Initialize fifo segment main baseva and timeout */
- svm_fifo_segment_init (smm->session_baseva + smm->evt_qs_segment_size,
- smm->segment_timeout);
+ sm_args->baseva = smm->session_baseva + smm->evt_qs_segment_size;
+ sm_args->size = smm->session_va_space_size;
+ segment_manager_main_init (sm_args);
/* Preallocate sessions */
if (smm->preallocated_sessions)
/* Preallocate sessions */
if (smm->preallocated_sessions)
@@
-1242,7
+1239,7
@@
session_manager_main_init (vlib_main_t * vm)
{
session_manager_main_t *smm = &session_manager_main;
smm->session_baseva = 0x200000000ULL;
{
session_manager_main_t *smm = &session_manager_main;
smm->session_baseva = 0x200000000ULL;
- smm->se
gment_timeout = 2
0;
+ smm->se
ssion_va_space_size = (u64) 128 << 3
0;
smm->evt_qs_segment_size = 64 << 20;
smm->is_enabled = 0;
return 0;
smm->evt_qs_segment_size = 64 << 20;
smm->is_enabled = 0;
return 0;