Merge "logd: sizes > 1M prune in smaller batches"
This commit is contained in:
commit
ea56594c94
1 changed files with 15 additions and 8 deletions
|
|
@ -218,18 +218,25 @@ int LogBuffer::log(log_id_t log_id, log_time realtime,
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we're using more than 256K of memory for log entries, prune
|
// If we're using more than 256K of memory for log entries, prune
|
||||||
// at least 10% of the log entries.
|
// at least 10% of the log entries. For sizes above 1M, prune at
|
||||||
|
// least 1% of the log entries.
|
||||||
//
|
//
|
||||||
// mLogElementsLock must be held when this function is called.
|
// mLogElementsLock must be held when this function is called.
|
||||||
void LogBuffer::maybePrune(log_id_t id) {
|
void LogBuffer::maybePrune(log_id_t id) {
|
||||||
size_t sizes = stats.sizes(id);
|
size_t sizes = stats.sizes(id);
|
||||||
if (sizes > log_buffer_size(id)) {
|
unsigned long maxSize = log_buffer_size(id);
|
||||||
size_t sizeOver90Percent = sizes - ((log_buffer_size(id) * 9) / 10);
|
if (sizes > maxSize) {
|
||||||
size_t elements = stats.elements(id);
|
size_t sizeOver, minElements, elements = stats.elements(id);
|
||||||
unsigned long pruneRows = elements * sizeOver90Percent / sizes;
|
if (maxSize > (4 * LOG_BUFFER_SIZE)) {
|
||||||
elements /= 10;
|
sizeOver = sizes - ((maxSize * 99) / 100);
|
||||||
if (pruneRows <= elements) {
|
minElements = elements / 100;
|
||||||
pruneRows = elements;
|
} else {
|
||||||
|
sizeOver = sizes - ((maxSize * 9) / 10);
|
||||||
|
minElements = elements / 10;
|
||||||
|
}
|
||||||
|
unsigned long pruneRows = elements * sizeOver / sizes;
|
||||||
|
if (pruneRows <= minElements) {
|
||||||
|
pruneRows = minElements;
|
||||||
}
|
}
|
||||||
prune(id, pruneRows);
|
prune(id, pruneRows);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue