This file contains description of a trace generating utility. Refer to description of version 1 for more information
SourcePareto( int16u id, // 16-bit source id int16u prior, // priority assignemnt for all the packets generated by that source pct_size_t pct_sz, // packet size pct_size_t ipgap, // inter-packet gap (including the preamble) DOUBLE load, // load offered by the source DOUBLE on_shape, // shape parameter for the distribution of sizes of ON periods DOUBLE off_shape // shape parameter for the distribution of sizes of OFF periods )The minimum OFF period (location parameter for the OFF periods) was removed from the argument list because it is a secondary parameter dependent on load. Given a desired load, the minimum gap is calculated by the SourcePareto constructor automatically.
The following are public methods of class Generator
Generator(void); // Class constructor does not accept any arguments void Reset( void ); // resets all statistic variables and elapsed time // Reset should be called to generate multiple traces // with same set of sources void AddSource( Source* ); // add a new source to the generator void RemoveSource( Source* p ); // removes source pointed to by p Source* RemoveSource( void ); // removes first source from the (internal)list void SetLoad( DOUBLE newload ); // sets total node load (all N sources are to have // equal load of newload/N) Trace PeekNextPacket(void); // peeks at next packet before it arrives Trace GetNextPacket(void); // returns the next packet from the aggregated traffic
The following is a simple function that creates an instance of generator and generates (prints out) 1 mln. traces obtained by aggregating 128 sources of ON/OFF periods with cumulative load of 30%.
void main( void ) { int sources = 128; double load = 0.3; long traces = 1000000; Generator AG; // add sources for( int src = 0; src < sources; src++ ) AG.AddSource( new SourcePareto( src, 0, packet_size(), 9, load / sources, 1.4, 1.2 )); // output traces while( traces-- > 0 ) cout << AG.GetNextPacket(); // delete sources for( Source* psrc = AG.RemoveSource(); psrc; psrc = AG.RemoveSource()) delete psrc; }
To verify the correctness of the traffic generator we plotted a Variance-Time log-log plot. We used shape parameter for the ON periods α = 1.4. The choice of α was prompted by measurements on actual Ethernet traffic performed by Leland et al. [1]. They reported the measured Hurst parameter of 0.8 for moderate network load. The relationship between the Hurst parameter and the shape parameter α is H = (3 - α)/2 (see [2]). Thus, α = 1.4 should result in H = 0.8.
Figure above shows a variance-time log-log plot. We ran the generator with n = 32, 128, 512, and 2048 sources. The plot shows linear dependency with slope s = –0.4. The slope is related to Hurst parameter as s = 2H – 2. That results in H = 1 + s/2 = 0.8, as expected.
Reader is referred to [3] for an introduction to the concepts of self-similarity and long-range dependence.
[1] | W. Leland, M. Taqqu, W. Willinger, and D. Wilson, “On the Self-Similar Nature of Ethernet Traffic (Extended Version),” IEEE/ACM Transactions on Networking, 2(1), pp. 1-15, February 1994. |
[2] | W. Willinger, M. Taqqu, R. Sherman, and D. Wilson. “Self-similarity through high-variability: statistical analysis of Ethernet LAN traffic at the source level,” In Proc. ACM SIGCOMM '95, pp. 100-113, 1995. |
[3] | K. Park and W. Willinger, Self-similar network traffic: An overview, In K. Park and W. Willinger, editors, Self-Similar Network Traffic and Performance Evaluation. Wiley Interscience, 2000. |
4-4-2001