Automatic Device Driver Synthesis with Termite Leonid Ryzhyk, Peter - - PowerPoint PPT Presentation

automatic device driver synthesis with termite
SMART_READER_LITE
LIVE PREVIEW

Automatic Device Driver Synthesis with Termite Leonid Ryzhyk, Peter - - PowerPoint PPT Presentation

Automatic Device Driver Synthesis with Termite Leonid Ryzhyk, Peter Chubb, Ihor Kuz, Etienne Le Sueur, Gernot Heiser UNSW, NICTA, Open Kernel Labs (Australia), John Keys, Intel Conventional driver development OS interface spec device spec


slide-1
SLIDE 1

Leonid Ryzhyk, Peter Chubb, Ihor Kuz, Etienne Le Sueur, Gernot Heiser UNSW, NICTA, Open Kernel Labs (Australia), John Keys, Intel

Automatic Device Driver Synthesis with Termite

slide-2
SLIDE 2

Conventional driver development

OS interface spec device spec

slide-3
SLIDE 3

Conventional driver development

OS interface spec device spec

slide-4
SLIDE 4

Conventional driver development

driver.c OS interface spec device spec requests device commands

slide-5
SLIDE 5

Driver synthesis: high-level view

driver.c Formal OS interface spec Formal device spec device commands requests

slide-6
SLIDE 6

Driver synthesis: high-level view

driver.c Formal OS interface spec Formal device spec device commands requests

slide-7
SLIDE 7

Driver synthesis: high-level view

driver.c Formal OS interface spec Formal device spec Advantages

  • Separation of concerns

– Know one thing well

  • Reuse

– Specify once, synthesise many device commands requests

slide-8
SLIDE 8

Driver synthesis by example

GPIO line

GPIO controller

ctrl data Formal OS interface spec Formal device spec

slide-9
SLIDE 9

Driver synthesis by example

GPIO line

GPIO controller

ctrl data Formal OS interface spec Formal device spec 0=low 1=high 0=off 1=on

ctrl data GPIO controller registers

slide-10
SLIDE 10

Driver synthesis by example view

GPIO line

GPIO controller

ctrl data 0=low 1=high 0=off 1=on

ctrl data GPIO controller registers

Formal OS interface spec Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-11
SLIDE 11

Driver synthesis by example view

GPIO line

GPIO controller

ctrl data 0=low 1=high 0=off 1=on

ctrl data GPIO controller registers

Formal OS interface spec Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-12
SLIDE 12

Driver synthesis by example view

GPIO line

GPIO controller

ctrl data 0=low 1=high 0=off 1=on

ctrl data GPIO controller registers

Formal OS interface spec Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-13
SLIDE 13

Driver synthesis by example view

GPIO line

GPIO controller

ctrl data 0=low 1=high 0=off 1=on

ctrl data GPIO controller registers

Formal OS interface spec Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-14
SLIDE 14

Driver synthesis by example view

GPIO line

GPIO controller

ctrl data 0=low 1=high 0=off 1=on

ctrl data GPIO controller registers

Formal OS interface spec Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-15
SLIDE 15

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec GPIO line

GPIO controller

ctrl data 0=low 1=high 0=off 1=on

ctrl data GPIO controller registers

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-16
SLIDE 16

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec GPIO line

GPIO controller

ctrl data 0=low 1=high 0=off 1=on

ctrl data GPIO controller registers

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-17
SLIDE 17

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec GPIO line

GPIO controller

ctrl data 0=low 1=high 0=off 1=on

ctrl data GPIO controller registers

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-18
SLIDE 18

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec GPIO line

GPIO controller

ctrl data 0=low 1=high 0=off 1=on

ctrl data GPIO controller registers

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-19
SLIDE 19

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec GPIO line

GPIO controller

ctrl data 0=low 1=high 0=off 1=on

ctrl data GPIO controller registers

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-20
SLIDE 20

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-21
SLIDE 21

OS spec ‖ Device spec

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-22
SLIDE 22

OS spec ‖ Device spec

Driver synthesis by example

?set ?set !ctrlWrite(1)

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-23
SLIDE 23

OS spec ‖ Device spec

Driver synthesis by example

?set ?set !ctrlWrite(1)

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-24
SLIDE 24

OS spec ‖ Device spec

Driver synthesis by example

?set ?set !ctrlWrite(1)

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

!ctrlWrite(1)

slide-25
SLIDE 25

OS spec ‖ Device spec

Driver synthesis by example

?set ?set !ctrlWrite(1)

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

!ctrlWrite(1)

slide-26
SLIDE 26

OS spec ‖ Device spec

Driver synthesis by example

?set ?set !ctrlWrite(1) !ctrlWrite(0) !ctrlWrite(1)

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-27
SLIDE 27

OS spec ‖ Device spec

Driver synthesis by example

?set ?set !dataWrite/ changeLevel !ctrlWrite(1) !ctrlWrite(0) !ctrlWrite(1)

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-28
SLIDE 28

OS spec ‖ Device spec

Driver synthesis by example

?set ?set !setComplete ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(0) !ctrlWrite(1) !ctrlWrite(0) !ctrlWrite(1) !ctrlWrite(0) !ctrlWrite(1)

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-29
SLIDE 29

OS spec ‖ Device spec

Driver synthesis by example

?set ?set !setComplete ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(0) !ctrlWrite(1) !ctrlWrite(0) !ctrlWrite(1) !ctrlWrite(0) !ctrlWrite(1)

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-30
SLIDE 30

OS spec ‖ Device spec

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

?set ?set !setComplete ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(0) !ctrlWrite(0) !ctrlWrite(1) !ctrlWrite(1) !ctrlWrite(1) !ctrlWrite(0)

slide-31
SLIDE 31

OS spec ‖ Device spec

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec !ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

?set ?set !setComplete ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(0) !ctrlWrite(0) !ctrlWrite(1) !ctrlWrite(1) !ctrlWrite(1) !ctrlWrite(0)

slide-32
SLIDE 32

OS spec ‖ Device spec

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec

?set ?set ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(1)

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-33
SLIDE 33

OS spec ‖ Device spec

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec

?set ?set ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(1)

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-34
SLIDE 34

OS spec ‖ Device spec

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec

?set ?set ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(1)

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-35
SLIDE 35

OS spec ‖ Device spec

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec

?set ?set ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(1)

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-36
SLIDE 36

OS spec ‖ Device spec

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec

?set ?set ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(1)

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-37
SLIDE 37

OS spec ‖ Device spec

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec

?set ?set ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(1)

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-38
SLIDE 38

OS spec ‖ Device spec

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec

?set ?set ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(1)

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-39
SLIDE 39

OS spec ‖ Device spec

Driver synthesis by example

?set changeLevel ?set !setComplete Formal OS interface spec

?set ?set ?set !dataWrite/ changeLevel ?set !setComplete !ctrlWrite(1)

!ctrlWrite(1) !dataWrite/ changeLevel !ctrlWrite(0)

  • ff
  • n

Formal device spec

slide-40
SLIDE 40

Modelling real device interfaces

CMD_MASTER DATA_MASTER CLK DIVIDER ARG CMD STAT RESP ISR RST DIV DISR BDRX BDST BDTX

SD host controller device

REGISTERS

slide-41
SLIDE 41

Modelling real device interfaces

CMD_MASTER DATA_MASTER CLK DIVIDER ARG CMD STAT RESP ISR RST DIV DISR BDRX BDST BDTX

SD host controller device Multiple functional units

REGISTERS

slide-42
SLIDE 42

Modelling real device interfaces

CMD_MASTER DATA_MASTER CLK DIVIDER ARG CMD STAT RESP ISR RST DIV DISR BDRX BDST BDTX

SD host controller device

REGISTERS ||| CLOCK_DIVIDER ||| (COMMAND_MASTER |[class.off]| DATA_MASTER)

Multiple functional units

REGISTERS

slide-43
SLIDE 43

Modelling real device interfaces

CMD_MASTER DATA_MASTER CLK DIVIDER ARG CMD STAT RESP ISR RST DIV DISR BDRX BDST BDTX

SD host controller device

REGISTERS ||| CLOCK_DIVIDER ||| (COMMAND_MASTER |[class.off]| DATA_MASTER)

Multiple functional units

REGISTERS

Data

slide-44
SLIDE 44

comand_reg m_command_reg; ... write_reset_reg /m_command_reg = 0

Modelling real device interfaces

CMD_MASTER DATA_MASTER CLK DIVIDER ARG STAT RESP ISR RST DIV DISR BDRX BDST BDTX

SD host controller device

REGISTERS ||| CLOCK_DIVIDER ||| (COMMAND_MASTER |[class.off]| DATA_MASTER)

Multiple functional units

REGISTERS CMD

Data

slide-45
SLIDE 45

Synthesising real drivers

The synthesis algorithm

  • The state explosion problem

– Problem: The product state space can be huge – Solution: Explore the product state space incrementally

  • Dealing with data

– Problem: Enumerating all variable assignments is infeasible – Solution: Manipulate data symbolically

slide-46
SLIDE 46

Results

  • Successfully synthesised drivers for real devices:

– Asix AX88772 USB-to-Ethernet adapter

  • Linux

– Ricoh R5C822 SD host controller

  • Linux
  • FreeBSD
slide-47
SLIDE 47

Results

USB-to-Ethernet SD OS interface spec 309 loc 641 loc Device spec 463 loc 653 loc Synthesised driver 2620 loc 4667 loc Linux driver 1200 loc 1174 loc

slide-48
SLIDE 48

Results

USB-to-Ethernet SD OS interface spec 309 loc 641 loc Device spec 463 loc 653 loc Synthesised driver 2620 loc 4667 loc Linux driver 1200 loc 1174 loc

slide-49
SLIDE 49

Results

USB-to-Ethernet SD OS interface spec 309 loc 641 loc Device spec 463 loc 653 loc Synthesised driver 2620 loc 4667 loc Linux driver 1200 loc 1174 loc

slide-50
SLIDE 50

The T ermite Debugger

slide-51
SLIDE 51

Performance

2 8 32 128 512 2048 8192 32768 20 40 60 80 100

Packet size (bytes) CPU Utilisation (%) Performance of the AX88772 USB-to-Ethernet adapter driver

2 8 32 128 512 2048 8192 32768 20 40 60 80 100

Packet size (bytes) Throughput (Mbit/s) Synthesised driver Native Linux driver Synthesised driver Native Linux driver

slide-52
SLIDE 52

Limitations

Limitations of Termite

  • Cannot specify constraints on data in memory

– alignment, fragmentation, etc

  • Complex relations among variables are not supported
  • Restrictions on the structure of specifications
  • Termite drivers require runtime support
slide-53
SLIDE 53

Future work

driver.c Formal OS interface spec Formal device spec

slide-54
SLIDE 54

Future work

HDL driver.c Formal OS interface spec Formal device spec

slide-55
SLIDE 55

Future work

HDL driver.c Formal OS interface spec Formal device spec

slide-56
SLIDE 56

Conclusions

Conclusions

  • Driver synthesis is possible

– Device experts provide device specs – OS experts provide OS specs – Termite does the rest

  • Still work-in-progress

– Addressing current limitations – Driver synthesis from HDL

slide-57
SLIDE 57

Conclusions

Conclusions

  • Driver synthesis is possible

– Device experts provide device specs – OS experts provide OS specs – Termite does the rest

  • Still work-in-progress

– Addressing current limitations – Driver synthesis from HDL We are hiring! http://ertos.nicta.com.au/jobs/