Commit Graph

485 Commits

Author SHA1 Message Date
Suren Baghdasaryan 8fa0ac5c64 lmkd: Remove unused variables and fix type mismatches am: ed715a3424
Change-Id: Ibcce20a6b9d724e102740683df45a16a0dfb3708
2020-05-12 19:19:53 +00:00
Suren Baghdasaryan ed715a3424 lmkd: Remove unused variables and fix type mismatches
Fix compilation warnings by removing unused variables and add typecasting
whenever mixed type comparisons are performed.

Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Change-Id: I7f0839d803a6bf6532f077208ce54aba761dc9fe
2020-05-11 19:52:52 -07:00
Suren Baghdasaryan 4434ef0223 lmkd: Add property re-initialization support am: 1d0ebeaa9c
Change-Id: I0d29bf11bb96a7b97174a0def2753ea169835802
2020-05-07 16:00:43 +00:00
Suren Baghdasaryan 1d0ebeaa9c lmkd: Add property re-initialization support
Add --reinit command-line option to allow updating lmkd properties. For
example to enable debug logging in the running lmkd process user should
issue:

setprop ro.lmk.debug true
lmkd --reinit

Bug: 155149944
Test: lmkd_unit_test after resetting lmkd properties
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Change-Id: Ic60331f3368f5a7fdfe09ad7d47c7ccf0a497685
2020-05-06 15:05:04 -07:00
Suren Baghdasaryan d77a36e91b lmkd: enable ro.lmk.kill_timeout_ms to be used with kill notifications am: 03dccf35a1
Change-Id: I564cf2f1f21481b13f53df0606d03226c444ef19
2020-04-30 00:17:07 +00:00
Suren Baghdasaryan 63123e1b84 lmkd: polling code cleanup am: 9ca5334683
Change-Id: I4cf6a8f55d9fc127d80686c07ce2893f3146f0da
2020-04-30 00:17:01 +00:00
Suren Baghdasaryan 45737af035 lmkd: add kill when swap utilization is too high am: 51ee4c505f
Change-Id: If8e5648ae6965d1f26c0032aa0ca548695d2b33f
2020-04-30 00:16:54 +00:00
Suren Baghdasaryan 03dccf35a1 lmkd: enable ro.lmk.kill_timeout_ms to be used with kill notifications
Allow lmkd to stop waiting for a kill notification if a kill takes longer
than ro.lmk.kill_timeout_ms.

Bug: 147315292
Test: lmkd_unit_test with ro.lmk.kill_timeout_ms set to 100
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Change-Id: Ia3eed3448fd6928a5e634c2737044722048b3578
2020-04-29 15:11:36 -07:00
Suren Baghdasaryan 9ca5334683 lmkd: polling code cleanup
- Remove unused POLLING_STOP state
- Simplify POLLING_DO_NOT_CHANGE state handling
- Correct last_poll_tm assignment logic

Bug: 147315292
Test: lmkd_unit_test
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Change-Id: If0674eda954a25f0f6c9188501ff77db8ba0813b
2020-04-29 15:11:15 -07:00
Suren Baghdasaryan 51ee4c505f lmkd: add kill when swap utilization is too high
When non-swappable allocations cause memory pressure swap will not be
depleted, however a high percentage of the swappable memory will be
pushed into swap. Detect this condition and kill a process when swap
utilization is too high while under memory pressure.
Introduce ro.lmk.swap_util_max property to represent max percentage of
the overall swappable memory that can be swapped under memory pressure
without triggering a kill. ro.lmk.swap_util_max is set to 100 by default
which disables kills due to the swap utilization.

Bug: 147315292
Test: ION memory hogger with ro.lmk.swap_util_max set to 95
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Change-Id: I6dbf124bb24b220d136e8f16b3dae0c0c30d32ca
2020-04-29 15:11:02 -07:00
Tom Cherry e3858891a4 Include what you use: <stdio.h> and <unistd.h> am: 24b31dced5
Change-Id: Id5cebf4c2e8e268d8b64c30c02cc5265190677ca
2020-04-14 01:13:01 +00:00
Tom Cherry 24b31dced5 Include what you use: <stdio.h> and <unistd.h>
These were transitively included, but no longer are, so they must be
explicitly included.

Exempt-From-Owner-Approval: Janitorial
Test: build
Change-Id: Ic0896401d148b22f33d6edb1fac377208e437565
2020-04-13 15:21:09 -07:00
Tom Cherry 8ba967fb30 Include what you use: <fcntl.h> am: 0ebe6800bc
Change-Id: I9cec3a4d2e00e996880beaaacf55d74a12f6a016
2020-04-13 19:36:16 +00:00
Tom Cherry 0ebe6800bc Include what you use: <fcntl.h>
This was transitively included, but no longer is, so it must be
explicitly included.

Exempt-From-Owner-Approval: Janitorial
Test: build
Change-Id: I89657fa33df4bc0f92685012b3ab9b24d55d1619
2020-04-13 11:10:12 -07:00
Xin Li ee05bc2f99 DO NOT MERGE - Empty merge qt-qpr1-dev-plus-aosp into stag-aosp-master
Bug: 151763422
Change-Id: I4d701ead7b0d88ae89575f79844557290e109f66
2020-04-09 17:51:29 -07:00
Xin Li 3313cbce58 DO NOT MERGE - Empty merge qt-qpr1-dev-plus-aosp@6304901 into stag-aosp-master am: a28018dcb9
Change-Id: I38113dd9d2071de5be0e90bab55297d00a5b5d35
2020-03-19 04:22:52 +00:00
Xin Li a28018dcb9 DO NOT MERGE - Empty merge qt-qpr1-dev-plus-aosp@6304901 into stag-aosp-master
Bug: 151763422
Change-Id: I3ea7e3bb734ff3fb28e34c7b246065541c62c23b
2020-03-18 19:40:58 -07:00
Automerger Merge Worker 23a9195feb lmkd_test: set process types am: fce58e9165 am: 8b760ee3d4
Change-Id: Ib2981a1ee5dfd276dee992e8fb599e0a3d591eec
2020-03-09 20:19:04 +00:00
Automerger Merge Worker 8b760ee3d4 lmkd_test: set process types am: fce58e9165
Change-Id: Icdfe43af674d3643a3c304c16bc827762151f050
2020-03-09 20:03:53 +00:00
Martin Liu fce58e9165 lmkd_test: set process types
We introduced supporting process type while
registering a process in lmkd. Thus we need
to set process type when registering the test
unit or lmkd would not be able to kill it.

Bug: 143857475
Test: Verified using lmkd_unit_test
Change-Id: I7bf2b552c242dbdc13bb431248ec9182dccaa599
2020-03-09 13:17:51 +08:00
Muhammad Qureshi e18b6d0b90 Link libstatssocket as a shared library. am: 87168c0e26 am: 2171a0c2f4
Change-Id: Idb85f7875499f727744bd7b6cbe2f40ff7991efe
2020-02-14 22:19:30 +00:00
Muhammad Qureshi 2171a0c2f4 Link libstatssocket as a shared library. am: 87168c0e26
Change-Id: I02b53349508cfead1d6a43704b39ad648bf8e3f0
2020-02-14 22:00:51 +00:00
Muhammad Qureshi 87168c0e26 Link libstatssocket as a shared library.
As part of moving libstatssocket into statsd apex, libstatssocket will
only be available as a shared library.

Bug: 145923416
Test: m
Change-Id: Ia6b13dcd378011c201b2595d2b3f3fc14213011b
2020-02-12 16:42:53 -08:00
Automerger Merge Worker 5759b94152 DO NOT MERGE - Empty merge qt-qpr1-dev-plus-aosp-without-vendor (6129114) into stage-aosp-master am: 45cb77c5bc
Change-Id: Id74bdff1f30e8a1a6da7ddd6c2c989eb1e0f889e
2020-01-16 01:46:18 +00:00
Xin Li 45cb77c5bc DO NOT MERGE - Empty merge qt-qpr1-dev-plus-aosp-without-vendor (6129114) into stage-aosp-master
Bug: 146167222
Change-Id: I0adb962a42c190f863a301731f8cf53237821555
2020-01-15 15:59:17 -08:00
Automerger Merge Worker 08a1f55b5c Use generated code for logging events to statsd am: ed8fe8465a am: 0ecafff527
Change-Id: I3a438b1f43acd9e02031f1da3c66927ace16e607
2020-01-15 23:21:52 +00:00
Muhammad Qureshi 0ecafff527 Use generated code for logging events to statsd
am: ed8fe8465a

Change-Id: I7c80056a8453345552042728e3eea7c5ef5ccdca
2020-01-15 15:03:59 -08:00
Muhammad Qureshi ed8fe8465a Use generated code for logging events to statsd
Use the autogenerated libstatslog_lmkd to send events to statsd

The logging schema for statsd is changing as part of statsd becoming
a Mainline module in R. The autogenerated code will handle the schema
change.

Bug: 145887874
Test: m -j
Test: atest android.cts.statsd.atom.UidAtomTests#testLmkKillOccurred

Change-Id: Ibae4cd822807369a799d5c1f6a9c51272e38a074
2020-01-13 12:16:47 -08:00
Automerger Merge Worker 1c18c3396b lmkd: Restrict lmkd unsolicited notifications only to subscribed recipients am: 36baf44179 am: 9c7233e6c7
Change-Id: Ib77c400f901477dce48127fc87e3531c113db2d9
2019-12-23 23:15:52 +00:00
Suren Baghdasaryan 9c7233e6c7 lmkd: Restrict lmkd unsolicited notifications only to subscribed recipients
am: 36baf44179

Change-Id: Iccb0b07c089bcf345e2dd8b5b08f412f3a891b9a
2019-12-23 15:02:33 -08:00
Suren Baghdasaryan 36baf44179 lmkd: Restrict lmkd unsolicited notifications only to subscribed recipients
lmkd unsolicited notifications can cause lmkd to block if clients are not
consuming them. Fix that by sending notifications to only subscribed
clients. Introduce LMK_SUBSCRIBE command to allow lmkd clients to subscribe
to event notifications. The only asynchronous event currently supported is
LMK_ASYNC_EVENT_KILL.

Bug: 146597855
Test: fill up send buffer using lmkd_unit_test
Test: confirm lmkd does not block after the fix
Change-Id: I014159aa55b59081f4b9ed53ecd160a49c0682bb
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
2019-12-23 12:35:29 -08:00
Automerger Merge Worker 6b9bcd6944 lmkd_test: align proc_name with lmkd am: f2ead0ca1a am: 3cfaed6e43
Change-Id: I78837e4a72b0086498a5b6824d2a7c4ad5b86e86
2019-12-21 04:22:51 +00:00
Martin Liu 3cfaed6e43 lmkd_test: align proc_name with lmkd
am: f2ead0ca1a

Change-Id: If6fa397d5b2a2292270cec666bf8b05dd1bac183
2019-12-20 20:04:21 -08:00
Martin Liu f2ead0ca1a lmkd_test: align proc_name with lmkd
This change is to align how we get proc_name
between lmkd and lmkd_unit_test or it will always
fail when we run command such as ./lmkd_unit_test
under the device shell.

Bug: 146415484
Test: Verified using lmkd_unit_test
Change-Id: I3a6ebf0747a1054c5758b91fbacf3179b66b56c3
2019-12-20 11:12:06 +08:00
Automerger Merge Worker bd6dddceaf Build lmkd as C++ am: 43f3d2b190 am: 9309a1b376
Change-Id: I44b4400d1d499a773e1ec0d716e417a189085724
2019-12-16 17:35:43 +00:00
Tom Cherry 9309a1b376 Build lmkd as C++
am: 43f3d2b190

Change-Id: I372c6b437070c09952dc4c84863db324d4aad912
2019-12-16 09:21:23 -08:00
Tom Cherry 43f3d2b190 Build lmkd as C++
Bug: 145669697
Test: build
Change-Id: I4fb2a9a900c8a6915ee84cc3d82434596301b24b
2019-12-13 08:40:30 -08:00
Automerger Merge Worker 2b3ba70636 lmkd: Support to send unsolicited message to clients am: 5c48096d8d am: 3123c4746c
Change-Id: I3f81a8cc8fb2f81a20e84a27334082a36d4af991
2019-12-13 01:47:08 +00:00
Jing Ji 3123c4746c lmkd: Support to send unsolicited message to clients
am: 5c48096d8d

Change-Id: Idf8184718f6e5a1ed13c1ce3476df81a59335d7d
2019-12-12 16:38:17 -08:00
Jing Ji 5c48096d8d lmkd: Support to send unsolicited message to clients
For now the only unsolicited message from lmkd is the process
kills on memory pressure.

Bug: 136036078
Test: atest ApplicationExitInfoTest

Change-Id: I503fd6a45ebab5276460b0ab978ebb2b8431dc0d
Signed-off-by: Jing Ji <jji@google.com>
2019-12-12 08:53:04 -08:00
George Burgess IV 66e5e052f4 lmkd: fix an overallocation am: a5845e7b60
am: 7b28974872

Change-Id: Ic0fab4e8d6aaa68fa82f926c6bbc7aed5656810e
2019-12-09 14:04:34 -08:00
George Burgess IV 7b28974872 lmkd: fix an overallocation
am: a5845e7b60

Change-Id: I923b746aed263de036baf61b4dde787e1bb1e402
2019-12-09 14:02:45 -08:00
George Burgess IV a5845e7b60 lmkd: fix an overallocation
pidhash is defined as an array of pointers:

static struct proc** pidhash = NULL;

...So we should be allocating `LINE_MAX * sizeof(struct proc *)` elems
here. Given the current constants here, this saves ~130KB, so not a big
deal, but still convenient.

Caught by clang's static analyzer:
system/memory/lmkd/statslog.c:354:19: warning: Result of 'calloc' is
converted to a pointer of type 'struct proc *', which is incompatible
with sizeof operand type 'struct proc'
[clang-analyzer-unix.MallocSizeof]

Bug: None
Test: TreeHugger
Change-Id: Iee9ca00a3a2a0ecababe9810d2ffcfc42169dd25
2019-12-09 11:02:08 -08:00
Suren Baghdasaryan a93503e3d7 lmkd: Support process types when registering a process
Add an optional process type field into lmkd registration protocol so that
applications can be distinguished from services.

Bug: 129011369
Test: boot and verify native service registration
Change-Id: Ie610b5d07cbe247a55ab31bc079ee5c5923bea11
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
2019-11-07 18:19:15 +00:00
Suren Baghdasaryan 7d3c5c6ea2 lmkd: Add library function to unregister a process
Introduce lmkd_unregister_proc helper function. Fix a bug where
lmkd_pack_set_procremove used a wrong structure as a parameter.

Bug: 129011369
Test: verify process record removal when it is manually killed
Change-Id: I7ab5a499f6b1c6eecfdba4d0a5ec916053e2726a
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
2019-11-07 18:18:54 +00:00
Suren Baghdasaryan f2cbefd298 lmkd: Prepare lmkd to support connection from init process
In order to register native services init needs ability to communicate with
lmkd. Make liblmkd_utils library available in recovery mode so that init
can link to it and add a data socket in lmkd to support additional
connection from init. Ensure SOCK_CLOEXEC type for lmkd socket to prevent
init children from inheriting it.

Bug: 129011369
Test: boot and verify native service registration
Change-Id: Iaa4f59282fb10f838f6811571e97d55754b1bd41
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
2019-11-07 18:18:46 +00:00
Suren Baghdasaryan 945658abc4 lmkd: Restrict process record modifications to the client that created it
Associate each registered process with the PID of the lmkd client that
registered it to prevent one client from updating records of another
client.

Bug: 129011369
Test: boot and verify native service registration
Change-Id: Id8ca7bb6314df225d04da6469b523d2cdc237eaa
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
2019-11-07 18:15:04 +00:00
Greg Kaiser 352e1d9575 Merge "lmkd: Remove unnecessary conditional"
am: 6b0e789a21

Change-Id: Iaa24b3f79aa09fa3957c91b55a28c170196afd50
2019-10-11 07:46:38 -07:00
Greg Kaiser 5e80ed5ff6 lmkd: Remove unnecessary conditional
We want poll_handler to be handler_info, so it's more efficient
to just unconditionally assign it.

Test: TreeHugger
Change-Id: I55b5164da1817ef77b5d455eb618f9a2471afc5c
2019-10-10 06:52:23 -07:00
Suren Baghdasaryan f9c3a891c5 Merge "lmkd: Track processes using pidfds"
am: d11c6f7fd8

Change-Id: I7cf396167954f51d3c7a092b5eebc54826f69f88
2019-10-09 11:13:15 -07:00