Commit graph

48 commits

Author SHA1 Message Date
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
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
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
Jin Qian
808f703609 storaged: add support for ufs health info
Test: adb logcat -d -b events | grep storaged_emmc_info
Bug: 36228467
Merged-In: I519fe2b8a99c1c31f1fe720bd671904d1ab609bb
Change-Id: I519fe2b8a99c1c31f1fe720bd671904d1ab609bb
2017-04-03 16:48:30 +00:00
Jin Qian
8197093497 storaged: read emmc health data from sysfs
Sysfs data is straightforward so we don't need parsing anymore.

Also removed periodical check since data is set only once during
driver initialization. Checking at every device boot or storaged
restart should be sufficient to monitor long term status change.

Test: adb logcat -d -b events | grep storaged_emmc_info
Bug: 36228467
Merged-In: I2a181f52c9f19de1e679a3a905aaebafe4d08227
Change-Id: Ic05e353f0af9363f3bcbe793ba0c351082e446ca
2017-04-03 16:48:14 +00:00
Jin Qian
4fc338e60b storaged: rewrite emmc info class
Test: adb logcat -d -b events | grep storaged_emmc_info
Bug: 36228467
Change-Id: Ib799e60ed65661a9fb99be8ad4c930f547339975
2017-03-16 16:12:55 -07:00
Jin Qian
4bcc8b6526 storaged: clean up output format
make it easy to use scripts parsing output

Test: adb shell storaged -u
Change-Id: I459078c4ddf6e18fe1eb05d25d564e6e6d03e87e
2017-03-14 12:43:40 -07:00
Jin Qian
9b1aeae730 storaged: replace string functions that can throw exception
android coding style doesn't allow exception handling which leads
to crash when any function throws exception. Replace such functions
in storaged to gracefully handle invalid inputs.

Test: adb shell dumpsys storaged --hours N --time_window 300
Bug: 36131658
Change-Id: I36be1b49c4d9977a01d1bd4c9ca57d49322d95f4
2017-03-14 11:20:02 -07:00
Steven Moreland
629843670a storaged: remove usage of String16::std_string
<string> is being removed from String16

Test: adb shell dumpsys storaged <all options>
Change-Id: I234ecd64d9c481cb2eeee883a715f2fbfaecc511
2017-03-10 21:35:31 +00:00
Jin Qian
e83a6107c7 storaged: track fsync calls
Change-Id: Ibdb6a1703245a5de04cb4a2ee5b8ecfbed8b86fc
2017-03-02 16:16:54 -08:00
Jin Qian
f97e6e7dd4 storaged: reduce storaged privilege
Remove storaged from system group.
Let init set priority based on rc file.

Test: adb shell dumpsys storaged --force
Bug: 35323867
Change-Id: I9d893ec69d9cc34a9e24f47166384efd7ef4d9d2
2017-02-27 12:52:04 -08:00
Jin Qian
8157775d79 storaged: include start time in IO usage dumpsys
New format:
starttime1,endtime1
records
[starttime2],endtime2
records

Note starttime2 is skipped if it equals with endtime1.

Bug: 34198239
Change-Id: I8a88a3bf1d50e065510d3ab123422d564fb6159f
2017-02-21 15:33:22 -08:00
Jin Qian
baff640d5d storaged: handle negative delta in io usage
When UID is uninstalled and reinstalled, IO usage of the UID is
reset. This caused problem in accounting since it assumes IO usage
is always increasing for the same UID. In such case, use the current
usage instead of negative delta for accounting.

Bug: 34198239
Change-Id: I74661feccc05d19ba8a0feff8a2e38d72c7d1465
2017-02-16 18:46:41 -08:00
Jin Qian
821eb0d007 storaged: fix selinux dac_override denial
Bug: 35250057
Bug: 34198239
Change-Id: I18592d298765dc46ab05f25ae2ced0a5eddacc8b
2017-02-10 18:33:13 -08:00
Jin Qian
dd41d6b171 storaged: allow dump window to be less than an hour
This is useful for CTS where we just need dump from last few minutes.

Bug: 34198239
Bug: 34845096
Change-Id: Ic543e7184606f419f8989bf0cb992cd46e48845c
2017-02-10 17:25:34 -08:00
Jin Qian
1275b1b6aa storaged: add --force option to dumpsys
This option forces storaged to generate io usage report since last
report. This is for testing purpose so that we can run some app and
get the app's IO usage right away instead of waiting an hour for next
report.

Bug: 34198239
Bug: 34845096
Change-Id: I9cd217df37a9b6c8f383eb25d41602e8e8c8f9ba
2017-02-10 15:48:21 -08:00
Jin Qian
e5ea17c840 storaged: add dumpsys flags to limit data size
--threshold <bytes>
This skips io usage not greater than <bytes> for current report.

--time_window <secs>
This sets uid_io collection interval to <secs> for future reports.
The new interval will be ignore if it's less than 5 minutes.

Test: adb shell dumpsys --threshold 4096 --time_window 300
Bug: 33086174
Bug: 34198239
Change-Id: I723c0850fa504a113da0a14945c4fbc64ea47659
2017-02-10 15:28:34 -08:00
Jin Qian
5b962c6dbd storaged: account on/off charger per uid io usage
Register a listener to batteryproperties service for charger stats
change.

Aggregate IO usage based on charger stats in a collection window.

Bug: 33086174
Bug: 34198239
Change-Id: Ibe306c9c3ff8b8ada6be034aa8511268cb9a9b1c
2017-02-07 21:41:15 +00:00
TreeHugger Robot
011f28a5ac Merge "Add permission bits to open with O_CREAT." 2017-02-04 00:39:44 +00:00
George Burgess IV
151ea52cf6 Add permission bits to open with O_CREAT.
It's an error to pass open O_CREAT without giving it mode bits:
https://linux.die.net/man/3/open

Bug: 32073964
Test: Compiles with clang FORTIFY.
Change-Id: Iaa78c3003ed960e1ffe7e56623dba33db4e17443
2017-02-03 14:45:47 -08:00
Jin Qian
9cdfdd3ff9 storaged: add --hours flag for dumpsys
1. Add a flag to report IO usage for last N hours.
2. Change interval back to 1 hour so that we have finer usage data.
3. Don't clear events after dumpsys call. Use a max buffer limit.
4. Clear old events if they're more than 5 days old or when no room
for new events.
5. Skip uids with no IO usage to save space.
6. Replace interval with a timestamp in event entry.

Test: adb shell dumpsys storaged --hours 2
Bug: 34198239
Bug: 33086174
Change-Id: I66e8fb6ec155584115fab817c3ed2c78e637ac40
2017-02-01 16:48:21 -08:00
Jin Qian
284bd76d3e storaged: change uid_io reporting
Increase reporting interval to once per day.
Report foreground and background I/O usage.
Remove threshold to report all usages.

Test: adb shell dumpsys storaged
Bug: 34198239
Bug: 33086174
Change-Id: I3b4ea8200bdb8becb5b441051f52477bbd1f3ccf
2017-01-30 14:22:49 -08:00
Jin Qian
f42d7c833c storaged: fix check_time logic
Skips event time check if failed to get start time.
Use ratelimited logging when gettime fails.

Test: adb shell setprop ro.storaged.event.perf_check 10000
Bug: 34630954
Bug: 34198239
Change-Id: I168ef3b4e4ed27257ec76373219c6214a7b7b2ed
2017-01-26 11:20:26 -08:00
Jin Qian
a2e5bd1347 storaged: add dumpsys interface
Write alerts to an internal buffer and flush to dumpsys
when dump is called.

Test: adb shell dumpsys storaged
Bug: 33086174
Bug: 34198239
Change-Id: I39e5dfd9c4e9a5f3ec3d74356b28e9ddf77f6624
2017-01-25 18:07:30 -08:00
Jin Qian
88ad33eff1 storaged: remove task io code
Bug: 34612499
Change-Id: Id0599ee2ae025a186259e95363c1ddd0feae8079
2017-01-24 14:45:50 -08:00
Jin Qian
3790f5bfaf storaged: replace cmd arguments with properties
Add properties to control event intervals.
Add a property to check time spent in event loop.

Bug: 34612341
Bug: 34198239
Change-Id: I01f64c84e17153377ece7ae530be106e3f55287e
2017-01-24 14:45:50 -08:00
Jin Qian
bcd6e3b9d9 storaged: monitor per-uid IO usage
Add uid_monitor class to query /proc/uid_io/stats periodically.
Add a log tag to record any UID that exceeds IO threshold.

Test: adb shell storaged -u
Bug: 34198239
Change-Id: I53568c30dbefe2f4bdb18054d3dedb30b4133d8b
2017-01-24 14:45:35 -08:00
Jin Qian
a1740cbaa4 storaged: disable taskio since it's too expensive
It has no active user and will be replaced by uid io.

|--99.99%-- storaged_t::event()
      |    |--99.68%-- tasks_t::update_running_tasks()
      |    |    |    |--93.00%-- parse_task_info(unsigned int, task_info*)
      |    |    |    |    |--49.94%-- android::base::ReadFileToString(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, bool)
      |    |    |    |    |--29.00%-- read
      |    |    |    |    |--5.00%-- std::__1::basic_istream<char, std::__1::char_traits<char> >::operator>>(unsigned long&)
      |    |    |    |    |--4.83%-- android::base::StringPrintf(char const*, ...)
      |    |    |    |    |--1.93%-- android::base::Split(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)

Bug: 34263766
Bug: 34198239
Change-Id: I3f4851b5ce27751eebd40f4b56e1ee24297c4c7d
2017-01-20 20:41:14 -08:00
Jin Qian
e1d4b072ff storaged: assign to system-background cpuset
Bug: 34388593
Change-Id: I11d904cade1d67e54b5e651b6fc1ad34d365690e
2017-01-18 13:12:33 -08:00
Jin Qian
b00d5467d3 storaged: fix crash when cmdline is longer than 64 characters
Bug: 34331490
Change-Id: I40302f4d54b7d8fe4fc5ecbc76df42df68a35504
2017-01-17 15:45:05 -08:00
Jin Qian
27506fa41f storaged: remove redundant logging
Don't log disk_stats and emmc_info to system buffer since they
are already uploaded to events buffer.

Use DEBUG flag to control disk perf logging.

Bug: 34331490
Change-Id: I5f628a1a46e1f72588da064523da69737bd67dcb
2017-01-17 15:43:25 -08:00
Jin Qian
0c77270ffc storaged: increase periodic polling interval
set default polling internal to 1 minute
set default disk stats publish to 1 hour
set default emmc info publish to 1 day

Bug: 34331490
Change-Id: Ifd86ddf9d826fb252de9dc8d6881e80ccb193e3b
2017-01-17 15:37:37 -08:00
Jin Qian
535ddbe2c9 storaged: replace kmsg with LOG macros
Also convert android_log_event to C++ style calls.

Change-Id: I7d62c81789fe7925fe9cae3e2a798b6af8c8be9d
2017-01-13 19:02:23 +00:00
ynwang
af49d9756f Storaged cleanup
Compliance with Android Coding standards

Test: compile
Bug: 28826771
Change-Id: I10bc4a793bb1da75e8600b81a5d7ff913e310da1
2016-12-21 11:08:24 -08:00
ynwang
62cb372279 storaged: add storaged native daemon
Storaged periodically checks the devices' disk stats and eMMC lifetime.
This information is logged to both the kernel and event log. By event
logging, the data can be aggregated by the checkin service and then
sent to Sawmill.

It also periodically traverses /proc/[pid], maintaining the I/O usage of
all tasks (all sampled tasks). The task I/O data can be reported using
the --dump option.

Storaged is booted when the device boots up and requires the permission
for reading /proc/diskstats, /proc/[pid]/io and debugfs(eMMC ext_csd).
For detailed description, please refer to go/storaged.

Bug: 28826771
Change-Id: I774b1a44cc30092bac1bfcbc08bf487295e7cfed
2016-12-15 15:56:33 -08:00