Presentation is loading. Please wait.

Presentation is loading. Please wait.

Efficient Model Checking of Data Races with Automatically-extracted Distance- based Fitness Functions João Paulo, Elton Alves, Marcelo Damorim, Fernando.

Similar presentations


Presentation on theme: "Efficient Model Checking of Data Races with Automatically-extracted Distance- based Fitness Functions João Paulo, Elton Alves, Marcelo Damorim, Fernando."— Presentation transcript:

1 Efficient Model Checking of Data Races with Automatically-extracted Distance- based Fitness Functions João Paulo, Elton Alves, Marcelo Damorim, Fernando Castor

2 Agenda Concurrent Programing Race Model Checking JPF Reade-Writers set – Algorithm Guiding Model Checking

3 Por que multi-núcleo? Antigamente, apenas aumentar o número de transistores era suficiente para aumento de desempenho Juntamente com o aumentos de cache E aumento da frequência de clock Hoje em dia, não é mais o caso Número de transistores continua crescendo Mas a frequência de clock está estagnada Consumo de energia e aquecimento são os fatores limitantes

4 Fonte: http://www.gotw.ca/publications/concurrency-ddj.htm

5 Por que multi-núcleo (cont.)? Novas abordagens tornaram-se necessárias Solução encontrada: paralelismo Diversos núcleos em uma mesma pastilha Memória única Reaproveitamento de outros componentes Localidade propicia melhor desempenho Alternativa: diversos processadores Supercomputadores usam essa abordagem Mais cara

6 “The biggest sea change in software development since the OO revolution is knocking at the door, and its name is Concurrency”. Herb Sutter

7 Concurrent Programming Is too hard! – Error prone It’s difficult to debug and find errors Most programmers thinks that know how to do it, but they don’t NonDeterminism, Deadlocks, Data Races…

8 Race Condition public class Ref { int i; void inc() { int t = i + 1; i = t; } public static void main(String args[]){ final Ref ref = new Ref(); new Thread(new Runnable(){ public void run(){ ref.inc(); } }).start(); new Thread(new Runnable(){ public void run(){ ref.inc(); } }).start(); assert ref.i == 2; } A race condition occurs if two threads access a shared variable at the same time without synchronization at least one of those accesses is a write

9 public class Ref { int i; void inc() { synchronized (this) { int t = i + 1; i = t; } public static void main(String args[]) { final Ref ref = new Ref(); new Thread(new Runnable() { public void run() { ref.inc(); } }).start(); new Thread(new Runnable() { public void run() { ref.inc(); } }).start(); assert ref.i == 2; } Field Guarded by Lock Lock acquired before the thread enter in block Ensure race freedom Guarantees the mutual exclusion

10

11

12

13 Model Checking

14 Program Model Checking It performs model checking directly into the code Rigorous method that exhaustively explores all possible SUT behaviors Is it a test?

15 Model Checking Fonte: http://babelfish.arc.nasa.gov/trac/jpf/wiki/intro/testing_vs_model_checkinghttp://babelfish.arc.nasa.gov/trac/jpf/wiki/intro/testing_vs_model_checking

16 Java PathFinder(JPF) An explicit state software model checker – Focus is on finding bugs in Java programs – Developed by NASA since 1999 – Turned Open Source in 2005 State Explosion problem

17 State Explosion # thread#Atomic Section Scheduling 226 2812.870 216 601.080.390

18 How JPF Works Backtracking State Matching Partial Order Reduction Listener

19 How do Detect Races?

20 How do we Detect Potencial Races? Using a customized JPF listener For each PUTFIELD or GETFIELD – Get Object Reference Get the accessed Field – Get Current Thread » Get Current Instruction Get the set of Acquireds Locks

21 How do we Detect Potencial Races?[2] So, we have a report like this:

22 How do we Detect Potencial Races?[3] which can be simplified for this

23 How good is our solution?

24

25

26 Our Research Idea Guide Model Checking Attempt to Avoid State explosion Uses heuristics to classifies a given a state – Interesting State has value 0 – Boring State has value Integer.Max Uses distance based fitness function

27 Our work-in-progress Find a heuristic function to guide the Model Checking Evaluate the function This is harder than we thought 

28 Our work-in-progress[2] CallTrace cg; /* computed on-the-fly */ AccessPair[] goals; /* computed on-the-fly */ MethodInfo driver; /* test driver */ int eval(State jpfState) { ThreadInfo[] tis = jpfState.threadInfos(); TraceInfo ti = cg.getTrace(); for(int i=0; i<tis.length; i++) { MethodInfo ma = tis[j].getCurrentMethod(); foreach p:Pair in goals { int d = dist(ti, p.mx) * dist(ti, p.my); if (d < min) min = d; } } return min; } int dist(TraceInfo tSource, MethodInfo mDest) { int result = shortestPath(cg, tSource, mDest); if (result == -1) { // mDest not reachable from mSource return shortestPathFromDriver(cg, driver, mSource, mDest); }

29 If we are not so good to do it… The research goal could moves to compare the ‘potencial data race’ finded with other approaches 

30


Download ppt "Efficient Model Checking of Data Races with Automatically-extracted Distance- based Fitness Functions João Paulo, Elton Alves, Marcelo Damorim, Fernando."

Similar presentations


Ads by Google