Difference between revisions of "Android Boot-time Readahead"

From eLinux.org
Jump to: navigation, search
(treadahead: add treadahead source)
(treadahead)
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
Here is information about Android Boot-Time Readahead
 
Here is information about Android Boot-Time Readahead
  
''to do: need to post my programs, with source, my presentation from ABS, and some of my raw results''
 
 
== Presentation ==
 
== Presentation ==
 
This is the presentation I gave at ABS 2011.
 
This is the presentation I gave at ABS 2011.
Line 19: Line 18:
  
 
== Programs ==
 
== Programs ==
[need to post source for programs]
+
These are test programs, but there's nothing in them that prevents them from being used
 +
for actual systems.  readahead does not intrinsically alter any functionality on the system.  It only
 +
changes the contents of the page cache.  Worst case behavior ''should be'' that things boot a bit slower.
 +
Best case behavior is that boot time improves a lot.  Please measure with bootchart and let me know
 +
how it goes.
  
 
=== mincore ===
 
=== mincore ===
Line 31: Line 34:
 
Logsync is a program to write a log message to both the kernel log buffer (printk), and the Android log buffer.  On most systems, the timestamps are different between these two logging systems.
 
Logsync is a program to write a log message to both the kernel log buffer (printk), and the Android log buffer.  On most systems, the timestamps are different between these two logging systems.
 
This is useful to determine a unified ordering of events reported by these separate systems.
 
This is useful to determine a unified ordering of events reported by these separate systems.
 +
 +
[[Media:logsync.c]]
  
 
=== treadahead ===
 
=== treadahead ===
Line 41: Line 46:
 
You can build this in context of the Android build system (using the included Android.mk) or using
 
You can build this in context of the Android build system (using the included Android.mk) or using
 
a regular Linux host compiler (using the included Makefile).  Note that this would build for a 32-bit x86 system (which is what the Sony Internet TV is).
 
a regular Linux host compiler (using the included Makefile).  Note that this would build for a 32-bit x86 system (which is what the Sony Internet TV is).
 +
 +
The source includes readahead.S, which is assembly for adding a wrapper for the readahead syscall on ARM systems.
 +
Bionic on ARM is missing the wrapper for the readahead syscall.
  
 
[[Category:Android]]
 
[[Category:Android]]
 
[[Category:Boot Time]]
 
[[Category:Boot Time]]
 
[[Category:Presentations]]
 
[[Category:Presentations]]

Revision as of 18:35, 14 December 2012

Here is information about Android Boot-Time Readahead

Presentation

This is the presentation I gave at ABS 2011.

abs2011_bird_readahead.pdf

Results

Bottom line results were an approximate 5% (1.5 seconds) improvement in boot time, using readahead on only a single portion of the boot sequence. A 9% improvement was expected, given the area of the boot sequence that was optimized. So, it didn't help as much as I'd hoped, but did help a little.

More testing is needed:

  • to determine why adjusting the I/O scheduling priority did not have the expected affect
  • to apply readahead to more part of the boot sequence
  • to test other methods to avoid interfering with foreground processing
    • like, manually halting and continuing readahead during the boot, and performing smaller reads

Programs

These are test programs, but there's nothing in them that prevents them from being used for actual systems. readahead does not intrinsically alter any functionality on the system. It only changes the contents of the page cache. Worst case behavior should be that things boot a bit slower. Best case behavior is that boot time improves a lot. Please measure with bootchart and let me know how it goes.

mincore

Mincore is a program I wrote to report the pages in the Linux page cache for requested files.

Here's the source:

Media:mincore.c

logsync

Logsync is a program to write a log message to both the kernel log buffer (printk), and the Android log buffer. On most systems, the timestamps are different between these two logging systems. This is useful to determine a unified ordering of events reported by these separate systems.

Media:logsync.c

treadahead

Tim's readahead - This is a test program to experiment with various readahead options. Besides actually performing readahead operations, it includes facilities for recording iowait before and after a readahead sequence, timing the duration of readahead operations, and changing things like the process scheduling priority, I/O scheduler, and I/O scheduling priority.

Media:treadahead-1.3.tgz

You can build this in context of the Android build system (using the included Android.mk) or using a regular Linux host compiler (using the included Makefile). Note that this would build for a 32-bit x86 system (which is what the Sony Internet TV is).

The source includes readahead.S, which is assembly for adding a wrapper for the readahead syscall on ARM systems. Bionic on ARM is missing the wrapper for the readahead syscall.