Designing High-Performance Networking Applications: Essential Insights for Developers of IXP2XXX Network Processor-based Systems

Oh the heart is a free and a fetterless thing, A wave of the ocean, a bird on the wing!
Julia Pardoe
You finally get to design and write a microblock!!! Besides implementing the networking protocol of your choice, a key goal behind the design and implementation of a microblock should be to maximize the reuse of the code across applications while still achieving high performance. Achieving this goal requires you to design interfaces carefully and eliminate dependencies between microblocks. This chapter examines some of the design considerations that affect reuse and performance, specifically addressing the following questions:
What is the optimal decomposition of packet-processing tasks into modular functions? What is the right granularity for a microblock?
What is the most efficient way to manage the packet data flow between microblocks?
How do microblocks share packet headers and per-packet state information? What are the possible design choices while implementing caching of packet headers and packet descriptors?
What type of packets does a microblock send to the Intel XScale core? How do microblocks send packets to the Intel XScale core?
How does a microblock share data structures with the Intel XScale core?
What are the special design considerations for applications running on Intel IXP23XX network processors?
The first task for a developer is to decompose the fast-path packet processing into modular functional blocks or microblocks. Picking the right granularity for a microblock is important.
If the decomposition is too fine-grained and the...