SlideShare a Scribd company logo
http://ostinato.org/
Srivats P.
6WIND SPEED MATTERS
The Challenge 2014 DPDK Design Contest
OSTINATO
DPDKa elerated
http://ostinato.org/
What is Ostinato?
Open Source Cross Platform
Traffic Generator
http://ostinato.org/
What is DPDK?
Application
Libraries and
user-space NIC
drivers to boost
packet
processing
performance
http://ostinato.org/
Together
DPDK
Packet Processing
Power
OSTINATO
Features and
Flexibility
1/10G line rate
feature rich
traffic generator
on commodity
hardware
http://ostinato.org/
Multi-core Processor
DPDK Programming Model
Core
Packet
Processing
Software
Engine
Core
Packet
Processing
Software
Engine
Core
Launch
and
Control
of Engines
Core
Packet
Processing
Software
Engine
DPDK Libraries + Environment Abstraction Layer (EAL)
SlavesMaster
Run to completion
model for engines
Alternatively,
they can collaborate
in a pipeline model
http://ostinato.org/
Ostinato Controller -Agent Architecture
Agent
(Drone)
Controller
(Ostinato)
►Packet Generation
►Packet Capture
►Statistics
GUI/Python-Script
►Configuration
►Control
►Results
ProtoBuf based RPC
Protocols, Packet Length,
Rates etc.
http://ostinato.org/
Drone Classes and Interfaces
PortPortPortPort
RpcServer
OstService
RPC interface
Port Class
Interface
Ostinato
(Controller)
Drone
(Agent)
http://ostinato.org/
RPC Interface
service OstService {
rpc checkVersion(VersionInfo) returns (VersionCompatibility);
rpc getPortIdList(Void) returns (PortIdList);
rpc getPortConfig(PortIdList) returns (PortConfigList);
rpc modifyPort(PortConfigList) returns (Ack);
rpc getStreamIdList(PortId) returns (StreamIdList);
rpc getStreamConfig(StreamIdList) returns (StreamConfigList);
rpc addStream(StreamIdList) returns (Ack);
rpc deleteStream(StreamIdList) returns (Ack);
rpc modifyStream(StreamConfigList) returns (Ack);
rpc startTransmit(PortIdList) returns (Ack);
rpc stopTransmit(PortIdList) returns (Ack);
rpc startCapture(PortIdList) returns (Ack);
rpc stopCapture(PortIdList) returns (Ack);
rpc getCaptureBuffer(PortId) returns (CaptureBuffer);
rpc getStats(PortIdList) returns (PortStatsList);
rpc clearStats(PortIdList) returns (Ack);
}
http://ostinato.org/
Port Class Interface (1/2)
class AbstractPort {
public:
// Common functionality for all ports implemented by AbstractPort
int id();
const char* name();
bool modify(const OstProto::Port &port);
int streamCount();
StreamBase* streamAtIndex(int index);
StreamBase* stream(int streamId);
bool addStream(StreamBase *stream);
bool deleteStream(int streamId);
void updatePacketList();
(more)
http://ostinato.org/
Port Class Interface (2/2)
(contd.)
// Pure virtual functions implemented by platform specific code
virtual OstProto::LinkState linkState() = 0;
virtual bool hasExclusiveControl() = 0;
virtual bool setExclusiveControl(bool exclusive) = 0;
virtual void clearPacketList() = 0;
virtual void setPacketListSize(quint64 size) = 0
virtual void loopNextPacketSet(qint64 size, qint64 repeats,
long repeatDelaySec, long repeatDelayNsec) = 0;
virtual bool appendToPacketList(long sec, long nsec,
const uchar *packet, int length) = 0;
virtual void setPacketListLoopMode(bool loop, quint64 secDelay,
quint64 nsecDelay) = 0;
virtual void startTransmit() = 0;
virtual void stopTransmit() = 0;
virtual bool isTransmitOn() = 0;
virtual void startCapture() = 0;
virtual void stopCapture() = 0;
virtual bool isCaptureOn() = 0;
virtual QIODevice* captureData() = 0;
void stats(PortStats *stats) = 0;
}
http://ostinato.org/
AbstractPort
PcapPort
LinuxPort BsdPort WinPcapPort
Port Class Diagram (UML)
DpdkPort
Uses libpcap for
packet transmit
and capture
http://ostinato.org/
Key Point for transmitted packets
AbstractPort
computes the minimum set of unique packets
required to be transmitted
pre-builds this minimum unique packet set
during Tx, this packet set is looped over and over
No packet buffers are allocated or built
during transmit
http://ostinato.org/
DpdkPort Engines (1/2)
Port Rx Ring Polling
while (!stopRxPolling) {
rte_eth_rx_burst(rxPkts)
foreach pkt in rxPkts rte_pktmbuf_free(pkt)
}
Note: Ostinato, being a traffic generator, does not need to process Rx
packets
Port Tx
while (!stopTransmit) {
rte_eth_tx_burst(txPkts) // txPkts is pre-built
rte_delay_us(timeTillNextPktOrBurst)
}
Note: ensure rte_eth_tx_burst() does not free mbufs by bumping their
refcnt via rte_pktmbuf_clone() during packet list pre-building time so we
can keep transmitting the same mbuf again and again without
realloc/rebuild
http://ostinato.org/
DpdkPort Engines (2/2)
Port Rx Capture
while (!stopCapture) {
rte_eth_rx_burst(rxPkts)
foreach pkt in rxPkts
rte_memcpy(capBuf++, pkt)
rte_pktmbuf_free(pkt)
}
Port Statistics Rx/Tx
while (!stopStatsPolling) {
rte_eth_stats_get()
sleep(1)
}
http://ostinato.org/
Engine - Core assignment strategies
DpdkPort engines to be assigned to cores
Always On (core assignment at init)
Drone core functionality
RPC, Protocol Builders, PacketList Builder etc.
Port Rx Ring Polling
Port Statistics Rx/Tx
On-Demand (core reserved at init or assigned on-demand)
Port Tx (of pre-built packets)
Port Rx Capture
http://ostinato.org/
Core assignment example strategy #1
Core Assignment
Master: Drone core functionality + DPDK port stats (one thread polls all ports)
Slave 0: Poll Rx Rings for all ports, Capture Rx for requested ports
Slave 1: Port 1 Tx
Slave 2: Port 2 Tx
…
Slave n: Port n Tx
Pros
Dedicated core to a port Tx
Optimal for port with only 1 Tx queue
Cons
2 cores are potentially under-utilized (Master, Slave 0)
Port Rx + Capture Rx may exceed core capacity leading to packet drops
Slave 1 – n cores may be under-utilized depending on Tx Rate (or if Tx off)
#ports = (#cores – 2)
Quad-core processor can support only 2 ports
http://ostinato.org/
Core assignment example strategy #2
Core Assignment
Master: Drone core functionality + DPDK port stats (one thread polls all ports)
Slave 0: Poll Rx Rings for all ports
Slave 1: Port 1 Tx + Port 1 Capture Rx
Slave 2: Port 2 Tx + Port 2 Capture Rx
…
Slave n: Port n Tx + Port n Capture Rx
Pros
More Rx Capture Bandwidth for simultaneous capture on multiple ports
Optimal when packets transmitted from one port are captured on another
Cons
2 cores are potentially under-utilized (Master, Slave 0)
Port Tx rate may be affected by the multiplexed capture functionality
#ports = (#cores – 2)
Quad-core processor can support only 2 ports
http://ostinato.org/
Core assignment example strategy #3
Core Assignment
Master: Drone core functionality + DPDK port stats (one thread polls all ports)
Slave 0: Poll Rx Rings for all ports, Capture Rx for requested ports
Slave 1: Port Tx Q1 for all ports
Slave 2: Port Tx Q2 for all ports
…
Slave n: Port Tx Qn for all ports
Pros
Multiple cores (equal to no. of supported Tx queues) dedicated to a port Tx
Optimal for ports with multiple Tx queues
All ports supported
Cons
2 cores are potentially under-utilized (Master, Slave 0)
Port Rx + Capture Rx may exceed core capacity leading to packet drops
Slave 1 – n may be under/over-utilized depending on supported Tx queues
and Tx rates
http://ostinato.org/
The “core” problem
Engine - Core assignment strategy will determine
Max number of supported ports
Max packet transmit/capture rate on a port
No one strategy fits all use cases
Optimal solution requires knowledge of
system configuration and capacity
use case
Implement multiple strategies and allow
end-user to override the default strategy
http://ostinato.org/
DpdkPort Performance
Unfortunately, we don’t have access to DPDK
supported hardware NICs and a server-grade multi-
core processor
Current development is being done on emulated
82545EM NICs on a VirtualBox VM running on a
quad-core laptop
On this development platform, for 64-byte packets,
DpdkPort generates a max of ~190Kpps against
PcapPort’s ~15Kpps
http://ostinato.org/
DPDK Potential Improvements
DPDK Build Environment
Not straight-forward to integrate into existing applications
having their own build environment
A traffic generator doesn’t need active Rx Ring polling
If capture is not enabled on port, can PMD/NIC
automatically empty rx ring and free mbuf?
Note: Rx stats still need to be maintained and collected
Nano-second resolution Delay API
rte_delay_ns()
http://ostinato.org/
Source Code
Repo URL: https://code.google.com/r/pstavirs-dpdk/
Caveats
Code is work in progress (aka alpha quality)
Not everything discussed here is implemented as of today
(Aug 1, 2014)
http://ostinato.org/
Build Instructions
DPDK
Download DPDK - http://dpdk.org/download
Follow build and verification steps from
http://dpdk.org/doc/quick-start
Drone
hg clone https://code.google.com/r/pstavirs-dpdk/ ostinato
Export environment variables RTE_SDK and RTE_TARGET
Follow build steps from
http://ostinato.org/wiki/BuildingFromSource
http://ostinato.org/
Ostinato DpdkPort Screenshot
http://ostinato.org/
Support
For programmers who know their “stuff”
Contact the author Srivats P. <pstavirs@gmail.com>
Everyone else
Please wait till the code is ready for “General Availability”
(aka beta quality)
http://ostinato.org/
That's all folks!
Want to help with DPDK-Ostinato?

More Related Content

What's hot

Introduction to DPDK
Introduction to DPDKIntroduction to DPDK
Introduction to DPDK
Kernel TLV
 
100 M pps on PC.
100 M pps on PC.100 M pps on PC.
100 M pps on PC.
Redge Technologies
 
Debug dpdk process bottleneck & painpoints
Debug dpdk process bottleneck & painpointsDebug dpdk process bottleneck & painpoints
Debug dpdk process bottleneck & painpoints
Vipin Varghese
 
Dpdk performance
Dpdk performanceDpdk performance
Dpdk performance
Stephen Hemminger
 
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce RichardsonThe 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
harryvanhaaren
 
Dpdk applications
Dpdk applicationsDpdk applications
Dpdk applications
Vipin Varghese
 
DPDK in Containers Hands-on Lab
DPDK in Containers Hands-on LabDPDK in Containers Hands-on Lab
DPDK in Containers Hands-on Lab
Michelle Holley
 
CloudStack Metering - Working with Usage Data #CCCNA14
CloudStack Metering - Working with Usage Data #CCCNA14CloudStack Metering - Working with Usage Data #CCCNA14
CloudStack Metering - Working with Usage Data #CCCNA14
ShapeBlue
 
Kamailio - Load Balancing Load Balancers
Kamailio - Load Balancing Load BalancersKamailio - Load Balancing Load Balancers
Kamailio - Load Balancing Load Balancers
Daniel-Constantin Mierla
 
RTSP Analysis Wireshark
RTSP Analysis WiresharkRTSP Analysis Wireshark
RTSP Analysis Wireshark
Yoss Cohen
 
Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)
Andriy Berestovskyy
 
Building Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCCBuilding Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCC
Kernel TLV
 
Analysis of Open-Source Drivers for IEEE 802.11 WLANs
Analysis of Open-Source Drivers for IEEE 802.11 WLANsAnalysis of Open-Source Drivers for IEEE 802.11 WLANs
Analysis of Open-Source Drivers for IEEE 802.11 WLANs
Danh Nguyen
 
Intel® RDT Hands-on Lab
Intel® RDT Hands-on LabIntel® RDT Hands-on Lab
Intel® RDT Hands-on Lab
Michelle Holley
 
Understanding DPDK algorithmics
Understanding DPDK algorithmicsUnderstanding DPDK algorithmics
Understanding DPDK algorithmics
Denys Haryachyy
 
netfilter and iptables
netfilter and iptablesnetfilter and iptables
netfilter and iptables
Kernel TLV
 
Quick and Easy Device Drivers for Embedded Linux Using UIO
Quick and Easy Device Drivers for Embedded Linux Using UIOQuick and Easy Device Drivers for Embedded Linux Using UIO
Quick and Easy Device Drivers for Embedded Linux Using UIO
Chris Simmonds
 
Deep dive into Kubernetes Networking
Deep dive into Kubernetes NetworkingDeep dive into Kubernetes Networking
Deep dive into Kubernetes Networking
Sreenivas Makam
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and more
Brendan Gregg
 
1 intro to_dpdk_and_hw
1 intro to_dpdk_and_hw1 intro to_dpdk_and_hw
1 intro to_dpdk_and_hw
videos
 

What's hot (20)

Introduction to DPDK
Introduction to DPDKIntroduction to DPDK
Introduction to DPDK
 
100 M pps on PC.
100 M pps on PC.100 M pps on PC.
100 M pps on PC.
 
Debug dpdk process bottleneck & painpoints
Debug dpdk process bottleneck & painpointsDebug dpdk process bottleneck & painpoints
Debug dpdk process bottleneck & painpoints
 
Dpdk performance
Dpdk performanceDpdk performance
Dpdk performance
 
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce RichardsonThe 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
 
Dpdk applications
Dpdk applicationsDpdk applications
Dpdk applications
 
DPDK in Containers Hands-on Lab
DPDK in Containers Hands-on LabDPDK in Containers Hands-on Lab
DPDK in Containers Hands-on Lab
 
CloudStack Metering - Working with Usage Data #CCCNA14
CloudStack Metering - Working with Usage Data #CCCNA14CloudStack Metering - Working with Usage Data #CCCNA14
CloudStack Metering - Working with Usage Data #CCCNA14
 
Kamailio - Load Balancing Load Balancers
Kamailio - Load Balancing Load BalancersKamailio - Load Balancing Load Balancers
Kamailio - Load Balancing Load Balancers
 
RTSP Analysis Wireshark
RTSP Analysis WiresharkRTSP Analysis Wireshark
RTSP Analysis Wireshark
 
Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)
 
Building Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCCBuilding Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCC
 
Analysis of Open-Source Drivers for IEEE 802.11 WLANs
Analysis of Open-Source Drivers for IEEE 802.11 WLANsAnalysis of Open-Source Drivers for IEEE 802.11 WLANs
Analysis of Open-Source Drivers for IEEE 802.11 WLANs
 
Intel® RDT Hands-on Lab
Intel® RDT Hands-on LabIntel® RDT Hands-on Lab
Intel® RDT Hands-on Lab
 
Understanding DPDK algorithmics
Understanding DPDK algorithmicsUnderstanding DPDK algorithmics
Understanding DPDK algorithmics
 
netfilter and iptables
netfilter and iptablesnetfilter and iptables
netfilter and iptables
 
Quick and Easy Device Drivers for Embedded Linux Using UIO
Quick and Easy Device Drivers for Embedded Linux Using UIOQuick and Easy Device Drivers for Embedded Linux Using UIO
Quick and Easy Device Drivers for Embedded Linux Using UIO
 
Deep dive into Kubernetes Networking
Deep dive into Kubernetes NetworkingDeep dive into Kubernetes Networking
Deep dive into Kubernetes Networking
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and more
 
1 intro to_dpdk_and_hw
1 intro to_dpdk_and_hw1 intro to_dpdk_and_hw
1 intro to_dpdk_and_hw
 

Similar to Dpdk accelerated Ostinato

Stress your DUT
Stress your DUTStress your DUT
Stress your DUT
Redge Technologies
 
PLNOG20 - Paweł Małachowski - Stress your DUT–wykorzystanie narzędzi open sou...
PLNOG20 - Paweł Małachowski - Stress your DUT–wykorzystanie narzędzi open sou...PLNOG20 - Paweł Małachowski - Stress your DUT–wykorzystanie narzędzi open sou...
PLNOG20 - Paweł Małachowski - Stress your DUT–wykorzystanie narzędzi open sou...
PROIDEA
 
Aceleracion TCP Mikrotik.pdf
Aceleracion TCP Mikrotik.pdfAceleracion TCP Mikrotik.pdf
Aceleracion TCP Mikrotik.pdf
WifiCren
 
Porting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustPorting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to Rust
Evan Chan
 
Workshop Wireshark
Workshop Wireshark Workshop Wireshark
Workshop Wireshark
Fabio Rosa
 
Recent advance in netmap/VALE(mSwitch)
Recent advance in netmap/VALE(mSwitch)Recent advance in netmap/VALE(mSwitch)
Recent advance in netmap/VALE(mSwitch)
micchie
 
PLNOG16: Obsługa 100M pps na platformie PC , Przemysław Frasunek, Paweł Mała...
PLNOG16: Obsługa 100M pps na platformie PC, Przemysław Frasunek, Paweł Mała...PLNOG16: Obsługa 100M pps na platformie PC, Przemysław Frasunek, Paweł Mała...
PLNOG16: Obsługa 100M pps na platformie PC , Przemysław Frasunek, Paweł Mała...
PROIDEA
 
LinuxCon2009: 10Gbit/s Bi-Directional Routing on standard hardware running Linux
LinuxCon2009: 10Gbit/s Bi-Directional Routing on standard hardware running LinuxLinuxCon2009: 10Gbit/s Bi-Directional Routing on standard hardware running Linux
LinuxCon2009: 10Gbit/s Bi-Directional Routing on standard hardware running Linux
brouer
 
Evaluation of OpenFlow in RB750GL
Evaluation of OpenFlow in RB750GLEvaluation of OpenFlow in RB750GL
Evaluation of OpenFlow in RB750GL
Toshiki Tsuboi
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking Walkthrough
Thomas Graf
 
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*Install FD.IO VPP On Intel(r) Architecture & Test with Trex*
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*
Michelle Holley
 
Wireshark, Tcpdump and Network Performance tools
Wireshark, Tcpdump and Network Performance toolsWireshark, Tcpdump and Network Performance tools
Wireshark, Tcpdump and Network Performance tools
Sachidananda Sahu
 
03_clere-HTTP2 HTTP3 the State of the Art in Our Servers.pdf
03_clere-HTTP2 HTTP3 the State of the Art in Our Servers.pdf03_clere-HTTP2 HTTP3 the State of the Art in Our Servers.pdf
03_clere-HTTP2 HTTP3 the State of the Art in Our Servers.pdf
Jean-Frederic Clere
 
2015 FOSDEM - OVS Stateful Services
2015 FOSDEM - OVS Stateful Services2015 FOSDEM - OVS Stateful Services
2015 FOSDEM - OVS Stateful Services
Thomas Graf
 
Packet Card Knowledge Transferfinal
Packet Card Knowledge TransferfinalPacket Card Knowledge Transferfinal
Packet Card Knowledge Transferfinal
Abdel-Fattah M. Hmoud
 
CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016] CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016]
IO Visor Project
 
Building a QT based solution on a i.MX7 processor running Linux and FreeRTOS
Building a QT based solution on a i.MX7 processor running Linux and FreeRTOSBuilding a QT based solution on a i.MX7 processor running Linux and FreeRTOS
Building a QT based solution on a i.MX7 processor running Linux and FreeRTOS
Fernando Luiz Cola
 
Capturing NIC and Kernel TX and RX Timestamps for Packets in Go
Capturing NIC and Kernel TX and RX Timestamps for Packets in GoCapturing NIC and Kernel TX and RX Timestamps for Packets in Go
Capturing NIC and Kernel TX and RX Timestamps for Packets in Go
ScyllaDB
 
VMworld 2016: vSphere 6.x Host Resource Deep Dive
VMworld 2016: vSphere 6.x Host Resource Deep DiveVMworld 2016: vSphere 6.x Host Resource Deep Dive
VMworld 2016: vSphere 6.x Host Resource Deep Dive
VMworld
 
Linux HTTPS/TCP/IP Stack for the Fast and Secure Web
Linux HTTPS/TCP/IP Stack for the Fast and Secure WebLinux HTTPS/TCP/IP Stack for the Fast and Secure Web
Linux HTTPS/TCP/IP Stack for the Fast and Secure Web
All Things Open
 

Similar to Dpdk accelerated Ostinato (20)

Stress your DUT
Stress your DUTStress your DUT
Stress your DUT
 
PLNOG20 - Paweł Małachowski - Stress your DUT–wykorzystanie narzędzi open sou...
PLNOG20 - Paweł Małachowski - Stress your DUT–wykorzystanie narzędzi open sou...PLNOG20 - Paweł Małachowski - Stress your DUT–wykorzystanie narzędzi open sou...
PLNOG20 - Paweł Małachowski - Stress your DUT–wykorzystanie narzędzi open sou...
 
Aceleracion TCP Mikrotik.pdf
Aceleracion TCP Mikrotik.pdfAceleracion TCP Mikrotik.pdf
Aceleracion TCP Mikrotik.pdf
 
Porting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustPorting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to Rust
 
Workshop Wireshark
Workshop Wireshark Workshop Wireshark
Workshop Wireshark
 
Recent advance in netmap/VALE(mSwitch)
Recent advance in netmap/VALE(mSwitch)Recent advance in netmap/VALE(mSwitch)
Recent advance in netmap/VALE(mSwitch)
 
PLNOG16: Obsługa 100M pps na platformie PC , Przemysław Frasunek, Paweł Mała...
PLNOG16: Obsługa 100M pps na platformie PC, Przemysław Frasunek, Paweł Mała...PLNOG16: Obsługa 100M pps na platformie PC, Przemysław Frasunek, Paweł Mała...
PLNOG16: Obsługa 100M pps na platformie PC , Przemysław Frasunek, Paweł Mała...
 
LinuxCon2009: 10Gbit/s Bi-Directional Routing on standard hardware running Linux
LinuxCon2009: 10Gbit/s Bi-Directional Routing on standard hardware running LinuxLinuxCon2009: 10Gbit/s Bi-Directional Routing on standard hardware running Linux
LinuxCon2009: 10Gbit/s Bi-Directional Routing on standard hardware running Linux
 
Evaluation of OpenFlow in RB750GL
Evaluation of OpenFlow in RB750GLEvaluation of OpenFlow in RB750GL
Evaluation of OpenFlow in RB750GL
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking Walkthrough
 
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*Install FD.IO VPP On Intel(r) Architecture & Test with Trex*
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*
 
Wireshark, Tcpdump and Network Performance tools
Wireshark, Tcpdump and Network Performance toolsWireshark, Tcpdump and Network Performance tools
Wireshark, Tcpdump and Network Performance tools
 
03_clere-HTTP2 HTTP3 the State of the Art in Our Servers.pdf
03_clere-HTTP2 HTTP3 the State of the Art in Our Servers.pdf03_clere-HTTP2 HTTP3 the State of the Art in Our Servers.pdf
03_clere-HTTP2 HTTP3 the State of the Art in Our Servers.pdf
 
2015 FOSDEM - OVS Stateful Services
2015 FOSDEM - OVS Stateful Services2015 FOSDEM - OVS Stateful Services
2015 FOSDEM - OVS Stateful Services
 
Packet Card Knowledge Transferfinal
Packet Card Knowledge TransferfinalPacket Card Knowledge Transferfinal
Packet Card Knowledge Transferfinal
 
CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016] CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016]
 
Building a QT based solution on a i.MX7 processor running Linux and FreeRTOS
Building a QT based solution on a i.MX7 processor running Linux and FreeRTOSBuilding a QT based solution on a i.MX7 processor running Linux and FreeRTOS
Building a QT based solution on a i.MX7 processor running Linux and FreeRTOS
 
Capturing NIC and Kernel TX and RX Timestamps for Packets in Go
Capturing NIC and Kernel TX and RX Timestamps for Packets in GoCapturing NIC and Kernel TX and RX Timestamps for Packets in Go
Capturing NIC and Kernel TX and RX Timestamps for Packets in Go
 
VMworld 2016: vSphere 6.x Host Resource Deep Dive
VMworld 2016: vSphere 6.x Host Resource Deep DiveVMworld 2016: vSphere 6.x Host Resource Deep Dive
VMworld 2016: vSphere 6.x Host Resource Deep Dive
 
Linux HTTPS/TCP/IP Stack for the Fast and Secure Web
Linux HTTPS/TCP/IP Stack for the Fast and Secure WebLinux HTTPS/TCP/IP Stack for the Fast and Secure Web
Linux HTTPS/TCP/IP Stack for the Fast and Secure Web
 

Recently uploaded

Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 

Recently uploaded (20)

Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 

Dpdk accelerated Ostinato

  • 1. http://ostinato.org/ Srivats P. 6WIND SPEED MATTERS The Challenge 2014 DPDK Design Contest OSTINATO DPDKa elerated
  • 2. http://ostinato.org/ What is Ostinato? Open Source Cross Platform Traffic Generator
  • 3. http://ostinato.org/ What is DPDK? Application Libraries and user-space NIC drivers to boost packet processing performance
  • 4. http://ostinato.org/ Together DPDK Packet Processing Power OSTINATO Features and Flexibility 1/10G line rate feature rich traffic generator on commodity hardware
  • 5. http://ostinato.org/ Multi-core Processor DPDK Programming Model Core Packet Processing Software Engine Core Packet Processing Software Engine Core Launch and Control of Engines Core Packet Processing Software Engine DPDK Libraries + Environment Abstraction Layer (EAL) SlavesMaster Run to completion model for engines Alternatively, they can collaborate in a pipeline model
  • 6. http://ostinato.org/ Ostinato Controller -Agent Architecture Agent (Drone) Controller (Ostinato) ►Packet Generation ►Packet Capture ►Statistics GUI/Python-Script ►Configuration ►Control ►Results ProtoBuf based RPC Protocols, Packet Length, Rates etc.
  • 7. http://ostinato.org/ Drone Classes and Interfaces PortPortPortPort RpcServer OstService RPC interface Port Class Interface Ostinato (Controller) Drone (Agent)
  • 8. http://ostinato.org/ RPC Interface service OstService { rpc checkVersion(VersionInfo) returns (VersionCompatibility); rpc getPortIdList(Void) returns (PortIdList); rpc getPortConfig(PortIdList) returns (PortConfigList); rpc modifyPort(PortConfigList) returns (Ack); rpc getStreamIdList(PortId) returns (StreamIdList); rpc getStreamConfig(StreamIdList) returns (StreamConfigList); rpc addStream(StreamIdList) returns (Ack); rpc deleteStream(StreamIdList) returns (Ack); rpc modifyStream(StreamConfigList) returns (Ack); rpc startTransmit(PortIdList) returns (Ack); rpc stopTransmit(PortIdList) returns (Ack); rpc startCapture(PortIdList) returns (Ack); rpc stopCapture(PortIdList) returns (Ack); rpc getCaptureBuffer(PortId) returns (CaptureBuffer); rpc getStats(PortIdList) returns (PortStatsList); rpc clearStats(PortIdList) returns (Ack); }
  • 9. http://ostinato.org/ Port Class Interface (1/2) class AbstractPort { public: // Common functionality for all ports implemented by AbstractPort int id(); const char* name(); bool modify(const OstProto::Port &port); int streamCount(); StreamBase* streamAtIndex(int index); StreamBase* stream(int streamId); bool addStream(StreamBase *stream); bool deleteStream(int streamId); void updatePacketList(); (more)
  • 10. http://ostinato.org/ Port Class Interface (2/2) (contd.) // Pure virtual functions implemented by platform specific code virtual OstProto::LinkState linkState() = 0; virtual bool hasExclusiveControl() = 0; virtual bool setExclusiveControl(bool exclusive) = 0; virtual void clearPacketList() = 0; virtual void setPacketListSize(quint64 size) = 0 virtual void loopNextPacketSet(qint64 size, qint64 repeats, long repeatDelaySec, long repeatDelayNsec) = 0; virtual bool appendToPacketList(long sec, long nsec, const uchar *packet, int length) = 0; virtual void setPacketListLoopMode(bool loop, quint64 secDelay, quint64 nsecDelay) = 0; virtual void startTransmit() = 0; virtual void stopTransmit() = 0; virtual bool isTransmitOn() = 0; virtual void startCapture() = 0; virtual void stopCapture() = 0; virtual bool isCaptureOn() = 0; virtual QIODevice* captureData() = 0; void stats(PortStats *stats) = 0; }
  • 11. http://ostinato.org/ AbstractPort PcapPort LinuxPort BsdPort WinPcapPort Port Class Diagram (UML) DpdkPort Uses libpcap for packet transmit and capture
  • 12. http://ostinato.org/ Key Point for transmitted packets AbstractPort computes the minimum set of unique packets required to be transmitted pre-builds this minimum unique packet set during Tx, this packet set is looped over and over No packet buffers are allocated or built during transmit
  • 13. http://ostinato.org/ DpdkPort Engines (1/2) Port Rx Ring Polling while (!stopRxPolling) { rte_eth_rx_burst(rxPkts) foreach pkt in rxPkts rte_pktmbuf_free(pkt) } Note: Ostinato, being a traffic generator, does not need to process Rx packets Port Tx while (!stopTransmit) { rte_eth_tx_burst(txPkts) // txPkts is pre-built rte_delay_us(timeTillNextPktOrBurst) } Note: ensure rte_eth_tx_burst() does not free mbufs by bumping their refcnt via rte_pktmbuf_clone() during packet list pre-building time so we can keep transmitting the same mbuf again and again without realloc/rebuild
  • 14. http://ostinato.org/ DpdkPort Engines (2/2) Port Rx Capture while (!stopCapture) { rte_eth_rx_burst(rxPkts) foreach pkt in rxPkts rte_memcpy(capBuf++, pkt) rte_pktmbuf_free(pkt) } Port Statistics Rx/Tx while (!stopStatsPolling) { rte_eth_stats_get() sleep(1) }
  • 15. http://ostinato.org/ Engine - Core assignment strategies DpdkPort engines to be assigned to cores Always On (core assignment at init) Drone core functionality RPC, Protocol Builders, PacketList Builder etc. Port Rx Ring Polling Port Statistics Rx/Tx On-Demand (core reserved at init or assigned on-demand) Port Tx (of pre-built packets) Port Rx Capture
  • 16. http://ostinato.org/ Core assignment example strategy #1 Core Assignment Master: Drone core functionality + DPDK port stats (one thread polls all ports) Slave 0: Poll Rx Rings for all ports, Capture Rx for requested ports Slave 1: Port 1 Tx Slave 2: Port 2 Tx … Slave n: Port n Tx Pros Dedicated core to a port Tx Optimal for port with only 1 Tx queue Cons 2 cores are potentially under-utilized (Master, Slave 0) Port Rx + Capture Rx may exceed core capacity leading to packet drops Slave 1 – n cores may be under-utilized depending on Tx Rate (or if Tx off) #ports = (#cores – 2) Quad-core processor can support only 2 ports
  • 17. http://ostinato.org/ Core assignment example strategy #2 Core Assignment Master: Drone core functionality + DPDK port stats (one thread polls all ports) Slave 0: Poll Rx Rings for all ports Slave 1: Port 1 Tx + Port 1 Capture Rx Slave 2: Port 2 Tx + Port 2 Capture Rx … Slave n: Port n Tx + Port n Capture Rx Pros More Rx Capture Bandwidth for simultaneous capture on multiple ports Optimal when packets transmitted from one port are captured on another Cons 2 cores are potentially under-utilized (Master, Slave 0) Port Tx rate may be affected by the multiplexed capture functionality #ports = (#cores – 2) Quad-core processor can support only 2 ports
  • 18. http://ostinato.org/ Core assignment example strategy #3 Core Assignment Master: Drone core functionality + DPDK port stats (one thread polls all ports) Slave 0: Poll Rx Rings for all ports, Capture Rx for requested ports Slave 1: Port Tx Q1 for all ports Slave 2: Port Tx Q2 for all ports … Slave n: Port Tx Qn for all ports Pros Multiple cores (equal to no. of supported Tx queues) dedicated to a port Tx Optimal for ports with multiple Tx queues All ports supported Cons 2 cores are potentially under-utilized (Master, Slave 0) Port Rx + Capture Rx may exceed core capacity leading to packet drops Slave 1 – n may be under/over-utilized depending on supported Tx queues and Tx rates
  • 19. http://ostinato.org/ The “core” problem Engine - Core assignment strategy will determine Max number of supported ports Max packet transmit/capture rate on a port No one strategy fits all use cases Optimal solution requires knowledge of system configuration and capacity use case Implement multiple strategies and allow end-user to override the default strategy
  • 20. http://ostinato.org/ DpdkPort Performance Unfortunately, we don’t have access to DPDK supported hardware NICs and a server-grade multi- core processor Current development is being done on emulated 82545EM NICs on a VirtualBox VM running on a quad-core laptop On this development platform, for 64-byte packets, DpdkPort generates a max of ~190Kpps against PcapPort’s ~15Kpps
  • 21. http://ostinato.org/ DPDK Potential Improvements DPDK Build Environment Not straight-forward to integrate into existing applications having their own build environment A traffic generator doesn’t need active Rx Ring polling If capture is not enabled on port, can PMD/NIC automatically empty rx ring and free mbuf? Note: Rx stats still need to be maintained and collected Nano-second resolution Delay API rte_delay_ns()
  • 22. http://ostinato.org/ Source Code Repo URL: https://code.google.com/r/pstavirs-dpdk/ Caveats Code is work in progress (aka alpha quality) Not everything discussed here is implemented as of today (Aug 1, 2014)
  • 23. http://ostinato.org/ Build Instructions DPDK Download DPDK - http://dpdk.org/download Follow build and verification steps from http://dpdk.org/doc/quick-start Drone hg clone https://code.google.com/r/pstavirs-dpdk/ ostinato Export environment variables RTE_SDK and RTE_TARGET Follow build steps from http://ostinato.org/wiki/BuildingFromSource
  • 25. http://ostinato.org/ Support For programmers who know their “stuff” Contact the author Srivats P. <pstavirs@gmail.com> Everyone else Please wait till the code is ready for “General Availability” (aka beta quality)
  • 26. http://ostinato.org/ That's all folks! Want to help with DPDK-Ostinato?