CDC-EEM vs. CDC-ECM Protocols - Improvements in TCP Throughput


The CDC-EEM protocol is intended as an alternative to the CDC-ECM protocol for applications that do not require a Control Plane. The CDC-EEM protocol simplifies some of the requirements of the USB Configuration (no control plane) and allows for multiple network frames to be sent as part of a single USB Transfer. This study will provide some indication of the benefits of using the features of CDC-EEM to allow for multiple network frames to be coalesced into a single USB Transfer. 

NOTE:  the newer CDC-NCM protocol is another alternative to CDC-ECM that retains the Control Plane. The CDC-NCM encapsulation is different in structure from EEM but has similar capabilities to CDC-EEM for sending multiple datagrams per transfer. CDC-NCM throughput numbers will be very similar to CDC-EEM for most devices.

Overview

The USB implementations impose problems when trying to get maximum throughput for other protocols such as TCP. TCP requires low Round Trip Times (RTT) and high bandwidth to get good throughput. As originally designed TCP is very good at measuring effective throughput and only offering enough data to the network that will fit without frames being dropped. Modern networking stacks (e.g. current Linux or Windows or Mac OSX) implement various TCP extensions that allow this to happen even on very fast networks (i.e. > 100Mbit/s).

While the USB has a reasonably high speed (> 400Mbit/s) the effective speed is lower due to various constraints in the design. These have the effect of increasing latency which impacts RTT which tends to reduce effective throughput for TCP. The primary constraint is in how the network frames are encapsulated and sent across the USB. ECM has a simple strategy of one network frame for each transfer. EEM allows multiple network frames per transfer.

We show that using EEM’s ability for sending multiple frames in a single USB Transfer can increase throughput by 50%. Our best case uni-directional test measured about 11 Mbytes/s for ECM and up to 26.5 MBytes/s for EEM. Our best case bi-directional test measured about 8 Mbytes/s x 2 for ECM and 14.5 Mbytes/s x 2 for EEM.

Favourites