diff options
Diffstat (limited to 'vespalib/src/vespa/vespalib/datastore/buffer_type.cpp')
-rw-r--r-- | vespalib/src/vespa/vespalib/datastore/buffer_type.cpp | 31 |
1 files changed, 8 insertions, 23 deletions
diff --git a/vespalib/src/vespa/vespalib/datastore/buffer_type.cpp b/vespalib/src/vespa/vespalib/datastore/buffer_type.cpp index 068c58a163c..eb5865cd68c 100644 --- a/vespalib/src/vespa/vespalib/datastore/buffer_type.cpp +++ b/vespalib/src/vespa/vespalib/datastore/buffer_type.cpp @@ -32,10 +32,10 @@ BufferTypeBase::BufferTypeBase(uint32_t arraySize, _maxArrays(maxArrays), _numArraysForNewBuffer(std::min(numArraysForNewBuffer, maxArrays)), _allocGrowFactor(allocGrowFactor), + _activeBuffers(0), _holdBuffers(0), _holdUsedElems(0), - _aggr_counts(), - _active_buffers() + _aggr_counts() { } @@ -48,10 +48,10 @@ BufferTypeBase::BufferTypeBase(uint32_t arraySize, BufferTypeBase::~BufferTypeBase() { + assert(_activeBuffers == 0); assert(_holdBuffers == 0); assert(_holdUsedElems == 0); assert(_aggr_counts.empty()); - assert(_active_buffers.empty()); } ElemCount @@ -63,9 +63,8 @@ BufferTypeBase::getReservedElements(uint32_t bufferId) const void BufferTypeBase::onActive(uint32_t bufferId, ElemCount* usedElems, ElemCount* deadElems, void* buffer) { + ++_activeBuffers; _aggr_counts.add_buffer(usedElems, deadElems); - assert(std::find(_active_buffers.begin(), _active_buffers.end(), bufferId) == _active_buffers.end()); - _active_buffers.emplace_back(bufferId); size_t reservedElems = getReservedElements(bufferId); if (reservedElems != 0u) { initializeReservedElements(buffer, reservedElems); @@ -75,12 +74,10 @@ BufferTypeBase::onActive(uint32_t bufferId, ElemCount* usedElems, ElemCount* dea } void -BufferTypeBase::onHold(uint32_t buffer_id, const ElemCount* usedElems, const ElemCount* deadElems) +BufferTypeBase::onHold(const ElemCount* usedElems, const ElemCount* deadElems) { + --_activeBuffers; ++_holdBuffers; - auto itr = std::find(_active_buffers.begin(), _active_buffers.end(), buffer_id); - assert(itr != _active_buffers.end()); - _active_buffers.erase(itr); _aggr_counts.remove_buffer(usedElems, deadElems); _holdUsedElems += *usedElems; } @@ -93,17 +90,6 @@ BufferTypeBase::onFree(ElemCount usedElems) _holdUsedElems -= usedElems; } -void -BufferTypeBase::resume_primary_buffer(uint32_t buffer_id, ElemCount* used_elems, ElemCount* dead_elems) -{ - auto itr = std::find(_active_buffers.begin(), _active_buffers.end(), buffer_id); - assert(itr != _active_buffers.end()); - _active_buffers.erase(itr); - _active_buffers.emplace_back(buffer_id); - _aggr_counts.remove_buffer(used_elems, dead_elems); - _aggr_counts.add_buffer(used_elems, dead_elems); -} - const alloc::MemoryAllocator* BufferTypeBase::get_memory_allocator() const { @@ -155,11 +141,10 @@ BufferTypeBase::calcArraysToAlloc(uint32_t bufferId, ElemCount elemsNeeded, bool uint32_t BufferTypeBase::get_scaled_num_arrays_for_new_buffer() const { - uint32_t active_buffers_count = get_active_buffers_count(); - if (active_buffers_count <= 1u || _numArraysForNewBuffer == 0u) { + if (_activeBuffers <= 1u || _numArraysForNewBuffer == 0u) { return _numArraysForNewBuffer; } - double scale_factor = std::pow(1.0 + _allocGrowFactor, active_buffers_count - 1); + double scale_factor = std::pow(1.0 + _allocGrowFactor, _activeBuffers - 1); double scaled_result = _numArraysForNewBuffer * scale_factor; if (scaled_result >= _maxArrays) { return _maxArrays; |