Type: feature
Showing number of allocated chunks by size, in addition to the freelist chunks by size.
Signed-off-by: Ryujiro Shibuya <ryujiro.shibuya@owmobility.com>
Change-Id: I50f7b695a217f132d5f0b307182a34752d3fe1dc
{
fss = fsh_slice_get (fsh, i);
vec_validate_init_empty (fss->free_chunks, max_chunk_sz, 0);
{
fss = fsh_slice_get (fsh, i);
vec_validate_init_empty (fss->free_chunks, max_chunk_sz, 0);
+ vec_validate_init_empty (fss->num_chunks, max_chunk_sz, 0);
clib_spinlock_init (&fss->chunk_lock);
}
clib_spinlock_init (&fss->chunk_lock);
}
cmem += sizeof (*c) + rounded_data_size;
}
cmem += sizeof (*c) + rounded_data_size;
}
+ fss->num_chunks[fl_index] += batch_size;
fss->n_fl_chunk_bytes += batch_size * rounded_data_size;
fsh_cached_bytes_add (fsh, batch_size * rounded_data_size);
fsh_free_bytes_sub (fsh, size);
fss->n_fl_chunk_bytes += batch_size * rounded_data_size;
fsh_cached_bytes_add (fsh, batch_size * rounded_data_size);
fsh_free_bytes_sub (fsh, size);
fmem += hdrs + rounded_data_size;
}
fmem += hdrs + rounded_data_size;
}
+ fss->num_chunks[fl_index] += batch_size;
fss->n_fl_chunk_bytes += batch_size * rounded_data_size;
fsh_cached_bytes_add (fsh, batch_size * rounded_data_size);
fsh_free_bytes_sub (fsh, size);
fss->n_fl_chunk_bytes += batch_size * rounded_data_size;
fsh_cached_bytes_add (fsh, batch_size * rounded_data_size);
fsh_free_bytes_sub (fsh, size);
ssvm_pop_heap (oldheap);
if (f)
{
ssvm_pop_heap (oldheap);
if (f)
{
+ fss->num_chunks[fl_index] += 1;
fsh_free_bytes_sub (fsh, fifo_sz);
goto done;
}
fsh_free_bytes_sub (fsh, fifo_sz);
goto done;
}
+ fss->num_chunks[fl_index] += 1;
fsh_free_bytes_sub (fsh, chunk_size + sizeof (*c));
goto done;
}
fsh_free_bytes_sub (fsh, chunk_size + sizeof (*c));
goto done;
}
fsh_cached_bytes_add (fsh, rounded_data_size);
}
fsh_cached_bytes_add (fsh, rounded_data_size);
}
+ fss->num_chunks[fl_index] += batch_size;
fss->n_fl_chunk_bytes += batch_size * rounded_data_size;
fsh_free_bytes_sub (fsh, size);
fss->n_fl_chunk_bytes += batch_size * rounded_data_size;
fsh_free_bytes_sub (fsh, size);
free_chunks = fifo_segment_num_free_chunks (fs, ~0);
if (free_chunks)
free_chunks = fifo_segment_num_free_chunks (fs, ~0);
if (free_chunks)
- s = format (s, "\n\n%UFree chunks by size:\n", format_white_space,
- indent + 2);
+ s =
+ format (s, "\n\n%UFree/Allocated chunks by size:\n", format_white_space,
+ indent + 2);
else
s = format (s, "\n");
else
s = format (s, "\n");
for (i = 0; i < vec_len (fss->free_chunks); i++)
{
c = fss->free_chunks[i];
for (i = 0; i < vec_len (fss->free_chunks); i++)
{
c = fss->free_chunks[i];
+ if (c == 0 && fss->num_chunks[i] == 0)
continue;
count = 0;
while (c)
continue;
count = 0;
while (c)
}
chunk_size = fs_freelist_index_to_size (i);
}
chunk_size = fs_freelist_index_to_size (i);
- s = format (s, "%U%-5u kB: %u\n", format_white_space, indent + 2,
- chunk_size >> 10, count);
+ s = format (s, "%U%-5u kB: %u/%u\n", format_white_space, indent + 2,
+ chunk_size >> 10, count, fss->num_chunks[i]);
chunk_bytes += count * chunk_size;
}
chunk_bytes += count * chunk_size;
}
svm_fifo_t *fifos; /**< Linked list of active RX fifos */
svm_fifo_t *free_fifos; /**< Freelists by fifo size */
svm_fifo_chunk_t **free_chunks; /**< Freelists by chunk size */
svm_fifo_t *fifos; /**< Linked list of active RX fifos */
svm_fifo_t *free_fifos; /**< Freelists by fifo size */
svm_fifo_chunk_t **free_chunks; /**< Freelists by chunk size */
+ u32 *num_chunks; /**< Allocated chunks by chunk size */
uword n_fl_chunk_bytes; /**< Chunk bytes on freelist */
uword virtual_mem; /**< Slice sum of all fifo sizes */
clib_spinlock_t chunk_lock;
uword n_fl_chunk_bytes; /**< Chunk bytes on freelist */
uword virtual_mem; /**< Slice sum of all fifo sizes */
clib_spinlock_t chunk_lock;