logd suffers major performance degradation when persistent (blocking) client reader connects to it (e.g. logcat). The root cause of the degradation is that each time when reader is notified of the arrival of new log entries, the reader commences its search for the new entries from the beginning of the linked list (oldest entries first). This commit alters the search to start from the end of the linked list and work backwards. This dramatically decreases logd CPU consumption when blocking reader is connected, and increases the maximum logging throughput (before the logs start getting lost) by a factor ~ 20. Change-Id: Ib60955ce05544e52a8b24acc3dcf5863e1e39c5c |
||
|---|---|---|
| .. | ||
| tests | ||
| Android.mk | ||
| CommandListener.cpp | ||
| CommandListener.h | ||
| event.logtags | ||
| FlushCommand.cpp | ||
| FlushCommand.h | ||
| libaudit.c | ||
| libaudit.h | ||
| LogAudit.cpp | ||
| LogAudit.h | ||
| LogBuffer.cpp | ||
| LogBuffer.h | ||
| LogBufferElement.cpp | ||
| LogBufferElement.h | ||
| LogCommand.cpp | ||
| LogCommand.h | ||
| LogListener.cpp | ||
| LogListener.h | ||
| LogReader.cpp | ||
| LogReader.h | ||
| LogStatistics.cpp | ||
| LogStatistics.h | ||
| LogTimes.cpp | ||
| LogTimes.h | ||
| LogWhiteBlackList.cpp | ||
| LogWhiteBlackList.h | ||
| main.cpp | ||
| README.auditd | ||
| README.property | ||
The properties that logd responds to are:
name type default description
logd.auditd bool true Enable selinux audit daemon
logd.auditd.dmesg bool true selinux audit messages duplicated and
sent on to dmesg log
logd.statistics bool depends Enable logcat -S statistics.
ro.config.low_ram bool false if true, logd.statistics default false
ro.build.type string if user, logd.statistics default false
logd.statistics.dgram_qlen bool false Record dgram_qlen statistics. This
represents a performance impact and
is used to determine the platform's
minimum domain socket network FIFO
size (see source for details) based
on typical load (logcat -S to view)
persist.logd.size number 256K default size of the buffer for all
log ids at initial startup, at runtime
use: logcat -b all -G <value>
persist.logd.size.main number 256K Size of the buffer for the main log
persist.logd.size.system number 256K Size of the buffer for the system log
persist.logd.size.radio number 256K Size of the buffer for the radio log
persist.logd.size.event number 256K Size of the buffer for the event log
persist.logd.size.crash number 256K Size of the buffer for the crash log
NB:
- number support multipliers (K or M) for convenience. Range is limited
to between 64K and 256M for log buffer sizes. Individual logs override the
global default.