Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add...

73
Lyra: A Cross-Platform Language and Compiler for Data Plane Programming on Heterogeneous ASICs Jiaqi Gao, Ennan Zhai , Hongqiang Harry Liu, Rui Miao, Yu Zhou Bingchuan Tian, Chen Sun, Dennis Cai, Ming Zhang, Minlan Yu

Transcript of Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add...

Page 1: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A Cross-Platform Language and Compiler for Data Plane Programming on Heterogeneous ASICs

Jiaqi Gao, Ennan Zhai, Hongqiang Harry Liu, Rui Miao, Yu ZhouBingchuan Tian, Chen Sun, Dennis Cai, Ming Zhang, Minlan Yu

Page 2: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Programmable switches gain significant traction

2

Mem

ory

ALU

Mem

ory

ALU

Mem

ory

ALU

Mem

ory

ALU

Parser

ACL

Tabl

e

L2 T

able

IPv4

Ta

ble

IPv6

Ta

ble

Pars

er

Fixed-Function ASIC Programmable ASIC

Page 3: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Programmable switches gain significant traction

3

Mem

ory

ALU

Mem

ory

ALU

Mem

ory

ALU

Mem

ory

ALU

Parser

ACL

Tabl

e

L2 T

able

IPv4

Ta

ble

IPv6

Ta

ble

Pars

er

Fixed-Function ASIC Programmable ASIC

Page 4: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Programmable switches gain significant traction

4

Mem

ory

ALU

Mem

ory

ALU

Mem

ory

ALU

Mem

ory

ALU

Parser

ACL

Tabl

e

L2 T

able

IPv4

Ta

ble

IPv6

Ta

ble

Pars

er

Fixed-Function ASIC Programmable ASIC

Page 5: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Data plane programming is still at an early stage …

5

Page 6: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Data plane programming is still at an early stage …

6

Chip specific languages ~ Assembly languages

Page 7: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Running example: A network sequencer

7

Page 8: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Sequencer

Replica Server ID: 1

Replica Server ID: 2

Replica Server ID: 8

Running example: A network sequencer

8

Linearizing the transactions for consensus protocols such as Paxos

Page 9: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Sequencer

Replica Server ID: 1

Replica Server ID: 2

Replica Server ID: 8

Running example: A network sequencer

Add sequence header to selected flows and drop others

9

Filtersrc: 10.0.0.1

src: 10.1.0.2

src: 10.2.2.2

… Drop

Add ID Add Timestamp

Add Sequence

No Hit

Hit Routing

Linearizing the transactions for consensus protocols such as Paxos

Page 10: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Running example: A network sequencer

10

Sequencer

Replica Server ID: 1

Replica Server ID: 2

Replica Server ID: 8

Filtersrc: 10.0.0.1

src: 10.1.0.2

src: 10.2.2.2

… Drop

Add ID Add Timestamp

Add Sequence

No Hit

Hit Routingsrc: 10.0.0.1

Add sequence header to selected flows and drop others

Linearizing the transactions for consensus protocols such as Paxos

Page 11: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Filtersrc: 10.0.0.1

src: 10.1.0.2

src: 10.2.2.2

… Drop

Add ID Add Timestamp

Add Sequence

No Hit

Hit Routing

Running example: A network sequencer

11

Sequencer

src: 10.0.0.1 ID: 1 T: 23

Replica Server ID: 1

Replica Server ID: 2

Replica Server ID: 8

Add sequence header to selected flows and drop others

Linearizing the transactions for consensus protocols such as Paxos

Page 12: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Filtersrc: 10.0.0.1

src: 10.1.0.2

src: 10.2.2.2

… Drop

Add ID Add Timestamp

Add Sequence

No Hit

Hit Routing

Running example: A network sequencer

12

Sequencer

src: 10.0.0.1 ID: 1 T: 23

Replica Server ID: 1

Replica Server ID: 2

Replica Server ID: 8

Add sequence header to selected flows and drop others

Linearizing the transactions for consensus protocols such as Paxos

Page 13: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Running example: A network sequencer

13

Sequencer

Filtersrc: 10.0.0.1

src: 10.1.0.2

src: 10.2.2.2

… Drop

Add ID Add Timestamp

Add Sequence

No Hit

Hit Routingsrc: 9.8.8.8

Replica Server ID: 1

Replica Server ID: 2

Replica Server ID: 8

Add sequence header to selected flows and drop others

Linearizing the transactions for consensus protocols such as Paxos

Page 14: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Problem 1: PortabilityLow level, chip-specific languages

14

Page 15: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Tofino

Problem 1: PortabilityLow level, chip-specific languages

15

Page 16: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

// P4_14action a_shift_switch_id(server_id) { shift_left(sequence.seq, server_id, 28);}table shift_switch_id { reads { ipv4.src_ip: exact; } actions { a_shift_switch_id; }}action a_and_timestamp() { bit_and(ig_ts, ig_ts, 0x0FFFFFFF);}table and_timestamp { actions { a_and_timestamp; } default_action: a_and_timestamp();}action a_sequence_header() { add_header(sequence); bit_and(sequence.seq, sequence.seq, ig_ts);}table add_sequence_header { actions { a_sequence_header; } default_action: a_sequence_header();}

Problem 1: PortabilityLow level, chip-specific languages

16

Tofino

Page 17: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

// P4_14action a_shift_switch_id(server_id) { shift_left(sequence.seq, server_id, 28);}table shift_switch_id { reads { ipv4.src_ip: exact; } actions { a_shift_switch_id; }}action a_and_timestamp() { bit_and(ig_ts, ig_ts, 0x0FFFFFFF);}table and_timestamp { actions { a_and_timestamp; } default_action: a_and_timestamp();}action a_sequence_header() { add_header(sequence); bit_and(sequence.seq, sequence.seq, ig_ts);}table add_sequence_header { actions { a_sequence_header; } default_action: a_sequence_header();}

Problem 1: PortabilityLow level, chip-specific languages

17

add_header(sequence);sequence.seq = (server_id << 28) & (ig_ts & 0x0FFFFFFF);

Add ID Add Timestamp

Tofino

Page 18: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Tofino

// P4_14action a_shift_switch_id(server_id) { shift_left(sequence.seq, server_id, 28);}table shift_switch_id { reads { ipv4.src_ip: exact; } actions { a_shift_switch_id; }}action a_and_timestamp() { bit_and(ig_ts, ig_ts, 0x0FFFFFFF);}table and_timestamp { actions { a_and_timestamp; } default_action: a_and_timestamp();}action a_sequence_header() { add_header(sequence); bit_and(sequence.seq, sequence.seq, ig_ts);}table add_sequence_header { actions { a_sequence_header; } default_action: a_sequence_header();}

Problem 1: PortabilityLow level, chip-specific languages

18

add_header(sequence);sequence.seq = (server_id << 28) & (ig_ts & 0x0FFFFFFF);

Chip VendorsAdd ID Add Timestamp

Page 19: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Tofino

// P4_14action a_shift_switch_id(server_id) { shift_left(sequence.seq, server_id, 28);}table shift_switch_id { reads { ipv4.src_ip: exact; } actions { a_shift_switch_id; }}action a_and_timestamp() { bit_and(ig_ts, ig_ts, 0x0FFFFFFF);}table and_timestamp { actions { a_and_timestamp; } default_action: a_and_timestamp();}action a_sequence_header() { add_header(sequence); bit_and(sequence.seq, sequence.seq, ig_ts);}table add_sequence_header { actions { a_sequence_header; } default_action: a_sequence_header();}

Problem 1: PortabilityLow level, chip-specific languages

19

add_header(sequence);sequence.seq = (server_id << 28) & (ig_ts & 0x0FFFFFFF);

LanguagesChip VendorsAdd ID Add Timestamp

Page 20: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

20

Problem 2: ExtensibilityCannot program across switches

Page 21: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

21

Aggregation 1000 entries

Top of Rack 1000 entries

Filter table 300 entries

None

filter (300)

Problem 2: ExtensibilityCannot program across switches

routing(500)

Page 22: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

800 entries

22

Aggregation 1000 entries

Top of Rack 1000 entries

Filter table

routing(500)

filter (800)

300 entries

None

filter (300)

Problem 2: ExtensibilityCannot program across switches

routing(500)

Page 23: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

1300 entries800 entries

23

Aggregation 1000 entries

Top of Rack 1000 entries

Filter table

routing(500)

filter (800)

300 entries

None

filter (300)

filter (1000)

filter (300)

routing(500)

Problem 2: ExtensibilityCannot program across switches

routing(500)

Page 24: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

24

Problem 3: CompositionCo-locate with other programs

Page 25: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

25

None

filter (300)

routing(500)

Add an ARP table with 300 entries to the ToR switch

Aggregation 1000 entries

Top of Rack 1000 entries

Problem 3: CompositionCo-locate with other programs

Page 26: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

26

filter (100)

ARP table (300)

None

filter (300)

routing(500)

filter (200)

routing(500)

Add an ARP table with 300 entries to the ToR switch

Aggregation 1000 entries

Top of Rack 1000 entries

Problem 3: CompositionCo-locate with other programs

Page 27: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Data plane programming is still at an early stage

Distribute program across multiple switches

Different roles (In-band network telemetry)Expand memory or computation (Sequencer)

ExtensibilityFit multiple programs into one switch

Function overlapping

CompositionMigrate program across switches

PortabilityDifferent languages

Different architecturesDifferent ASIC models

27

Page 28: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Data plane programming is still at an early stage

Distribute program across multiple switches

Different roles (In-band network telemetry)Expand memory or computation (Sequencer)

ExtensibilityFit multiple programs into one switch

Function overlapping

CompositionMigrate program across switches

PortabilityDifferent languages

Different architecturesDifferent ASIC models

28

C language lets you get close to the machine, without getting tied up in the machine.

-- Dr. Brian Kernighan

C language lets you get close to the machine,

without getting tied up in the machine

— Dr. Brain Kernighan

Page 29: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

29

Lyra program

NPL (Trident-4)

P4 (Tofino 32Q)

Lyra compiler

Frontend Backend

Chip-specific constraint

Parser Language synthesizer

Preprocessor

Analyzer ExtensibilityOne-big-pipeline modelP4 (Silicon One)

P4 (Tofino 64Q)

Page 30: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

30

Lyra program

NPL (Trident-4)

P4 (Tofino 32Q)

Lyra compiler

Frontend Backend

Chip-specific constraint

Parser Language synthesizer

Preprocessor

Analyzer ExtensibilityOne-big-pipeline model

Portability: Language synthesizer

P4 (Silicon One)

P4 (Tofino 64Q)

Page 31: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

31

Lyra program

NPL (Trident-4)

P4 (Tofino 32Q)

Lyra compiler

Frontend Backend

Chip-specific constraint

Parser Language synthesizer

Preprocessor

Analyzer ExtensibilityOne-big-pipeline model

Portability: Language synthesizer

Topology-aware code allocation

P4 (Silicon One)

P4 (Tofino 64Q)

Page 32: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

32

Lyra program

NPL (Trident-4)

P4 (Tofino 32Q)

Lyra compiler

Frontend Backend

Chip-specific constraint

Parser Language synthesizer

Preprocessor

Analyzer ExtensibilityOne-big-pipeline model

Portability: Language synthesizer

Chip-specific constraint encoding

Topology-aware code allocation

P4 (Silicon One)

P4 (Tofino 64Q)

Page 33: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra language: One-big-pipeline model

33

Page 34: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra language: One-big-pipeline model

34

ToR Tofino

Aggregation Trident-4

ToR Tofino

Aggregation Trident-4

Per-switch model One-big-switch model

One big switch

Page 35: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

ToR Tofino

Aggregation Trident-4

ToR Tofino

Aggregation Trident-4

One-big-pipeline model

Lyra language: One-big-pipeline model

35

ToR Tofino

Aggregation Trident-4

ToR Tofino

Aggregation Trident-4

Per-switch model One-big-switch model

One big switchSequencer

ARPARP

Page 36: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra language: Program

36

// Sequencer.lyraheader_type sequence_t{ bit[32] seq;}parser_node parse_sequence{ extract_fields(sequence);}

pipeline[SEQ] {sequencer};

algorithm sequencer { add_sequence(); routing();}

func add_sequence() { extern dict<bit[32] ip, bit[4] id>[300] filter; if (ipv4.src_ip in filter) { add_header(sequence); sequence.seq = (filter[ipv4.src_ip] << 28) \ & (ig_ts & 0x0FFFFFFF); } else { drop(); }}

Page 37: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra language: Program

37

// Sequencer.lyraheader_type sequence_t{ bit[32] seq;}parser_node parse_sequence{ extract_fields(sequence);}

pipeline[SEQ] {sequencer};

algorithm sequencer { add_sequence(); routing();}

func add_sequence() { extern dict<bit[32] ip, bit[4] id>[300] filter; if (ipv4.src_ip in filter) { add_header(sequence); sequence.seq = (filter[ipv4.src_ip] << 28) \ & (ig_ts & 0x0FFFFFFF); } else { drop(); }}

• Packet• Header• Parser

Page 38: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra language: Program

38

// Sequencer.lyraheader_type sequence_t{ bit[32] seq;}parser_node parse_sequence{ extract_fields(sequence);}

pipeline[SEQ] {sequencer};

algorithm sequencer { add_sequence(); routing();}

func add_sequence() { extern dict<bit[32] ip, bit[4] id>[300] filter; if (ipv4.src_ip in filter) { add_header(sequence); sequence.seq = (filter[ipv4.src_ip] << 28) \ & (ig_ts & 0x0FFFFFFF); } else { drop(); }}

• Pipeline• Algorithm

• Packet• Header• Parser

Page 39: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra language: Program

39

// Sequencer.lyraheader_type sequence_t{ bit[32] seq;}parser_node parse_sequence{ extract_fields(sequence);}

pipeline[SEQ] {sequencer};

algorithm sequencer { add_sequence(); routing();}

func add_sequence() { extern dict<bit[32] ip, bit[4] id>[300] filter; if (ipv4.src_ip in filter) { add_header(sequence); sequence.seq = (filter[ipv4.src_ip] << 28) \ & (ig_ts & 0x0FFFFFFF); } else { drop(); }}

• Function

• Pipeline• Algorithm

• Packet• Header• Parser

Page 40: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra language: Program

40

// Sequencer.lyraheader_type sequence_t{ bit[32] seq;}parser_node parse_sequence{ extract_fields(sequence);}

pipeline[SEQ] {sequencer};

algorithm sequencer { add_sequence(); routing();}

func add_sequence() { extern dict<bit[32] ip, bit[4] id>[300] filter; if (ipv4.src_ip in filter) { add_header(sequence); sequence.seq = (filter[ipv4.src_ip] << 28) \ & (ig_ts & 0x0FFFFFFF); } else { drop(); }}

• Function

• Pipeline• Algorithm

• Packet• Header• Parser

Page 41: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

41

Lyra program

Frontend

Parser

Preprocessor

Analyzer

Backend

Chip-specific constraint

Language synthesizer

Extensibility

Lyra compiler

NPL (Trident-4)

P4 (Tofino 32Q)

P4 (Silicon One)

P4 (Tofino 64Q)One-big-pipeline model

Page 42: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

42

Lyra program

Frontend

Parser

Preprocessor

Analyzer

Backend

Chip-specific constraint

Language synthesizer

Extensibility

Lyra compiler

NPL (Trident-4)

P4 (Tofino 32Q)

P4 (Silicon One)

P4 (Tofino 64Q)One-big-pipeline model

Page 43: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Frontend

extern list<bit[32] ip>[300] filter;if (ipv4.src_ip in filter) { add_header(sequence); sequence.seq = (filter[ipv4.src_ip] << 28) \ & (ig_ts & 0x0FFFFFFF);}else { drop();}

43

Lyra program

Page 44: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Frontend

extern list<bit[32] ip>[300] filter;if (ipv4.src_ip in filter) { add_header(sequence); sequence.seq = (filter[ipv4.src_ip] << 28) \ & (ig_ts & 0x0FFFFFFF);}else { drop();}

44

p1 = ipv4.src_ip in filter; add_header(sequence); tmp1 = filter[ipv4.src_ip] << 28; tmp2 = ig_ts & 0x0FFFFFFF; sequence.seq = tmp1 & tmp2; p2 = !(ipv4.src_ip in filter); drop();

Lyra program

Intermediate representation

Page 45: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Frontend

extern list<bit[32] ip>[300] filter;if (ipv4.src_ip in filter) { add_header(sequence); sequence.seq = (filter[ipv4.src_ip] << 28) \ & (ig_ts & 0x0FFFFFFF);}else { drop();}

45

p1 = ipv4.src_ip in filter; add_header(sequence); tmp1 = filter[ipv4.src_ip] << 28; tmp2 = ig_ts & 0x0FFFFFFF; sequence.seq = tmp1 & tmp2; p2 = !(ipv4.src_ip in filter); drop();

Lyra program

Intermediate representation

One big pipeline model

No complex statementsNo branchesHas statement dependencies

Page 46: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Frontend

extern list<bit[32] ip>[300] filter;if (ipv4.src_ip in filter) { add_header(sequence); sequence.seq = (filter[ipv4.src_ip] << 28) \ & (ig_ts & 0x0FFFFFFF);}else { drop();}

46

p1 = ipv4.src_ip in filter; add_header(sequence); tmp1 = filter[ipv4.src_ip] << 28; tmp2 = ig_ts & 0x0FFFFFFF; sequence.seq = tmp1 & tmp2; p2 = !(ipv4.src_ip in filter); drop();

Lyra program

Intermediate representation

One big pipeline model

No complex statementsNo branchesHas statement dependencies

Page 47: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

47

Frontend

Parser

Preprocessor

Analyzer

Backend

Chip-specific constraint

Language synthesizer

Extensibility

Lyra compiler

Lyra program

NPL (Trident-4)

P4 (Tofino 32Q)

P4 (Silicon One)

P4 (Tofino 64Q)One-big-pipeline model

Page 48: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

48

Backend

Chip-specific constraint

Language synthesizer

Extensibility

Page 49: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

49

Backend

Chip-specific constraint

Language synthesizer

Extensibility

Portability | Compile Lyra into structured low level languages

Page 50: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

50

Backend

Chip-specific constraint

Language synthesizer

Extensibility

Portability | Compile Lyra into structured low level languages

Checks whether the program can fit into the switchComposition |

Page 51: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

51

Backend

Chip-specific constraint

Language synthesizer

Extensibility

Portability | Compile Lyra into structured low level languages

Checks whether the program can fit into the switchComposition |

Correctly deploy the program in the scopeExtensibility |

Page 52: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

52

Backend

Chip-specific constraint

Language synthesizer

Extensibility

Portability | Compile Lyra into structured low level languages

Checks whether the program can fit into the switchComposition |

Correctly deploy the program in the scopeExtensibility |

Page 53: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Languages have different programming paradigms

53

Table oriented programming Procedural oriented programming

Page 54: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Languages have different programming paradigms

54

Table oriented programming Procedural oriented programming

table 2

table 3

table 4

table 1

P4 Program

Page 55: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Languages have different programming paradigms

55

Table oriented programming Procedural oriented programming

table 2

table 3

table 4

table 1

table 1

match

action 1

action 2

statement 1

statement 2

P4 Program P4 Table

Parallel

Page 56: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

!(ipv4.src_ip in filter)

ipv4.src_ip in filteripv4.src_ip in filter

Predicate block

56

Group of statements that has the same predicate and no dependency

p2 = !(ipv4.src_ip in filter);

p1 = ipv4.src_ip in filter;

tmp1 = filter[ipv4.src_ip] << 28;add_header(sequence);

tmp2 = ig_ts & 0x0FFFFFFF;sequence.seq = tmp1 & tmp2;

drop();

Dependent

Mutual exclusive

p2 = !(ipv4.src_ip in filter);

p1 = ipv4.src_ip in filter;

tmp1 = filter[ipv4.src_ip] << 28;add_header(sequence);

tmp2 = ig_ts & 0x0FFFFFFF;sequence.seq = tmp1 & tmp2;

drop();

Page 57: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

!(ipv4.src_ip in filter)

ipv4.src_ip in filter

Predicate block

57

Group of statements that has the same predicate and no dependency

tmp2 = ig_ts & 0x0FFFFFFF;

sequence.seq = tmp1 & tmp2;

ipv4.src_ip in filter

Mutual exclusive

Dependentadd_header(sequence);

tmp1 = filter[ipv4.src_ip] << 28;

drop();

filter tabe 1

match src_ip

action 1 (input: server_id)

action 2

tmp1 = servere_id << 28;

filter table 2

action 1

Page 58: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

58

Backend

Chip-specific constraint

Language synthesizer

Extensibility

Portability | Compile Lyra into structured low level languages

Checks whether the program can fit into the switchComposition |

Correctly deploy the program in the scopeExtensibility |

Page 59: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Target-specific resource encoding: RMT

59

tmp2 = ig_ts & 0x0FFFFFFF;

sequence.seq = tmp1 & tmp2;add_header(sequence);

drop();

filter table 1

match src_ip

action 1 (input: server_id)

action 2

tmp1 = servere_id << 28;

filter table 2

action 1

Page 60: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Target-specific resource encoding: RMT

60

tmp2 = ig_ts & 0x0FFFFFFF;

sequence.seq = tmp1 & tmp2;add_header(sequence);

drop();

filter table 1

match src_ip

action 1 (input: server_id)

action 2

tmp1 = servere_id << 28;

filter table 2

action 1

Sfilter1Sfilter2

<

Page 61: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Target-specific resource encoding: RMT

61

tmp2 = ig_ts & 0x0FFFFFFF;

sequence.seq = tmp1 & tmp2;add_header(sequence);

drop();

filter table 1

match src_ip

action 1 (input: server_id)

action 2

tmp1 = servere_id << 28;

filter table 2

action 1

Sfilter1

0 ≤ Sfilter1≤ 31

0 ≤ Sfilter2≤ 31

Sfilter2<

Page 62: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Target-specific resource encoding: RMT

62

tmp2 = ig_ts & 0x0FFFFFFF;

sequence.seq = tmp1 & tmp2;add_header(sequence);

drop();

filter table 1

match src_ip

action 1 (input: server_id)

action 2

tmp1 = servere_id << 28;

filter table 2

action 1

Sfilter1

0 ≤ Sfilter1≤ 31

0 ≤ Sfilter2≤ 31

Sfilter1= 0

Sfilter2= 1

SMT solver

Sfilter2<

Page 63: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Target-specific resource encoding: RMT

63

tmp2 = ig_ts & 0x0FFFFFFF;

sequence.seq = tmp1 & tmp2;add_header(sequence);

drop();

filter table 1

match src_ip

action 1 (input: server_id)

action 2

tmp1 = servere_id << 28;

filter table 2

action 1

Sfilter1

0 ≤ Sfilter1≤ 31

0 ≤ Sfilter2≤ 31

Sfilter1= 0

Sfilter2= 1

SMT solver

SRAM memoryTCAM memoryPacket Header VectorTable num per stage

Sfilter2<

Page 64: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Lyra: A high-level data plane language & compiler

64

Backend

Chip-specific constraint

Language synthesizer

Extensibility

Portability | Compile Lyra into structured low level languages

Checks whether the program can fit into the switchComposition |

Correctly deploy the program in the scopeExtensibility |

Page 65: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Frontend Backend

65

Chip-specific constraint

Parser Language synthesizer

Preprocessor

Analyzer Extensibility

Lyra compiler

Lyra program

One-big-pipeline model

NPL (Trident-4)

P4 (Tofino 32Q)

P4 (Silicon One)

P4 (Tofino 64Q)

Lyra: A high-level data plane language & compiler

Page 66: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Evaluation

66

Page 67: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Program

P414 Lyra

LoC /Logic LoC Tables Actions Registers

Lyra LoC / Logic LoC

Synthesized P414 Synthesized NPL

LyraCompile

Time Tables Actions Registers

LyraCompile

Time Tables Registers

LongestCode Path

Ingress INT 308/99 9 8 0 207/62 0.987s 8 7 0 0.78s 4 0 9

Transit INT 275/66 6 6 0 193/46 0.914s 5 5 0 0.72s 2 0 4

Egress INT 282/73 7 7 0 197/47 0.897s 6 6 0 0.73s 2 0 4

Speedlight 453/351 21 23 6 194/97 1.352s 16 20 6 0.95s 9 6 18

NetCache 1137/937 96 96 40 372/153 1.909s 12 14 40 1.17s 3 40 20

NetChain 319/211 16 16 2 177/73 1.530s 13 16 2 0.85s 6 2 18

NetPaxos 241/140 6 11 5 150/69 1.158s 6 11 5 0.84s 3 5 4

flowlet_switching 195/130 8 7 2 113/43 0.91s 8 7 2 0.70s 4 2 12

simple_router 101/66 4 4 0 72/31 0.852s 4 4 0 0.67s 3 0 10

switch 4924/3876 131 363 0 4151/2563 33.6s 131 363 0 19.4s 125 0 53

Lyra can reduce resource usage

67

Page 68: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Program

P414 Lyra

LoC /Logic LoC Tables Actions Registers

Lyra LoC / Logic LoC

Synthesized P414 Synthesized NPL

LyraCompile

Time Tables Actions Registers

LyraCompile

Time Tables Registers

LongestCode Path

Ingress INT 308/99 9 8 0 207/62 0.987s 8 7 0 0.78s 4 0 9

Transit INT 275/66 6 6 0 193/46 0.914s 5 5 0 0.72s 2 0 4

Egress INT 282/73 7 7 0 197/47 0.897s 6 6 0 0.73s 2 0 4

Speedlight 453/351 21 23 6 194/97 1.352s 16 20 6 0.95s 9 6 18

NetCache 1137/937 96 96 40 372/153 1.909s 12 14 40 1.17s 3 40 20

NetChain 319/211 16 16 2 177/73 1.530s 13 16 2 0.85s 6 2 18

NetPaxos 241/140 6 11 5 150/69 1.158s 6 11 5 0.84s 3 5 4

flowlet_switching 195/130 8 7 2 113/43 0.91s 8 7 2 0.70s 4 2 12

simple_router 101/66 4 4 0 72/31 0.852s 4 4 0 0.67s 3 0 10

switch 4924/3876 131 363 0 4151/2563 33.6s 131 363 0 19.4s 125 0 53

Lyra can reduce resource usage

68

Page 69: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Program

P414 Lyra

LoC /Logic LoC Tables Actions Registers

Lyra LoC / Logic LoC

Synthesized P414 Synthesized NPL

LyraCompile

Time Tables Actions Registers

LyraCompile

Time Tables Registers

LongestCode Path

Ingress INT 308/99 9 8 0 207/62 0.987s 8 7 0 0.78s 4 0 9

Transit INT 275/66 6 6 0 193/46 0.914s 5 5 0 0.72s 2 0 4

Egress INT 282/73 7 7 0 197/47 0.897s 6 6 0 0.73s 2 0 4

Speedlight 453/351 21 23 6 194/97 1.352s 16 20 6 0.95s 9 6 18

NetCache 1137/937 96 96 40 372/153 1.909s 12 14 40 1.17s 3 40 20

NetChain 319/211 16 16 2 177/73 1.530s 13 16 2 0.85s 6 2 18

NetPaxos 241/140 6 11 5 150/69 1.158s 6 11 5 0.84s 3 5 4

flowlet_switching 195/130 8 7 2 113/43 0.91s 8 7 2 0.70s 4 2 12

simple_router 101/66 4 4 0 72/31 0.852s 4 4 0 0.67s 3 0 10

switch 4924/3876 131 363 0 4151/2563 33.6s 131 363 0 19.4s 125 0 53

Lyra can reduce resource usage

69

Page 70: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Program

P414 Lyra

LoC /Logic LoC Tables Actions Registers

Lyra LoC / Logic LoC

Synthesized P414 Synthesized NPL

LyraCompile

Time Tables Actions Registers

LyraCompile

Time Tables Registers

LongestCode Path

Ingress INT 308/99 9 8 0 207/62 0.987s 8 7 0 0.78s 4 0 9

Transit INT 275/66 6 6 0 193/46 0.914s 5 5 0 0.72s 2 0 4

Egress INT 282/73 7 7 0 197/47 0.897s 6 6 0 0.73s 2 0 4

Speedlight 453/351 21 23 6 194/97 1.352s 16 20 6 0.95s 9 6 18

NetCache 1137/937 96 96 40 372/153 1.909s 12 14 40 1.17s 3 40 20

NetChain 319/211 16 16 2 177/73 1.530s 13 16 2 0.85s 6 2 18

NetPaxos 241/140 6 11 5 150/69 1.158s 6 11 5 0.84s 3 5 4

flowlet_switching 195/130 8 7 2 113/43 0.91s 8 7 2 0.70s 4 2 12

simple_router 101/66 4 4 0 72/31 0.852s 4 4 0 0.67s 3 0 10

switch 4924/3876 131 363 0 4151/2563 33.6s 131 363 0 19.4s 125 0 53

Lyra can reduce resource usage

70

NetCache

nc_hdr.op == NC_READ_REQUEST

nc_hdr.op == NC_UPDATE_REPLY

check_cache_valid_actTable: check_cache_valid

set_cache_valid_actTable: set_cache_valid

Page 71: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Program

P414 Lyra

LoC /Logic LoC Tables Actions Registers

Lyra LoC / Logic LoC

Synthesized P414 Synthesized NPL

LyraCompile

Time Tables Actions Registers

LyraCompile

Time Tables Registers

LongestCode Path

Ingress INT 308/99 9 8 0 207/62 0.987s 8 7 0 0.78s 4 0 9

Transit INT 275/66 6 6 0 193/46 0.914s 5 5 0 0.72s 2 0 4

Egress INT 282/73 7 7 0 197/47 0.897s 6 6 0 0.73s 2 0 4

Speedlight 453/351 21 23 6 194/97 1.352s 16 20 6 0.95s 9 6 18

NetCache 1137/937 96 96 40 372/153 1.909s 12 14 40 1.17s 3 40 20

NetChain 319/211 16 16 2 177/73 1.530s 13 16 2 0.85s 6 2 18

NetPaxos 241/140 6 11 5 150/69 1.158s 6 11 5 0.84s 3 5 4

flowlet_switching 195/130 8 7 2 113/43 0.91s 8 7 2 0.70s 4 2 12

simple_router 101/66 4 4 0 72/31 0.852s 4 4 0 0.67s 3 0 10

switch 4924/3876 131 363 0 4151/2563 33.6s 131 363 0 19.4s 125 0 53

Lyra can reduce resource usage

71

NetCache

nc_hdr.op == NC_READ_REQUEST

nc_hdr.op == NC_UPDATE_REPLY

check_cache_valid_actTable: check_cache_valid

set_cache_valid_actTable: set_cache_valid

NetCache (Lyra)

check_cache_valid_act

Table: nc_hdr

set_cache_valid_act

Matchnc_hdr.op

Page 72: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Conclusion

72

• Lyra is the first high-level data plane language and compiler that achieves portability, extensibility and composition.

• Lyra offers a one-big-pipeline programming model and can generate runnable chip-specific code across multiple switches.

• The programs generated by Lyra use fewer hardware resources than human-written programs.

Page 73: Lyra: A Cross-Platform Language and Compiler for Data ... · src: 10.2.2.2 … Drop Add ID Add Timestamp Add Sequence No Hit Hit src: 10.0.0.1 Routing Add sequence header to selected

Thanks !