logd: correct for number of elements in prune
(cherry pick from commit 58b8be8906)
Chatty logs would distort the average log size by elevating the
elements, but not the size. Add statistical collection for the
number of elements that report chatty, and subtract that from
the number of elements to improve the pruning estimate. Pick
minElements as 1% rather than 10% of the total with this more
accurate number of elements, to a minumum of 4.
Bug: 24511000
Change-Id: I3f36558138aa0b2a50e4fac6440c3a8505d95276
This commit is contained in:
parent
6326bb8fd2
commit
13f42ec2f1
4 changed files with 20 additions and 3 deletions
|
|
@ -225,8 +225,11 @@ void LogBuffer::maybePrune(log_id_t id) {
|
|||
unsigned long maxSize = log_buffer_size(id);
|
||||
if (sizes > maxSize) {
|
||||
size_t sizeOver = sizes - ((maxSize * 9) / 10);
|
||||
size_t elements = stats.elements(id);
|
||||
size_t minElements = elements / 10;
|
||||
size_t elements = stats.realElements(id);
|
||||
size_t minElements = elements / 100;
|
||||
if (minElements < minPrune) {
|
||||
minElements = minPrune;
|
||||
}
|
||||
unsigned long pruneRows = elements * sizeOver / sizes;
|
||||
if (pruneRows < minElements) {
|
||||
pruneRows = minElements;
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ public:
|
|||
|
||||
private:
|
||||
|
||||
static constexpr size_t minPrune = 4;
|
||||
static constexpr size_t maxPrune = 256;
|
||||
|
||||
void maybePrune(log_id_t id);
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ LogStatistics::LogStatistics() : enable(false) {
|
|||
log_id_for_each(id) {
|
||||
mSizes[id] = 0;
|
||||
mElements[id] = 0;
|
||||
mDroppedElements[id] = 0;
|
||||
mSizesTotal[id] = 0;
|
||||
mElementsTotal[id] = 0;
|
||||
}
|
||||
|
|
@ -93,6 +94,9 @@ void LogStatistics::subtract(LogBufferElement *element) {
|
|||
unsigned short size = element->getMsgLen();
|
||||
mSizes[log_id] -= size;
|
||||
--mElements[log_id];
|
||||
if (element->getDropped()) {
|
||||
--mDroppedElements[log_id];
|
||||
}
|
||||
|
||||
if (log_id == LOG_ID_KERNEL) {
|
||||
return;
|
||||
|
|
@ -119,6 +123,7 @@ void LogStatistics::drop(LogBufferElement *element) {
|
|||
log_id_t log_id = element->getLogId();
|
||||
unsigned short size = element->getMsgLen();
|
||||
mSizes[log_id] -= size;
|
||||
++mDroppedElements[log_id];
|
||||
|
||||
uidTable[log_id].drop(element->getUid(), element);
|
||||
|
||||
|
|
|
|||
|
|
@ -374,6 +374,7 @@ struct TagEntry : public EntryBase {
|
|||
class LogStatistics {
|
||||
size_t mSizes[LOG_ID_MAX];
|
||||
size_t mElements[LOG_ID_MAX];
|
||||
size_t mDroppedElements[LOG_ID_MAX];
|
||||
size_t mSizesTotal[LOG_ID_MAX];
|
||||
size_t mElementsTotal[LOG_ID_MAX];
|
||||
bool enable;
|
||||
|
|
@ -404,7 +405,11 @@ public:
|
|||
// entry->setDropped(1) must follow this call
|
||||
void drop(LogBufferElement *entry);
|
||||
// Correct for coalescing two entries referencing dropped content
|
||||
void erase(LogBufferElement *e) { --mElements[e->getLogId()]; }
|
||||
void erase(LogBufferElement *element) {
|
||||
log_id_t log_id = element->getLogId();
|
||||
--mElements[log_id];
|
||||
--mDroppedElements[log_id];
|
||||
}
|
||||
|
||||
std::unique_ptr<const UidEntry *[]> sort(size_t len, log_id id) {
|
||||
return uidTable[id].sort(len);
|
||||
|
|
@ -413,6 +418,9 @@ public:
|
|||
// fast track current value by id only
|
||||
size_t sizes(log_id_t id) const { return mSizes[id]; }
|
||||
size_t elements(log_id_t id) const { return mElements[id]; }
|
||||
size_t realElements(log_id_t id) const {
|
||||
return mElements[id] - mDroppedElements[id];
|
||||
}
|
||||
size_t sizesTotal(log_id_t id) const { return mSizesTotal[id]; }
|
||||
size_t elementsTotal(log_id_t id) const { return mElementsTotal[id]; }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue