platform_system_core/libcutils
Mark Salyzyn f089e1403b llkd: add live-lock daemon
Introduce a standalone live-lock daemon (llkd), to catch kernel
or native user space deadlocks and take mitigating actions.  Will
also configure [khungtaskd] to fortify the actions.

If a thread is in D or Z state with no forward progress for longer
than ro.llk.timeout_ms, or ro.llk.[D|Z].timeout_ms, kill the process
or parent process respectively.  If another scan shows the same
process continues to exist, then have a confirmed live-lock condition
and need to panic.  Panic the kernel in a manner to provide the
greatest bugreporting details as to the condition.  Add a alarm self
watchdog should llkd ever get locked up that is double the expected
time to flow through the mainloop.  Sampling is every
ro.llk_sample_ms.

Default will not monitor init, or [kthreadd] and all that [kthreadd]
spawns.  This reduces the effectiveness of llkd by limiting its
coverage.  If in the future, if value in covering kthreadd spawned
threads, the requirement will be to code drivers so that they do not
remain in a persistent 'D' state, or that they have mechanisms to
recover the thread should it be killed externally.  Then the
blacklists can be adjusted accordingly if these conditions are met.

An accompanying gTest set have been added, and will setup a persistent
D or Z process, with and without forward progress, but not in a
live-lock state because that would require a buggy kernel, or a module
or kernel modification to stimulate.

Android Properties llkd respond to (*_ms parms are in milliseconds):
- ro.config.low_ram default false, if true do not sysrq t (dump
  all threads).
- ro.llk.enable default false, allow live-lock daemon to be enabled.
- ro.khungtask.enable default false, allow [khungtaskd] to be enabled.
- ro.llk.mlockall default true, allow mlock'd live-lock daemon.
- ro.khungtask.timeout default 12 minutes.
- ro.llk.timeout_ms default 10 minutes, D or Z maximum timelimit,
  double this value and it sets the alarm watchdog for llkd.
- ro.llk.D.timeout_ms default ro.llk.timeout_ms, D maximum timelimit.
- ro.llk.Z.timeout_ms default ro.llk.timeout_ms, Z maximum timelimit.
- ro.llk.check_ms default 2 minutes sampling interval
  (ro.llk.timeout_ms / 5) for threads in D or Z state.
- ro.llk.blacklist.process default 0,1,2 (kernel, init and
  [kthreadd]), and process names (/comm or /cmdline) init,[kthreadd],
  lmkd,lmkd.llkd,llkd,[khungtaskd],watchdogd,[watchdogd],
  [watchdogd/0] ...
- ro.llk.blacklist.parent default 0,2 (kernel and [kthreadd]) and
  "[kthreadd]".  A comma separated lists of process ids, /comm names
  or /cmdline names.
- ro.llk.blacklist.uid default <empty>, comma separated list of
  uid numbers or names from getpwuid/getpwnam.

Test: llkd_unit_test
Bug: 33808187
Bug: 72838192
Change-Id: I32e8aa78aef10834e093265d0f3ed5b4199807c6
2018-04-18 14:01:56 -07:00
..
arch-arm Switch arch-arm/memset32.S to unified syntax. 2015-05-11 22:22:13 -07:00
arch-arm64 Add android_memset16/android_memset32 for aarch64. 2014-06-23 19:28:33 -07:00
arch-mips android_memset.c: Use sanitized shifts 2015-08-27 14:32:17 -07:00
arch-x86 Clean up memset[16,32] routines: unify files names, remove redundant wrapper 2014-09-17 18:11:18 +04:00
arch-x86_64 Clean up memset[16,32] routines: unify files names, remove redundant wrapper 2014-09-17 18:11:18 +04:00
include llkd: add live-lock daemon 2018-04-18 14:01:56 -07:00
include_vndk/cutils Remove private headers from libcutils.vendor 2017-08-02 16:40:36 -07:00
tests libcutils: test: increase use of ashmem_valid(fd) 2018-01-26 09:50:57 -08:00
Android.bp Use override_export_include_dirs. 2018-01-05 14:42:12 -08:00
MODULE_LICENSE_APACHE2 auto import from //depot/cupcake/@135843 2009-03-03 19:32:55 -08:00
NOTICE auto import from //depot/cupcake/@135843 2009-03-03 19:32:55 -08:00
android_get_control_env.h libcutils: move cutils/files.h to cutils/android_get_control_file.h 2016-11-16 15:56:56 -08:00
android_get_control_file.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
android_reboot.cpp Stop defining local "unused" macros now this is C++. 2017-11-30 16:24:36 -08:00
ashmem-dev.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
ashmem-host.cpp Stop defining local "unused" macros now this is C++. 2017-11-30 16:24:36 -08:00
canned_fs_config.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
config_utils.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
fs.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
fs_config.cpp Remove vendor Wifi and BT entries from fs_config.cpp 2018-03-29 14:10:12 -07:00
hashmap.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
iosched_policy.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
klog.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
load_file.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
multiuser.cpp Better, consistent definition of AID_SHARED_GID. 2017-11-13 16:49:26 -07:00
native_handle.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
open_memstream.c Remove dead code. 2014-11-08 11:32:07 -08:00
partition_utils.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
properties.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
qtaguid.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
record_stream.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
sched_policy.cpp Stop defining local "unused" macros now this is C++. 2017-11-30 16:24:36 -08:00
socket_inaddr_any_server_unix.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
socket_inaddr_any_server_windows.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
socket_local_client_unix.cpp Stop defining local "unused" macros now this is C++. 2017-11-30 16:24:36 -08:00
socket_local_server_unix.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
socket_local_unix.h libcutils: share Windows networking code. 2016-01-15 15:57:35 -08:00
socket_network_client_unix.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
socket_network_client_windows.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
sockets.cpp libcutils: move cutils/files.h to cutils/android_get_control_file.h 2016-11-16 15:56:56 -08:00
sockets_unix.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
sockets_windows.cpp Fix / suppress new unused warnings for mingw+clang 2017-11-29 21:37:28 -08:00
str_parms.cpp Stop defining local "unused" macros now this is C++. 2017-11-30 16:24:36 -08:00
strdup8to16.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
strdup16to8.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
strlcpy.c Fix Windows strlcpy.c build. 2015-04-02 17:21:47 -07:00
threads.cpp Fix / suppress new unused warnings for mingw+clang 2017-11-29 21:37:28 -08:00
trace-container.cpp Move libcutils source to C++. 2017-11-10 13:18:10 -08:00
trace-dev.cpp Revert "Don't initialize atrace if it's already disabled." 2018-02-08 00:49:37 +00:00
trace-dev.inc Support * as a wildcard for ATRACE_TAG_APP 2018-02-09 20:08:19 -08:00
trace-host.cpp Stop defining local "unused" macros now this is C++. 2017-11-30 16:24:36 -08:00
uevent.cpp libcutils: Stop checking the uid of netlink messages 2018-01-08 13:24:32 -08:00