Slide 1

Slide 1 text

Leveraging Program Analysis to Reduce User-Perceived Latency in Mobile Applications Yixue Zhao, Marcelo Schmitt Laser, Yingjun Lyu, and Nenad Medvidović University of Southern California May 30, 2018

Slide 2

Slide 2 text

Motivating Example

Slide 3

Slide 3 text

Motivating Example

Slide 4

Slide 4 text

Motivating Example

Slide 5

Slide 5 text

Motivating Example Latency!

Slide 6

Slide 6 text

Motivating Example

Slide 7

Slide 7 text

Motivating Example

Slide 8

Slide 8 text

Outline • Existing prefetching techniques • Novel prefetching technique: PALOMA • Give me an example • How well does PALOMA do? • Summary & takeaways

Slide 9

Slide 9 text

Existing Prefetching Techniques Existing approaches: • Server-based • Human-based • History-based • Domain-based

Slide 10

Slide 10 text

Existing Prefetching Techniques Existing approaches: • Server-based à not accessible • Human-based • History-based • Domain-based

Slide 11

Slide 11 text

Existing Prefetching Techniques Existing approaches: • Server-based à not accessible • Human-based à manual & error-prone • History-based • Domain-based

Slide 12

Slide 12 text

Existing Prefetching Techniques Existing approaches: • Server-based à not accessible • Human-based à manual & error-prone • History-based à time-consuming • Domain-based

Slide 13

Slide 13 text

Existing Prefetching Techniques Existing approaches: • Server-based à not accessible • Human-based à manual & error-prone • History-based à time-consuming • Domain-based à not general

Slide 14

Slide 14 text

Novel Prefetching Technique: PALOMA • Server-based • Human-based • History-based • Domain-based Client-only Automatic No historical data Domain-independent

Slide 15

Slide 15 text

Meet PALOMA J Program Analysis for Latency Optimization of Mobile Apps • Client-only • Automatic • No historical data • Domain-independent

Slide 16

Slide 16 text

Key Insights • App code has useful information • “User think time” provides opportunities

Slide 17

Slide 17 text

PALOMA in a Nutshell Code Analysis App Instrumentation Optimized App

Slide 18

Slide 18 text

Original App Workflow Origin Server Latency! Original App • App interacts with server • Network latency

Slide 19

Slide 19 text

PALOMA Workflow Static Analysis App Instrumentation Optimized App String Analysis Callback Analysis Original App Proxy Runtime Prefetching Origin Server offline online

Slide 20

Slide 20 text

PALOMA Workflow Static Analysis App Instrumentation Optimized App String Analysis Callback Analysis Original App Proxy Runtime Prefetching Origin Server offline online “what”

Slide 21

Slide 21 text

PALOMA Workflow Static Analysis App Instrumentation Optimized App String Analysis Callback Analysis Original App Proxy Runtime Prefetching Origin Server offline online “when”

Slide 22

Slide 22 text

PALOMA Workflow Static Analysis App Instrumentation Optimized App String Analysis Callback Analysis Original App Proxy Runtime Prefetching Origin Server offline online

Slide 23

Slide 23 text

PALOMA Workflow Static Analysis App Instrumentation Optimized App String Analysis Callback Analysis Original App Proxy Runtime Prefetching Origin Server offline online

Slide 24

Slide 24 text

Outline • Existing prefetching techniques • Novel prefetching technique: PALOMA Ø Give me an example • How well does PALOMA do? • Summary & takeaways

Slide 25

Slide 25 text

Illustrating Example • Event app: 1. choose city name

Slide 26

Slide 26 text

Illustrating Example • Event app: 1. choose city name 2. click submit to get event information

Slide 27

Slide 27 text

Illustrating Example • Event app: 1. choose city name 2. click submit to get event information

Slide 28

Slide 28 text

Illustrating Example • Event app: 1. choose city name 2. click submit to get event information FINALE The original aesthetic and unconventional Do-it-Yourself attitude of the show creates a raw energy that simmers through a haze of confetti, smoke and pulsing lights.

Slide 29

Slide 29 text

Illustrating Example • Event app: 1. choose city name 2. click submit to get event information • Objective: send event query before clicking submit button

Slide 30

Slide 30 text

1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse(connection.getInputStream()); 17 }}); 18 } 19 }

Slide 31

Slide 31 text

1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse(connection.getInputStream()); 17 }}); 18 } 19 }

Slide 32

Slide 32 text

1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse(connection.getInputStream()); 17 }}); 18 } 19 }

Slide 33

Slide 33 text

1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse(connection.getInputStream()); 17 }}); 18 } 19 }

Slide 34

Slide 34 text

Static Analysis App Instrumentation Optimized App String Analysis Callback Analysis PALOMA Workflow Original App Proxy Runtime Prefetching Origin Server offline online

Slide 35

Slide 35 text

String Analysis Callback Analysis Static Analysis Phase Answer “when” to prefetch Answer “what” to prefetch * Yellow = terms defined in the paper

Slide 36

Slide 36 text

String Analysis Static Analysis Phase Answer “when” to prefetch Answer “what” to prefetch • Identify URL Spot * Yellow = terms defined in the paper Callback Analysis

Slide 37

Slide 37 text

String Analysis Static Analysis Phase Answer “when” to prefetch Answer “what” to prefetch • Identify URL Spot • Static URL string value analysis Interpret concrete values * Yellow = terms defined in the paper Callback Analysis

Slide 38

Slide 38 text

String Analysis Static Analysis Phase Answer “when” to prefetch Answer “what” to prefetch • Identify URL Spot • Static URL string value analysis Interpret concrete values • Dynamic URL string value analysis Identify Definition Spots * Yellow = terms defined in the paper Callback Analysis

Slide 39

Slide 39 text

String Analysis Static Analysis Phase Answer “when” to prefetch Answer “what” to prefetch • Identify URL Spot • Static URL string value analysis Interpret concrete values • Dynamic URL string value analysis Identify Definition Spots • Output à URL Map { url1: [ “http://event?&cityName=”, Line7] } * Yellow = terms defined in the paper Callback Analysis

Slide 40

Slide 40 text

String Analysis Static Analysis Phase Answer “when” to prefetch • Identify Target Callback * Yellow = terms defined in the paper Answer “what” to prefetch • Identify URL Spot • Static URL string value analysis Interpret concrete values • Dynamic URL string value analysis Identify Definition Spots • Output à URL Map { url1: [ “http://event?&cityName=”, Line7] } Callback Analysis

Slide 41

Slide 41 text

String Analysis Static Analysis Phase Answer “when” to prefetch • Identify Target Callback • Extract Callback Control Flow Graph (CCFG) * Yellow = terms defined in the paper { url1: [ “http://event?&cityName=”, Line7] } Answer “what” to prefetch • Identify URL Spot • Static URL string value analysis Interpret concrete values • Dynamic URL string value analysis Identify Definition Spots • Output à URL Map Callback Analysis

Slide 42

Slide 42 text

String Analysis Static Analysis Phase Answer “when” to prefetch • Identify Target Callback • Extract Callback Control Flow Graph (CCFG) • Identify Trigger Callback * Yellow = terms defined in the paper Answer “what” to prefetch • Identify URL Spot • Static URL string value analysis Interpret concrete values • Dynamic URL string value analysis Identify Definition Spots • Output à URL Map { url1: [ “http://event?&cityName=”, Line7] } Callback Analysis

Slide 43

Slide 43 text

String Analysis Static Analysis Phase Answer “when” to prefetch • Identify Target Callback • Extract Callback Control Flow Graph (CCFG) • Identify Trigger Callback • Output à Trigger Map { [ onCreate ]: [ url1 ] } { [ onItemSelected ]: [ url1 ] } * Yellow = terms defined in the paper Answer “what” to prefetch • Identify URL Spot • Static URL string value analysis Interpret concrete values • Dynamic URL string value analysis Identify Definition Spots • Output à URL Map { url1: [ “http://event?&cityName=”, Line7] } Callback Analysis

Slide 44

Slide 44 text

Static Analysis Phase Push to Proxy Legend Optimized App Original App

Slide 45

Slide 45 text

Static Analysis App Instrumentation Optimized App String Analysis Callback Analysis PALOMA Workflow Original App Proxy Runtime Prefetching Origin Server offline online

Slide 46

Slide 46 text

Automatically enable prefetching 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests • Output à Optimized App App Instrumentation Phase { [ onCreate ]: [ url1 ] } { [ onItemSelected ]: [ url1 ] } { url1: [ “http://event?&cityName=”, Line7] }

Slide 47

Slide 47 text

App Instrumentation Phase Automatically enable prefetching 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests • Output à Optimized App { [ onCreate ]: [ url1 ] } { [ onItemSelected ]: [ url1 ] } { url1: [ “http://event?&cityName=”, Line7] }

Slide 48

Slide 48 text

{ url1: [ “http://event?&cityName=”, Line7] } App Instrumentation 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse(connection.getInputStream()); 17 }}); 18 } 19 } 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests Definition Spot

Slide 49

Slide 49 text

1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse(connection.getInputStream()); 17 }}); 18 } 19 } App Instrumentation { url1: [ “http://event?&cityName=”, Line7] } 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests

Slide 50

Slide 50 text

App Instrumentation 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests { [ onCreate ]: [ url1 ] } { [ onItemSelected ]: [ url1 ] }

Slide 51

Slide 51 text

1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse(connection.getInputStream()); 17 }}); 18 } 19 } App Instrumentation { [ onCreate ]: [ url1 ] } { [ onItemSelected ]: [ url1 ] } 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests Trigger Callback

Slide 52

Slide 52 text

1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse(connection.getInputStream()); 17 }}); triggerPrefetch(url1); 18 } 19 } App Instrumentation { [ onCreate ]: [ url1 ] } { [ onItemSelected ]: [ url1 ] } 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests

Slide 53

Slide 53 text

{ [ onCreate ]: [ url1 ] } { [ onItemSelected ]: [ url1 ] } App Instrumentation 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse(connection.getInputStream()); 17 }}); triggerPrefetch(url1); 18 } 19 } 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests

Slide 54

Slide 54 text

App Instrumentation { [ onCreate ]: [ url1 ] } { [ onItemSelected ]: [ url1 ] } 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse(connection.getInputStream()); 17 }}); triggerPrefetch(url1); 18 } 19 } 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests

Slide 55

Slide 55 text

App Instrumentation 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests

Slide 56

Slide 56 text

App Instrumentation 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse(connection.getInputStream()); 17 }}); triggerPrefetch(url1); 18 } 19 } 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests

Slide 57

Slide 57 text

App Instrumentation 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 } 1. Update URL Map 2. Trigger prefetching 3. Redirect Requests

Slide 58

Slide 58 text

Static Analysis App Instrumentation Optimized App String Analysis Callback Analysis PALOMA Workflow Original App Proxy Runtime Prefetching Origin Server offline online

Slide 59

Slide 59 text

Proxy Runtime Prefetching Origin Server Optimized App PALOMA at runtime

Slide 60

Slide 60 text

Runtime Prefetching Phase empty cache { url1: [ “http://event?&cityName=”, Line7] }

Slide 61

Slide 61 text

Runtime Prefetching Phase empty cache { url1: [ “http://event?&cityName=”, Line7] }

Slide 62

Slide 62 text

1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 } Runtime Prefetching Phase empty cache { url1: [ “http://event?&cityName=”, Line7] }

Slide 63

Slide 63 text

Runtime Prefetching Phase 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 } empty cache { url1: [ “http://event?&cityName=”, Line7] }

Slide 64

Slide 64 text

1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 } Unknown Runtime Prefetching Phase empty cache { url1: [ “http://event?&cityName=”, Line7] }

Slide 65

Slide 65 text

Runtime Prefetching Phase empty cache { url1: [ “http://event?&cityName=”, Line7] }

Slide 66

Slide 66 text

Runtime Prefetching Phase empty cache { url1: [ “http://event?&cityName=”, Line7] }

Slide 67

Slide 67 text

1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 } Runtime Prefetching Phase empty cache { url1: [ “http://event?&cityName=”, Line7] }

Slide 68

Slide 68 text

Runtime Prefetching Phase 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 } empty cache { url1: [ “http://event?&cityName=”, Line7] }

Slide 69

Slide 69 text

Runtime Prefetching Phase 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 } empty cache { url1: [ “http://event?&cityName=”, “Berlin”] }

Slide 70

Slide 70 text

Runtime Prefetching Phase 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 } empty cache { url1: [ “http://event?&cityName=”, “Berlin”] }

Slide 71

Slide 71 text

Runtime Prefetching Phase 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 } empty cache { url1: [ “http://event?&cityName=Berlin”] }

Slide 72

Slide 72 text

url1’s response Runtime Prefetching Phase 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 }

Slide 73

Slide 73 text

Runtime Prefetching Phase url1’s response

Slide 74

Slide 74 text

Runtime Prefetching Phase url1’s response 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 }

Slide 75

Slide 75 text

Runtime Prefetching Phase url1’s response 1 class MainActivity{ 2 String cityName; 3 protected void onCreate(){ 4 //register onItemSelected event 5 cityNameSpinner.setOnItemSelectedListener(new View.OnItemSelectedListener(){ 6 public void onItemSelected() { 7 cityName = cityNameSpinner.getSelectedItem().toString(); sendDefinition(cityName, url1, 2); triggerPrefetch(url1); 8 }}); 9 //register onClick event 10 submitBtn.setOnClickListener(new View.OnClickListener(){ 11 public void onClick(){ 12 //initialize URL 13 URL url1 = new URL("http://event?&cityName="+cityName); 14 //send HTTP request 15 URLConnection connection = url1.openConnection(); 16 Parse( fetchFromProxy(connection) ); 17 }}); triggerPrefetch(url1); 18 } 19 }

Slide 76

Slide 76 text

FINALE The original aesthetic and unconventional Do-it-Yourself attitude of the show creates a raw energy that simmers through a haze of confetti, smoke and pulsing lights. Runtime Prefetching Phase url1’s response

Slide 77

Slide 77 text

Outline • Existing prefetching techniques • Novel prefetching technique: PALOMA • Give me an example Ø How well does PALOMA do? • Summary & takeaways

Slide 78

Slide 78 text

Evaluation Objectives: • Accuracy Microbenchmark • Effectiveness Microbenchmark 32 Market Apps

Slide 79

Slide 79 text

Evaluation – Microbenchmark DS1,1 1 - H DS1,1 2 - NP DS1,2 DS1,1 DS1,1 4 - NH DS1,2 DS1,2 5 - NP DS1,1 DS2,1 8 - NP DS1,1 DS1,1 6 - H DS2,1 DS1,1 7 - NP DS2,1 DS2,1 DS1,1 11 - NP DS2,2 DS1,1 15 - NP DS2,2 DS2,1 DS1,1 DS2,1 12 - NH DS2,2 DS1,1 13 - NP DS2,2 DS2,1 DS2,2 DS1,1 14 - NP DS2,1 DS2,1 DS2,2 DS1,2 DS1,1 DS2,2 19 - NP DS2,1 DS1,2 DS1,1 17 - NP DS2,1 DS2,2 DS1,2 DS1,1 DS1,1 18 - NP DS2,2 DS2,1 DS1,2 DS2,1 22 - NP DS2,2 DS1,2 DS1,1 DS2,2 DS2,1 DS1,2 DS1,1 DS1,1 24 - NH DS2,2 DS2,1 DS1,2 DS1,2 DS1,1 DS2,1 DS2,2 DS1,1 21 - NH DS2,1 DS2,2 DS1,2 DS1,1 10 - H DS2,2 DS2,1 DS1,1 DS2,2 9 - NP 3 - H 16 - H 20 - NP 23 - NH • 25 Test Cases # of dynamic values ≤ 2 # of Definition Spots (DS) ≤ 2

Slide 80

Slide 80 text

Evaluation – Microbenchmark DS1,1 1 - H DS1,1 2 - NP DS1,2 DS1,1 DS1,1 4 - NH DS1,2 DS1,2 5 - NP DS1,1 DS2,1 8 - NP DS1,1 DS1,1 6 - H DS2,1 DS1,1 7 - NP DS2,1 DS2,1 DS1,1 11 - NP DS2,2 DS1,1 15 - NP DS2,2 DS2,1 DS1,1 DS2,1 12 - NH DS2,2 DS1,1 13 - NP DS2,2 DS2,1 DS2,2 DS1,1 14 - NP DS2,1 DS2,1 DS2,2 DS1,2 DS1,1 DS2,2 19 - NP DS2,1 DS1,2 DS1,1 17 - NP DS2,1 DS2,2 DS1,2 DS1,1 DS1,1 18 - NP DS2,2 DS2,1 DS1,2 DS2,1 22 - NP DS2,2 DS1,2 DS1,1 DS2,2 DS2,1 DS1,2 DS1,1 DS1,1 24 - NH DS2,2 DS2,1 DS1,2 DS1,2 DS1,1 DS2,1 DS2,2 DS1,1 21 - NH DS2,1 DS2,2 DS1,2 DS1,1 10 - H DS2,2 DS2,1 DS1,1 DS2,2 9 - NP 3 - H 16 - H 20 - NP 23 - NH • 25 Test Cases # of dynamic values ≤ 2 # of Definition Spots (DS) ≤ 2 • The location of DS Prefetchable Non Prefetchable (NP) Hit (H) Non Hit (NH) Trigger Point

Slide 81

Slide 81 text

• 25 Test Cases # of dynamic values ≤ 2 # of Definition Spots (DS) ≤ 2 • The location of DS Evaluation – Microbenchmark DS1,1 1 - H DS1,1 2 - NP DS1,2 DS1,1 DS1,1 4 - NH DS1,2 DS1,2 5 - NP DS1,1 DS2,1 8 - NP DS1,1 DS1,1 6 - H DS2,1 DS1,1 7 - NP DS2,1 DS2,1 DS1,1 11 - NP DS2,2 DS1,1 15 - NP DS2,2 DS2,1 DS1,1 DS2,1 12 - NH DS2,2 DS1,1 13 - NP DS2,2 DS2,1 DS2,2 DS1,1 14 - NP DS2,1 DS2,1 DS2,2 DS1,2 DS1,1 DS2,2 19 - NP DS2,1 DS1,2 DS1,1 17 - NP DS2,1 DS2,2 DS1,2 DS1,1 DS1,1 18 - NP DS2,2 DS2,1 DS1,2 DS2,1 22 - NP DS2,2 DS1,2 DS1,1 DS2,2 DS2,1 DS1,2 DS1,1 DS1,1 24 - NH DS2,2 DS2,1 DS1,2 DS1,2 DS1,1 DS2,1 DS2,2 DS1,1 21 - NH DS2,1 DS2,2 DS1,2 DS1,1 10 - H DS2,2 DS2,1 DS1,1 DS2,2 9 - NP 3 - H 16 - H 20 - NP 23 - NH Trigger Point Prefetchable Non Prefetchable (NP) Hit (H) Non Hit (NH)

Slide 82

Slide 82 text

Evaluation – Microbenchmark DS1,1 1 - H DS1,1 2 - NP DS1,2 DS1,1 DS1,1 4 - NH DS1,2 DS1,2 5 - NP DS1,1 DS2,1 8 - NP DS1,1 DS1,1 6 - H DS2,1 DS1,1 7 - NP DS2,1 DS2,1 DS1,1 11 - NP DS2,2 DS1,1 15 - NP DS2,2 DS2,1 DS1,1 DS2,1 12 - NH DS2,2 DS1,1 13 - NP DS2,2 DS2,1 DS2,2 DS1,1 14 - NP DS2,1 DS2,1 DS2,2 DS1,2 DS1,1 DS2,2 19 - NP DS2,1 DS1,2 DS1,1 17 - NP DS2,1 DS2,2 DS1,2 DS1,1 DS1,1 18 - NP DS2,2 DS2,1 DS1,2 DS2,1 22 - NP DS2,2 DS1,2 DS1,1 DS2,2 DS2,1 DS1,2 DS1,1 DS1,1 24 - NH DS2,2 DS2,1 DS1,2 DS1,2 DS1,1 DS2,1 DS2,2 DS1,1 21 - NH DS2,1 DS2,2 DS1,2 DS1,1 10 - H DS2,2 DS2,1 DS1,1 DS2,2 9 - NP 3 - H 16 - H 20 - NP 23 - NH Prefetchable Non Prefetchable (NP) Hit (H) Non Hit (NH) • 25 Test Cases # of dynamic values ≤ 2 # of Definition Spots (DS) ≤ 2 • The location of DS Trigger Point

Slide 83

Slide 83 text

Evaluation – Microbenchmark DS1,1 1 - H DS1,1 2 - NP DS1,2 DS1,1 DS1,1 4 - NH DS1,2 DS1,2 5 - NP DS1,1 DS2,1 8 - NP DS1,1 DS1,1 6 - H DS2,1 DS1,1 7 - NP DS2,1 DS2,1 DS1,1 11 - NP DS2,2 DS1,1 15 - NP DS2,2 DS2,1 DS1,1 DS2,1 12 - NH DS2,2 DS1,1 13 - NP DS2,2 DS2,1 DS2,2 DS1,1 14 - NP DS2,1 DS2,1 DS2,2 DS1,2 DS1,1 DS2,2 19 - NP DS2,1 DS1,2 DS1,1 17 - NP DS2,1 DS2,2 DS1,2 DS1,1 DS1,1 18 - NP DS2,2 DS2,1 DS1,2 DS2,1 22 - NP DS2,2 DS1,2 DS1,1 DS2,2 DS2,1 DS1,2 DS1,1 DS1,1 24 - NH DS2,2 DS2,1 DS1,2 DS1,2 DS1,1 DS2,1 DS2,2 DS1,1 21 - NH DS2,1 DS2,2 DS1,2 DS1,1 10 - H DS2,2 DS2,1 DS1,1 DS2,2 9 - NP 3 - H 16 - H 20 - NP 23 - NH • 25 Test Cases # of dynamic values ≤ 2 # of Definition Spots (DS) ≤ 2 • The location of DS Prefetchable Non Prefetchable (NP) Hit (H) Non Hit (NH) Trigger Point

Slide 84

Slide 84 text

Evaluation – Microbenchmark Check out our paper!

Slide 85

Slide 85 text

Evaluation – Microbenchmark • Accuracy Precision: 100% (All prefetched requests are prefetchable) Recall: 100% (All prefetchable requests are prefetched)

Slide 86

Slide 86 text

Evaluation – Microbenchmark • Accuracy Precision: 100% (All prefetched requests are prefetchable) Recall: 100% (All prefetchable requests are prefetched) • Effectiveness Average latency reduction: 99.47% (across all Hit cases) Average overhead: 6.44ms (across all 25 cases)

Slide 87

Slide 87 text

Evaluation – Market Apps • 32 subject apps from Google Play • 11 app categories • App size from 312 KB to 17.8 MB • 2 Android users exposed to all app options • 4G network setting

Slide 88

Slide 88 text

Evaluation – Market Apps • Results across the 32 subject apps Min. Max. Avg. Std. Dev. Runtime Requests 1 64 13.28 14.41 Hit Rate 7.7% 100% 47.76% 28.81% Latency Reduction 87.41% 99.97% 98.82% 2.3%

Slide 89

Slide 89 text

Summary

Slide 90

Slide 90 text

Summary Latency!

Slide 91

Slide 91 text

Summary Latency! Latency! (Systems)

Slide 92

Slide 92 text

Latency! (Systems) Summary Prefetching (Program Analysis) Latency!

Slide 93

Slide 93 text

Takeaways Program Analysis for Latency Optimization in Mobile Apps: • Client-only • Automatic • Domain-independent • No historical data required

Slide 94

Slide 94 text

Takeaways Program Analysis for Latency Optimization in Mobile Apps: • Significant latency reduction • Negligible overhead

Slide 95

Slide 95 text

Takeaways Program Analysis for Latency Optimization in Mobile Apps: • Foundation • Rigorous formulation of prefetching scenarios • Comprehensive & reusable microbenchmark

Slide 96

Slide 96 text

Behind the Scene: co-authors Marcelo Schmitt Laser Yingjun Lyu advisor: Nenad Medvidović

Slide 97

Slide 97 text

Behind the Scene: co-authors + acknowledgement William G.J. Halfond Atanas (Nasko) Rountev Yuhao Zhu

Slide 98

Slide 98 text

Contact: [email protected] PALOMA Website: softarch.usc.edu/PALOMA