Commit graph

82 commits

Author SHA1 Message Date
Yifan Hong
acd2d30cec storaged: fix headers.
Add missing libbatteryservice_headers dependency.
It used to use global header include dirs, which is bad.

Add old transitive dependency from libbatteryservice_headers
as well.

Test: builds
Bug: 68724651

Change-Id: Idcc4452160dce70b4f8b48e2d809dcd5744b93b4
Merged-In: Idcc4452160dce70b4f8b48e2d809dcd5744b93b4
(cherry picked from commit 0b31908912)
2018-07-17 15:36:09 -07:00
David Anderson
8cc138e03f Merge "storaged: lower capabilities in init" am: 183b575e78
am: 04cc5c3616

Change-Id: I2b1f68bfc21febb0f5ade62d06815377b03c77eb
2018-04-12 09:41:00 -07:00
Treehugger Robot
183b575e78 Merge "storaged: lower capabilities in init" 2018-04-12 15:55:26 +00:00
David Anderson
639ecf64b3 Merge "storaged: update OWNERS" am: ffc325a3b2
am: 2e0f524713

Change-Id: I1d4d1279f5af662f7f6e0706c34e3c9369ac0550
2018-04-12 03:33:04 -07:00
David Anderson
3214731cc8 storaged: update OWNERS
Bug: N/A
Test: N/A
Change-Id: Ic3e3fbcb4c4357a286ef05feab68e65390e2eab3
2018-04-11 18:50:14 -07:00
David Anderson
e54ca5fa0e storaged: lower capabilities in init
Lower storaged's capabilities to DAC_READ_SEARCH as an initial step
toward running it non-root.

Bug: 77634061
Test: storaged still runs and its /proc/pid/status has lower CapPrms
Change-Id: Ibfe0349fc059e2f37efba33f587176e8ce6be9fe
2018-04-11 12:33:02 -07:00
David Anderson
bba38cda0f Merge "storaged: remove unused includes" am: 0289f35b83
am: 6cebd27db8

Change-Id: Ia6f60132c3026621252015028cb7ebe2559a47bd
2018-04-06 13:30:11 -07:00
David Anderson
6d65f7c61a storaged: remove unused includes
Bug: 35323867
Test: N/A
Change-Id: I21c0b62765dbd27a462288c5e7577905240720f0
2018-04-05 18:55:08 -07:00
David Anderson
d9c510f9c2 Merge "storaged: fix divide-by-zero when updating history" into pi-dev
am: 0b637d94d6

Change-Id: If668d3a3a349070a734ebce66e8e4eef0465bdef
2018-04-02 18:16:40 -07:00
David Anderson
7d74a5a2f2 storaged: fix divide-by-zero when updating history
Bug: 75984894
Test: storaged unit tests on x86/64 platforms
Change-Id: I8c491f70705c662d40d0b212bcbc43a0de279bec
Merged-In: I8c491f70705c662d40d0b212bcbc43a0de279bec
(cherry picked from commit f2dd78bb2c)
2018-03-27 14:51:28 -07:00
Mark Salyzyn
1aff9f5883 Merge "storaged: owner adjustment" am: 387319307a
am: 785c18d4d1

Change-Id: I8fc93957370c2ef95ddbea5ce1d3f16ada31611d
2018-03-23 23:34:40 +00:00
Mark Salyzyn
133c9111a3 storaged: owner adjustment
Added salyzyn@ for final owner review on adjustments to storaged.

Test: none
Signed-off-by: Mark Salyzyn <salyzyn@google.com>
Change-Id: Iac73403ea416a4820f72689f5860aa88931def06
2018-03-23 14:37:53 -07:00
Hridya Valsaraju
79d38ebcaf health: Modify IHealthInfo Callback interface to return V2.0 HealthInfo
Bug: 71860528
Test: vts-tradefed run vts -m VtsHalHealthV2_0
Change-Id: I7de39ffa4c21772d8878c9a3f054bc6dbbde2fb9
2018-01-18 14:51:26 -08:00
TreeHugger Robot
7b94ae273b Merge "Provide Recent Disk Perf via IStoraged" 2018-01-18 02:50:48 +00:00
Yifan Hong
845e35bdc3 storaged: use health HAL to read StorageInfo.
Test: storaged unit tests
Bug: 68388678

Change-Id: Iec395a33bac72f49366e8c30ea7e709c8acdcfa2
2018-01-16 19:25:01 -08:00
Yifan Hong
c4b46e0ad9 storaged: use health HAL to read DiskStats.
Test: storaged unit tests
Bug: 68388678
Change-Id: I03ce3aa71fb54ae40489c7b35973cd4b83b13bfb
2018-01-16 19:24:54 -08:00
Yifan Hong
4a43bdc5f5 storaged: storaged_t replace initHealthService with init.
storaged_t has more fields that depend on the health service;
they should be initialized in the new init() function.

Test: storaged unit tests

Change-Id: I70d41e5d0a0ef20c39c41c7539a284937bd21ad5
2018-01-16 19:19:37 -08:00
Yifan Hong
70c44e7a6a storaged: use get_health_service
Test: storaged unit tests
Bug: 68388678
Change-Id: I67100a9a0ad27f9e5b8fc077ff83c442e2bebe71
2018-01-16 18:05:19 -08:00
Michael Wachenschwanz
37b912b805 Provide Recent Disk Perf via IStoraged
Expose recent disk write performance to Java side services.

Bug: 62393328
Test: manual
Change-Id: I6002681b17e7f5b9538b4dc9e312843cf838e467
2018-01-08 19:06:22 -08:00
Jin Qian
4c23c4576b storaged: align buffer address and size for direct_io
O_DIRECT requires buffer address and size to be aligned

Bug: 63629306

Change-Id: I268abb1c0ba32af4fd2e92210192c47a1f173238
2017-12-13 15:54:55 -08:00
Elliott Hughes
3e2b34136a Merge "Add OWNERS." am: 3289b9c928 am: 515c8fe572
am: aede8375fe

Change-Id: I28f7a8f3fa9c9837f4043768e70c0d985ed95abd
2017-12-08 01:29:20 +00:00
Elliott Hughes
3289b9c928 Merge "Add OWNERS." 2017-12-07 23:21:26 +00:00
Elliott Hughes
693d63f9cf Add OWNERS.
Bug: N/A
Test: N/A
Change-Id: Ie785058c0f5eb9b4086c98ccba6e63e3ed411b65
2017-12-07 13:30:03 -08:00
Colin Cross
c2a3a20c2c Export AIDL files as a filegroup for framework.jar
Put AIDL files into a filegroup so they can be imported as sources
for framework.jar.

Test: m checkbuild
Change-Id: I1a5335384e9291af1f26e7418f15fcfa082ee356
2017-11-30 10:22:40 -08:00
Jin Qian
94b64ef332 storaged: remove protos from storaged class
protobuf is only needed when serializing/deserializing data. Instead of
maintaining a permanent buffer in storaged object, move the container to
stack so that the buffer is released when we don't need it. In addition,
we don't need to clear the buffer before updating it.

Also added a function to clear user io history when the user is removed.

Bug: 63740245
Change-Id: Ia5d19b9a0c3f92a93b061a56be89bb0b958a2a29
2017-11-09 17:24:58 -08:00
Jin Qian
0700f3b863 Merge "storaged: fix regression found in unit-test" 2017-11-07 07:54:16 +00:00
Yifan Hong
e3526facb5 Merge changes from topic "health2-health1"
* changes:
  storaged: update for using 1.0::HealthInfo.
  Health@2.0: uses @1.0::HealthInfo
2017-11-07 06:42:13 +00:00
Yifan Hong
348bc20bf8 storaged: update for using 1.0::HealthInfo.
Test: boots
Bug: 63702641

Change-Id: I97e322af97347c603f10b5b5b82cd3ae52c58b8f
2017-11-06 13:14:18 -08:00
Jin Qian
65d8c03d35 storaged: fix regression found in unit-test
Should use reference instead of copy to clear storaged proto

Bug: 63740245
Change-Id: Ibb933a0bac12508467fc104b37e7cc490dfbe948
2017-11-06 19:07:09 +00:00
Yifan Hong
3cf55ef056 do not getTransport before getting IHealth service.
getService already has getTransport logic.

Test: storaged unit tests

Bug: 63702641
Change-Id: I29be15e5713ac276fbbeda88224d8aef514319c6
2017-11-03 13:20:10 -07:00
Jin Qian
6df3bc6301 storaged: split proto file into multiple CE areas
Use user_id (from app uid) to determine file location.
/data/misc_ce/<user_id>/storaged/storaged.proto

Vold notifies storaged when a user's CE area becomes available.
Then storaged restores data from the proto in that area and
combines them into IO history.

Vold also notifies storaged when the CE area is being deleted.
Storaged clears internal history about this user and deletes the
proto file.

IO perf is stored in user_0 area since it's not user related.

Test: dumpsys storaged before/after multiple users' unlock
Bug: 63740245
Change-Id: I39f923f6b09e9f2a29e9286ce02b3b3bcbfb9f94
2017-10-31 14:31:13 -07:00
Yifan Hong
bf2dcb2e1b storaged: talk to healthd in hwbinder.
Test: storaged-unit-tests
Change-Id: I6ebfea3470b4b37b2516ffb2b14385f65bb4b80e
2017-10-19 14:55:53 -07:00
Jin Qian
a8533325d5 storaged: move proto file to /data/misc_ce/0/storaged
Use proto_stat to indicate status of CE area. Before user_0 unlocks,
storaged detects CE NOT_AVAILABLE when attempting to read the proto
file. It then skips reading/writting the proto.

When user_0 logs in, vold calls onUserStart in storaged, which sets
proto_stat to AVAILABLE. At next event, storaged tries to read the
proto. If it's a success, proto_stat is changed to LOADED. After that,
storaged reads and writes proto normally.

Test: adb shell storaged -u -p
Bug: 63740245
Change-Id: I1fdd42c430e91682f6cc07497fcad5be52489b4e
2017-10-18 13:50:03 -07:00
Jin Qian
b049d18b0a storaged: use AIDL to generate storaged binder calls.
Split binder calls into two separate services.

"storaged" service will be used by external clients, e.g. vold.
- Added stub onUserStarted/onUserStopped to prepare for moving
storaged.proto into ce area.

"storaged_pri" private service will be used by storaged cmdline,
e.g. adb shell storaged -u
- Added parcelable UidInfo for private service.
- Change format of perf history to one vector with first 3 elements
showing size of recent/daily/weekly perf history.

Test: adb shell storaged -u -p
Bug: 63740245
Change-Id: Ib0367282a95b6cb0a38f064f0456e849ecccc210
2017-10-18 13:50:03 -07:00
Jin Qian
d691d6e941 storaged: record IO perf history from proto updates
Record the bandwidth when writing storaged.proto to monitor system
storage performance.

The history is maintained in 3 catergories.
1. samples of last 24 hours.
2. daily average of last 7 days.
3. weekly average of last 52 weeks.

Sampling frequency of the first catergory is set to once every hour.
Storaged also flushes proto at same frequency.

The proto file is padded to reach a minimal size of 128KB. Storaged
writes 16KB at a time. Bandwidth calculation ignores time spent in
the first write and writes smaller than 16KB.

bandwidth = total size of 16KB writes / time spent in 16KB writes

Restructured the code so that storaged.cpp handles proto load/flush.
It calls individual module to sync proto with internal data
structures.

Added a cmdline argument to dump perf history.

adb shell storaged -p
I/O perf history (KB/s) :  most_recent  <---------  least_recent
last 24 hours : 5315 3775 3659 2042 3890 5652 3649 3696 6023
last 7 days   : 4648 3532 3828 3567 3841 3359 4676
last 52 weeks : 3817 4275 3836 3766 4280 0 0 0 0 0 ...

Test: adb shell storaged -p
      atp:asit/perf/jank_systemui_test
      atp:asit/perf/appstartup_hermetic_cyclic_dropcache_test
      atp:asit/perf/appstartup_non_hermetic_cyclic_dropcache_test

Bug: 63629306
Change-Id: Ie7051e7a8df883d4a6818ea9a54a10f4dccb4843
2017-10-10 00:56:03 +00:00
Jin Qian
65dea71248 storaged: clean up disk stats code
Merged disk_stats_publisher into disk_stats_monitor class.

Moved proc file check to disk_stats class instead of doing so in
storaged, same for uid_io.

Added is_zero function to check zero disk_stats.

Added operators to compute disk_stats.

Change-Id: I277ae51f6fe18464f92e45c03471343784e67093
2017-10-02 15:45:14 -07:00
Jin Qian
0e02687d3f storaged: fix task io stats parsing
comm field in task io stats string can have comma since this field
includes task arguments. As a result, splitting the string by comma
doesn't always give 13 fields. Parse the string in following way to
fix that.

last 11 fields -> pid and io stats
Second field to 12th from last -> comm

Bug: 63739275
Change-Id: I6a2418260444c71d6492fc6cbd639d3cc54ceaed
2017-09-28 11:29:51 -07:00
Jin Qian
ebf031be98 storaged: store io_history as protobuf file on userdata
Convert storaged internal io_history to protobuf format and serialize
it to userdata partition. Also load this file during storaged startup
to reconstruct io history.

Bug: 63740245
Change-Id: I0697525df1c31fdec20f5ed4e3e9363e2dde244f
2017-08-15 17:00:19 -07:00
Jin Qian
e4f1ec315d storaged: convert Android.mk to Android.bp
Change-Id: Ia59f6cc94f0eaea531a8e516b0492e0dfecc6ce0
2017-08-15 16:56:28 -07:00
Yang Jin
c61cdfe5c3 storaged: add parser for dumpsys storaged output
Rank uids by io stats and display their tasks. Can either rank by combining
io stats for same uids or io stats for the last appearing uid.
See python ranker.py -h for details.

Test: python ranker.py -i io.txt -o output.txt -u 20 -cnt

Bug: 63739275
Change-Id: Ieee1d7a9bf190266fc6a055c0922434fcd9099c6
2017-08-09 15:25:19 -07:00
Jin Qian
9c54268dce storaged: call getNamesForUids to get uid names
Calls getNamesForUids when one of the two conditions are true.
1. entries for new uids are reported from io stats
2. previous getNamesForUids failed

Bug: 62805090
Merged-In: I120b81e1857b2aa0a90d0fb85c8d749e985df78e
Change-Id: I120b81e1857b2aa0a90d0fb85c8d749e985df78e
2017-08-08 20:59:03 +00:00
Jin Qian
2d7bcceefc storaged: call getNamesForUids to get uid names
Calls getNamesForUids when one of the two conditions are true.
1. entries for new uids are reported from io stats
2. previous getNamesForUids failed

Bug: 62805090
Change-Id: I120b81e1857b2aa0a90d0fb85c8d749e985df78e
2017-08-08 10:51:17 -07:00
Jin Qian
ccae2b5779 storaged: fix excessive accounting when io usage has negative delta
When current io bytes are smaller than previous bytes, add 0 to delta
instead of adding current io bytes.

Bug: 64317562
Merged-In: If0c9814892ad61b790baa6395649af10b11d5b7c
Change-Id: I1ffd7ac33649ab3b8405c83b1328fa9bf49702c0
2017-08-03 17:28:52 +00:00
Jin Qian
6abe26cdf4 Merge "storaged: add task io to dump service" 2017-07-26 22:47:42 +00:00
Yang Jin
3906c89206 storaged: add task io to dump service
Display task io in dump service when both kernel logs task io to
proc/uid_io/stats and when debug flag is enabled.

Also add -t flag to display both uid and task io for storaged.

Tests:
adb shell
dumpsys storaged --debug
storaged -t

Bug: 63739275

Change-Id: If0c9814892ad61b790baa6395649af10b11d5b7c
2017-07-26 12:46:08 -07:00
Jin Qian
8847c62579 storaged: record userdata space utilization
Update disk space utilization together with diskstats since we will
use free space size to co-relate disk performance.

Bug: 63629306
Change-Id: I4e5694aaff3b71aa56db451f1bc92ccfb07e5086
2017-07-17 15:51:30 -07:00
Jin Qian
26b2be0d30 storaged: stop binder threads before exiting
Test: kill healthd when storaged is running
Bug: 36652060
Change-Id: Ie55fb6cb7c8c6df6ce6bc4820c476b90cc0f4165
2017-04-04 19:44:01 +00:00
Jin Qian
566e63da53 storaged: exit if batteryproperties service is dead.
storaged relies on batteryproperties service (healthd) to provide
charger stats. If healthd is killed, kill storaged as well. Both
will be restarted by init process anyway to restore a correct state.

Test: kill healthd when storaged is running
Bug: 36652060
Merged-In: Ia785bb6f5ea259aa43cd1efab9505ebefaf3db12
Change-Id: Ia785bb6f5ea259aa43cd1efab9505ebefaf3db12
2017-04-04 17:45:41 +00:00
Jin Qian
4882eaba25 storaged: use sp<> to keep refcount for storaged_t object
BatteryListener takes sp<> as parameter. Passing raw storaged_t ptr
to BatteryListener will cause the ptr to be freed when BatteryListener
releases the sp<>. Keep a refcount in storaged to prevent this from
happening.

Test: kill healthd while storaged is running
Bug: 36652060
Change-Id: I96bc45a3bedb39eb7158b8f6c86334b5b31c9346
2017-04-03 23:13:26 -07:00
Jin Qian
ba27df4d0f storaged: skip batteryproperties listener if uid_io not available
uid_monitor is the only user of batteryproperties, no need to register
a callback if uid_io not enabled.

Test: run storaged without uid_io, plug/unplug usb cable
Merged-In: If890a93fec155b67c450341c54b44bb18d3aae3d
Change-Id: If890a93fec155b67c450341c54b44bb18d3aae3d
2017-04-03 16:48:44 +00:00