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: improve fifo segment allocation
[vpp.git]
/
src
/
svm
/
fifo_segment.c
diff --git
a/src/svm/fifo_segment.c
b/src/svm/fifo_segment.c
index
b680d27
..
48d019c
100644
(file)
--- a/
src/svm/fifo_segment.c
+++ b/
src/svm/fifo_segment.c
@@
-105,13
+105,14
@@
fsh_n_active_fifos (fifo_segment_header_t * fsh)
}
static inline uword
}
static inline uword
-fs
h_virtual_mem (fifo_segment_header_t * fsh
)
+fs
_virtual_mem (fifo_segment_t *fs
)
{
{
+ fifo_segment_header_t *fsh = fs->h;
fifo_segment_slice_t *fss;
uword total_vm = 0;
int i;
fifo_segment_slice_t *fss;
uword total_vm = 0;
int i;
- for (i = 0; i < fs
h
->n_slices; i++)
+ for (i = 0; i < fs->n_slices; i++)
{
fss = fsh_slice_get (fsh, i);
total_vm += clib_atomic_load_relax_n (&fss->virtual_mem);
{
fss = fsh_slice_get (fsh, i);
total_vm += clib_atomic_load_relax_n (&fss->virtual_mem);
@@
-294,7
+295,7
@@
fss_fl_chunk_bytes_sub (fifo_segment_slice_t * fss, uword size)
int
fifo_segment_init (fifo_segment_t * fs)
{
int
fifo_segment_init (fifo_segment_t * fs)
{
- u32 align = 8, offset =
2 * 4096
, slices_sz, i;
+ u32 align = 8, offset =
FIFO_SEGMENT_ALLOC_OVERHEAD
, slices_sz, i;
uword max_fifo, seg_start, seg_sz;
fifo_segment_header_t *fsh;
ssvm_shared_header_t *sh;
uword max_fifo, seg_start, seg_sz;
fifo_segment_header_t *fsh;
ssvm_shared_header_t *sh;
@@
-903,6
+904,14
@@
fifo_segment_alloc_fifo_w_offset (fifo_segment_t *fs, uword offset)
return f;
}
return f;
}
+svm_fifo_t *
+fifo_segment_duplicate_fifo (fifo_segment_t *fs, svm_fifo_t *f)
+{
+ svm_fifo_t *nf = fs_fifo_alloc (fs, 0);
+ clib_memcpy (nf, f, sizeof (*f));
+ return nf;
+}
+
/**
* Free fifo allocated in fifo segment
*/
/**
* Free fifo allocated in fifo segment
*/
@@
-1368,16
+1377,16
@@
fifo_segment_size (fifo_segment_t * fs)
return fs->h->max_byte_index - fs->h->n_reserved_bytes;
}
return fs->h->max_byte_index - fs->h->n_reserved_bytes;
}
-u8
-fs
h_has_reached_mem_limit (fifo_segment_header_t * fsh
)
+
static
u8
+fs
_has_reached_mem_limit (fifo_segment_t *fs
)
{
{
- return (fs
h
->flags & FIFO_SEGMENT_F_MEM_LIMIT) ? 1 : 0;
+ return (fs->flags & FIFO_SEGMENT_F_MEM_LIMIT) ? 1 : 0;
}
}
-void
-fs
h_reset_mem_limit (fifo_segment_header_t * fsh
)
+
static
void
+fs
_reset_mem_limit (fifo_segment_t *fs
)
{
{
- fs
h
->flags &= ~FIFO_SEGMENT_F_MEM_LIMIT;
+ fs->flags &= ~FIFO_SEGMENT_F_MEM_LIMIT;
}
void *
}
void *
@@
-1452,26
+1461,26
@@
fifo_segment_get_mem_usage (fifo_segment_t * fs)
}
fifo_segment_mem_status_t
}
fifo_segment_mem_status_t
-fifo_segment_determine_status (fifo_segment_
header_t * fsh
, u8 usage)
+fifo_segment_determine_status (fifo_segment_
t *fs
, u8 usage)
{
{
- if (!fs
h->high_watermark || !fsh
->low_watermark)
+ if (!fs
->high_watermark || !fs
->low_watermark)
return MEMORY_PRESSURE_NO_PRESSURE;
/* once the no-memory is detected, the status continues
* until memory usage gets below the high watermark
*/
return MEMORY_PRESSURE_NO_PRESSURE;
/* once the no-memory is detected, the status continues
* until memory usage gets below the high watermark
*/
- if (fs
h_has_reached_mem_limit (fsh
))
+ if (fs
_has_reached_mem_limit (fs
))
{
{
- if (usage >= fs
h
->high_watermark)
+ if (usage >= fs->high_watermark)
return MEMORY_PRESSURE_NO_MEMORY;
else
return MEMORY_PRESSURE_NO_MEMORY;
else
- fs
h_reset_mem_limit (fsh
);
+ fs
_reset_mem_limit (fs
);
}
}
- if (usage >= fs
h
->high_watermark)
+ if (usage >= fs->high_watermark)
return MEMORY_PRESSURE_HIGH_PRESSURE;
return MEMORY_PRESSURE_HIGH_PRESSURE;
- else if (usage >= fs
h
->low_watermark)
+ else if (usage >= fs->low_watermark)
return MEMORY_PRESSURE_LOW_PRESSURE;
return MEMORY_PRESSURE_NO_PRESSURE;
return MEMORY_PRESSURE_LOW_PRESSURE;
return MEMORY_PRESSURE_NO_PRESSURE;
@@
-1480,10
+1489,9
@@
fifo_segment_determine_status (fifo_segment_header_t * fsh, u8 usage)
fifo_segment_mem_status_t
fifo_segment_get_mem_status (fifo_segment_t * fs)
{
fifo_segment_mem_status_t
fifo_segment_get_mem_status (fifo_segment_t * fs)
{
- fifo_segment_header_t *fsh = fs->h;
u8 usage = fifo_segment_get_mem_usage (fs);
u8 usage = fifo_segment_get_mem_usage (fs);
- return fifo_segment_determine_status (fs
h
, usage);
+ return fifo_segment_determine_status (fs, usage);
}
u8 *
}
u8 *
@@
-1590,7
+1598,7
@@
format_fifo_segment (u8 * s, va_list * args)
in_use = fifo_segment_size (fs) - est_free_seg_bytes - tracked_cached_bytes;
usage = (100.0 * in_use) / allocated;
mem_st = fifo_segment_get_mem_status (fs);
in_use = fifo_segment_size (fs) - est_free_seg_bytes - tracked_cached_bytes;
usage = (100.0 * in_use) / allocated;
mem_st = fifo_segment_get_mem_status (fs);
- virt = fs
h_virtual_mem (fsh
);
+ virt = fs
_virtual_mem (fs
);
reserved = fsh->n_reserved_bytes;
s = format (s, "\n%Useg free bytes: %U (%lu) estimated: %U (%lu) reserved:"
reserved = fsh->n_reserved_bytes;
s = format (s, "\n%Useg free bytes: %U (%lu) estimated: %U (%lu) reserved:"