SLIDE 1
Automatic Device Driver Synthesis with Termite Leonid Ryzhyk, Peter - - PowerPoint PPT Presentation
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 2
SLIDE 3
Conventional driver development
OS interface spec device spec
SLIDE 4
Conventional driver development
driver.c OS interface spec device spec requests device commands
SLIDE 5
Driver synthesis: high-level view
driver.c Formal OS interface spec Formal device spec device commands requests
SLIDE 6
Driver synthesis: high-level view
driver.c Formal OS interface spec Formal device spec device commands requests
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
Driver synthesis by example
GPIO line
GPIO controller
ctrl data Formal OS interface spec Formal device spec
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Results
- Successfully synthesised drivers for real devices:
– Asix AX88772 USB-to-Ethernet adapter
- Linux
– Ricoh R5C822 SD host controller
- Linux
- FreeBSD
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
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
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
The T ermite Debugger
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
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
Future work
driver.c Formal OS interface spec Formal device spec
SLIDE 54
Future work
HDL driver.c Formal OS interface spec Formal device spec
SLIDE 55
Future work
HDL driver.c Formal OS interface spec Formal device spec
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
Conclusions
Conclusions
- Driver synthesis is possible
– Device experts provide device specs – OS experts provide OS specs – Termite does the rest
- Still work-in-progress