<?xml version="1.0" encoding="iso-8859-2"?>

<zprava cislo="32/2006" jazyk="en">
<nazev>FlowMon Cache Simulation and Analysis of Inter-Packet Gaps</nazev>
<autor>Miroslava Kramáreková, Daniel Jakubík, Martin Žádník, David Šafránek</autor>
<datum>22.12.2006</datum>


<h1>Abstract</h1>

<p>Precise monitoring of network traffic can help a lot of network applications to improve their functionality. By network monitoring, applications can obtain a better conception concerning flows and packets on the network. In consequence, execution of network applications can be realised more effectively with such knowledge. To satisfy needs of high-speed network monitoring, we have developed a hardware accelerated netflow probe FlowMon which collects data about the network traffic and provides them to the application layer. FlowMon hardware design contains memories configured in a hierarchy which is similar to common computer architectures. In order to find the optimal configuration of such a memory hierarchy in FlowMon, we have analysed information about temporal and spacial localisation of packets in real network traffic. Especially, we developed a simulation model of the cache memory, which, if employed appropriately, can speed up the netflow processing in FlowMon.</p>

<p>In this report we present our results regarding simulation of the cache memory. These results make a crucial framework which helps hardware designers to justify the FlowMon design.</p>


<h1 id="a-1225168020">Introduction</h1>

<h2 id="a-1225144468">FlowMon</h2>

<p>FlowMon~<cite href="Zad04"/> processes and works with data in terms of <i>flows</i>. A flow is a set of packets each having the same properties (e.g., IP addresses). When FlowMon receives a packet, it has to update the respective monitoring information record for the relevant flow. If the received packet belongs to a flow that is not monitored yet, it has to create a new record for the respective new flow. Owing to this functionality, FlowMon has to manipulate its internal memory very frequently. The faster the manipulation with the memory is, the more detailed monitoring FlowMon can provide.</p>

<p>Hardware designers of the <a href="http://www.liberouter.org">Liberouter</a> team have decided to implement FlowMon in the environment of memories organised in a hierarchy which is similar to that we can find in present computers~<cite href="Zad05"/>. Especially, the most speed-critical memory in such a hierarchy is the cache memory. Cache memory is a very expensive piece of hardware, thus it is important to know its required capacity which is sufficient for the required speed-up of the design. Information about the currently monitored flows can be managed in such a cache memory accelerating the relevant memory operations. If the flow of a currently received packet is already present in the cache, we say there is a <i>hit</i>. Otherwise, if the flow of the packet is not managed in the cache, we say there is a <i>miss</i>. To verify potential choices of hardware designers to employ a cache of a particular size, we have simulated the required functionality of the cache on a real network traffic and we have analysed the respective number of hits and misses. In general, we have established a framework for analyses of the FlowMon s possible speed-up for given sizes of the cache memory.</p>

<h2 id="a-1225144628">Flow</h2>

<p>In our model the <i>flow</i> consists of packets, which have the same <i>key</i>. Each packet sent through the network has a source and a destination IP address and a source and a destination port, from which its <i>key</i> is generated. As the main aim of our simulation is to analyse potential usage of cache memory inside the FlowMon design, we do not employ traditional time-based analysis of network traffic but we rather consider a metric based on inter-packet distance. In particular, we consider the number of foreign packets which can be received until the key of a particular flow is removed from the cache. The resulting measuring technique is based on the notion of inter-packet gaps. A <i>gap</i> between the packet <i>A</i> and the packet <i>B</i>, both considered related to the same flow (both having the key <i>K</i>), is defined as the number of those packets having a key different from <i>K</i> which have been received between <i>A</i> and <i>B</i>.</p>

<p>The main reason for not including timing information of packet reception is independence of cache usage on throughput of the line. What is most crucial with respect to the cache usage analysis is the distance of two immediately following packets related to the same flow. Such information is not affected as much by timing aspects as by structure of the flow. Therefore our analysis employs inter-packet gaps.</p>

<h2 id="a-1225130804">Input and output of the simulation and analyses</h2>

<p>As the input for the simulation and analyses we have taken a file that contained headers of packets from a real traffic sample obtained by FlowMon from a 10Gb CESNET backbone link to NIX.CZ mirrored to 1Gb line. The header information we have processed during the analyses contains the following items:</p>

<ul>
<li>
<p>for each key (hashed representation of a particular flow):</p>

<ul>
<li>
<p>number of packets with the same key</p>
</li>
<li>
<p>average gap between packets of the key</p>
</li>
<li>
<p>minimum and maximum gap between packets of the key</p>
</li>
<li>
<p>standard deviation from sizes of the gaps of the key</p>
</li>
<li>
<p>histogram of the gaps of the key</p>
</li></ul>
</li>
<li>
<p>for all packets of all flows:</p>

<ul>
<li>
<p>maximum and minimum gap</p>
</li>
<li>
<p>average, weighted average and standard deviation from the averages of the keys</p>
</li>
<li>
<p>histogram of all averages, maximums and minimums of the keys</p>
</li></ul>
</li></ul>

<p>From histograms created for all packets we have generated graphs which emphasise the most crucial statistical information.</p>

<p>Finally, concerning the simulation of the FlowMon cache memory, we have analysed number of hits and misses with respect to different sizes of the cache.</p>

<p>We have processed inputs and established outputs by using the scripts described in <a href="#fig:scriptsscheme">Figure</a>.</p>

<obr id="fig:scriptsscheme" src="diagram">Scheme of scripts for netmix simulation and analyses</obr>

<p>For explanation of the scripts, see the following sections.</p>

<h1 id="a-1225371028">Analyses</h1>

<p>The file that we have processed has the binary UHN format and contains headers of packets. As we needed to work with this information and we found out that a program for transforming a binary UHN file to a text file already exists, we decided to use it. After using this program we got the file with headers in textual form. We have implemented scripts which manipulate the data in this textual format. We have chosen perl for encoding of this scripts because it has a good implementation of regular expressions and it provides dynamic structures, i.e., an array of unknown size. We have created few perl scripts which search in the input text, analyses the data and generates files with statistics results. These scripts cooperate by inter-connecting them by pipes.</p>

<h2 id="a-1225130740">Keys</h2>

<p>First script that we implemented is <tt>filter.pl</tt>. This script is looking for the destination and the source IP address and the destination and the source port of packets in the input file. Then it creates keys of the packets from this information. For example, the keys from the addresses in IPv4 looks like <tt>0.0.0.1:0,0.0.0.0:2</tt>, where <tt>0.0.0.1</tt> is the source IP address, <tt>0</tt> is the source port, <tt>0.0.0.0</tt> is the destination IP address and <tt>2</tt> is the destination port. Each key, created in this way, is managed as a single line of the file <i>Fk</i> which is sent to the standard output. More particularly, this line represents a respective key of the currently processed packet. We needed to work with the list of keys more times, thus we decided to create it once at the beginning.</p>

<p><tt>Filter.pl</tt> is capable of working with IPv4 as well as with IPv6 addresses. The script can be simply modified for looking for the IPs and the ports of packets in the input file that is in different format.</p>

<h2 id="a-1225289140">Flow Statistics</h2>

<p>Another script is <tt>processingkeys.pl</tt>. This script processes the output of <tt>filter.pl</tt>. Each of the lines of <i>Fk</i> containing the key of a particular packet is numbered by a unique number. This number represents the order of the incoming packet. Main part of the script manages two associative hash arrays <i>A<sub>1</sub></i> and <i>A<sub>2</sub></i>.</p>

<p>Each item of the first array (<i>A<sub>1</sub></i>) consists of the flow s key and the number of the last flow s packet. When the key is read from the input, the script checks whether the array <i>A<sub>1</sub></i> contains this key. If it does so, the inter-packet gap is counted from the number of the currently processed packet and the previously processed packet (saved in the array <i>A<sub>1</sub></i>). Hence, in this way we get the gap between two last packets of the flow. After that, the number of the last packet, that was already saved, is replaced by number of processed packet. Otherwise the new item of <i>A<sub>1</sub></i> is created with the key of the processed packet and its number.</p>

<p>Each item of the second array (<i>A<sub>2</sub></i>) consists of the flow s key, as in <i>A<sub>1</sub></i>, and of a list. Lists in <i>A<sub>2</sub></i> contain inter-packet gaps, counted for the packets of the flow, as mentioned in the previous paragraph. In fact, if there is too many foreign packets between two packets of one particular flow, the flow is deleted from the cache. In our analyses we do not delete this flow from the array <i>A<sub>2</sub></i>, but if the gap is too long, we set it to zero (maximal length of the gap is set by the respective script parameter).</p>

<p>From the values saved in the array <i>A<sub>2</sub></i>, characteristics of the each single flow are counted. We are interested in the number of packets in the flow, minimal, maximal, and average inter-packet gaps, and standard deviation from the gaps of the flow. For each flow a histogram of inter-packet gaps is constructed. This information along with information about the number of all processed packets and the number of all non-zero gaps is sent to the standard output. To a specific file, the name of which can be provided as a parameter of the script, we can save information about all gaps   i.e., the respective histogram, the number of zero gaps bigger than allowed maximum, average standard deviation, and again the number of all non-zero gaps. If the output file name is not provided, all this information is also sent to the standard output.</p>

<h2 id="a-1225287732">Statistics of Network Traffic</h2>

<p>Concerning the network traffic analysis, we focus on the data from which a potential speed-up caused by increasing the cache memory can be computed. We compute such a speed-up from cumulative amount of gaps measured with respect to their size. Enumeration of the speed-up is achieved by employing the Amdahl s Law~<cite href="Amd67"/>. The general Amdahl s Law puts the upper limit on the theoretic speed-up of a parallel processing computation with respect to acceleration achieved due to increasing number of processors. A variation of Amdahl s Law can be written in terms of the ratio of cycle counts required to complete data fetch operations from memory and cache. In our situation, the speed-up introduced by the cache depends on the amount of small inter-packet gaps. The smaller are the gaps   the higher is the speed-up. Precisely, assuming that <i>f</i> is a cumulative amount of gaps with respect to their size and <i>s</i> the expected speed-up, we adapt the Amdahl s equation in the following way:</p>

<blockquote>
  <p><i>s</i> &lt;= 1/((1-<i>f</i>) + <i>f</i>/2.5)~~~~~~~~~~~(1)</p>
</blockquote>

<p>where the constant 2.5 is taken with respect to the caching mechanism used in FlowMon. This equation is implemented in the script to compute the speed-up for each line of the particular histogram.</p>

<p>Technically, there is a lot of records containing information about the flows obtained by the <tt>processing.pl</tt> script, especially, the output is too long for direct analysis. Thus, the data can be further processed by another script   <tt>average.pl</tt>. This script browses the output of <tt>processingkeys.pl</tt> and reads the information such as the average, maximum, minimum gap of the flows, etc.</p>

<p>The main part of the script is responsible for generation of three histograms (histogram of average, histogram of maximum, and histogram of the minimum gaps). During browsing the output of the <tt>processingkeys.pl</tt> three arrays are created by <tt>average.pl</tt>, and the information regarding the averages, maximums and minimums, is consequently added there. Finally, the script generates histograms from the values saved in the arrays. Each histogram has five columns each one having the following meaning:</p>

<dl> 
<dt>from</dt>
<dd>
<p>  value, from which the gaps are bigger</p>
</dd>
<dt>to</dt>
<dd>
<p>  value, from which the gaps are smaller or equal</p>
</dd>
<dt>amount</dt>
<dd>
<p>  amount of the gaps, whose size is between the respective values of <b>from</b> and <b>to</b></p>
</dd>
<dt>cumulative</dt>
<dd>
<p>  value containing the information of how many gaps have size lower than the respective value of <b>to</b></p>
</dd>
<dt>speed-up</dt>
<dd>
<p>  potential speed up of the system, counted according to the Amdahl s law~(Equation~1) for the respective value of <b>cumulative</b></p>
</dd></dl>

<p>Besides the above-mentioned histograms, <tt>average.pl</tt> also counts and returns different information about the flows. In particular, it also returns average and weighted average from the average, maximum and minimum gaps of the analysed flows. It includes also standard deviation computed from averages and from weighted averages. For counting of the weighted average it is important to know the weight of the average of each flow. In particular, when the number of all processed packets is <i>A</i> and the number of the packets of a particular flow is <i>N</i>, the weight <i>W</i> is <i>W=N/A</i>. Finally, at the end of the output stream, information about the average, maximum and minimum number of the packets for each particular flow is returned.</p>

<h1 id="a-1225185460">Results of the Analyses</h1>

<p>We have performed four different analyses, each of which is set up for a different value of the maximal allowed gap between two packets of a particular flow. The maximal allowed gap characterises the limit of time of keeping the flow information in the cache. We have subsequently analysed the traffic with setting the maximal allowed gap to the following values   <i>100 000</i>, <i>200 000</i>, <i>300 000</i> and <i>20 000 000</i>. Because of the observation that no gap in the analysis has reached the size greater or equal to 20 000 000, we can interpret some results for this value as if there were no limits for the gap size. However, some of the results could not be interpreted without consideration of the gap size limit. We have chosen the above mentioned maximal gap numbers to establish a uniform overview of the cache usage while not keeping the resulting information overburdened. To give a rough presumption of how the inter-packet gap number is related with inactive timeout in netflow, we have realised in our experiments that <i>200000</i> gaps agree with cca <i>1</i> second long inactive timeout. As the reasons for removing a flow key from the cache can be in general independent of time, e.g., insufficient cache space or hash collisions, maximal allowed gap is more relevant measure for our simulation purposes than exact netflow timeout.</p>

<h2 id="a-1225127476">Results independent of the limit of the gap</h2>

<p>The input file has contained <i>14 210 876</i> packet headers. All of them have been processed during analyses. These packets have generated <i>1 573 132</i> different keys. For the setting of our analyses the average number of the packets with the same key (packets related to the same flow) is <i>9</i>, the maximal number is <i>58 567</i> and the minimal number is <i>1</i>.</p>

<h2 id="a-1225768180">Differences in results caused by different maximal allowed gaps</h2>

<p>There are differences between, e.g., the sizes of average gaps of the flows. With respect to state limitations we do not mention information about all 1 573 132 flows, but we present average of averages and other symmetrisation results regarding the flows. The results differ with different maximal allowed gaps.</p>

<h3 id="a-1225616116">Overall gaps</h3>

<p>From the script <tt>processingkeys.pl</tt> we get two outputs. The first one contains information about each single flow, second one contains a histogram of all gaps and the summarising information regarding all gaps. In particular, these results abstract from information about the relation of the gap to the particular flow. The summarising information is the following:</p>

<dl>
<dt>Zero gaps, which are bigger than the allowed maximum</dt>
<dd>
<p>  number of all gaps, whose size is bigger than the allowed maximum, so their size is set to zero ("Zero gaps" in <a href="#tab:summary">Table</a>)</p>
</dd>
<dt>Average standard deviation</dt>
<dd>
<p>  average from standard deviations of all flows</p>
</dd>
<dt>Number of all non-zero gaps</dt>
<dd>
<p>  gaps, which are not first gaps (first gaps have still zero size) or bigger than the allowed maximum ("Non-zero gaps" in <a href="#tab:summary">Table</a>)</p>
</dd></dl>

<p>For the real values see the table:</p>

<tab id="tab:summary" sloupce="lcccc">

<tr>
<td>
</td>
<th>
100 000
</th>
<th>
200 000
</th>
<th>
300 000
</th>
<th>
20 000 000
</th></tr>

<tr>
<th>
Zero gaps
</th>
<td>
653286
</td>
<td>
454332
</td>
<td>
365983
</td>
<td>
0
</td></tr>

<tr>
<th>
Average standard deviation
</th>
<td>
7497.16
</td>
<td>
12459.75
</td>
<td>
17408.91
</td>
<td>
172625.94
</td></tr>

<tr>
<th>
Non-zero gaps
</th>
<td>
11984458
</td>
<td>
12183412
</td>
<td>
12271761
</td>
<td>
12637744
</td></tr>

<nazev>Summary information regarding all gaps</nazev>
</tab>
<h3 id="a-1225799508">Average gaps</h3>

<p>We have counted the average inter-packet gap for each flow. Then, from these averages, we have counted its average, standard deviation, weighted average and weighted standard deviation. All these statistical data are summarised in <a href="#tab:stats">Table</a>.</p>

<tab id="tab:stats" sloupce="lcccc">

<tr>
<td>
</td>
<th>
100 000
</th>
<th>
200 000
</th>
<th>
300 000
</th>
<th>
20 000 000
</th></tr>

<tr>
<th>
Average from averages
</th>
<td>
4697.135
</td>
<td>
7205.769
</td>
<td>
9546.225
</td>
<td>
135910.321
</td></tr>

<tr>
<th>
Standard deviation from averages
</th>
<td>
1013901.366
</td>
<td>
25063.049
</td>
<td>
36029.837
</td>
<td>
908411.376
</td></tr>

<tr>
<th>
Weighted average
</th>
<td>
16207.764
</td>
<td>
8535.365
</td>
<td>
10403.703
</td>
<td>
58982.495
</td></tr>

<tr>
<th>
Standard deviation from weighted averages
</th>
<td>
10.047
</td>
<td>
0.055
</td>
<td>
0.060
</td>
<td>
0.181
</td></tr>

<tr>
<th>
Maximum average
</th>
<td>
199996
</td>
<td>
199996
</td>
<td>
299980
</td>
<td>
14090749
</td></tr>

<nazev>Table of averages taken from statistic information of flows</nazev>
</tab>
<p>Next we have created a histogram containing all the values presented above. We have constructed graphs from the histograms established for different maximal allowed gaps. The graph in <a href="#fig:histogram1">Figure</a> is a cut graph of the cumulative amount of gaps, the size of which has been smaller then the value of the item <i>to</i> in histogram (column  cumulative  in the histogram). The graph in <a href="#fig:histogram2">Figure</a> is a cut graph of speed-up of the system for different setting of the average gap. E.g., the speed-up for the value <i>2000</i> is counted as the average gap of the saved flows in the cache (which is <i>2000</i> in this particular case).</p>

<obr id="fig:histogram1" src="cumulativ">Cumulative histogram of gaps</obr>

<obr id="fig:histogram2" src="speedup">Speed up</obr>

<h3 id="a-1226053300">Maximum and minimum gaps</h3>

<p>For each flow we also found the maximum and minimum inter-packet gap. Again, we have constructed a histogram of all these maximum and minimum gaps. In consequence, we have counted the average and the weighted average of the maximum and minimum gaps. Finally, we have found maximal maximum gap and maximal minimum gap. It is worth noting that maximal maximum gap and minimum gap cannot be bigger than maximum allowed gap for the corresponding analysis.</p>

<tab id="" sloupce="lcccc">

<tr>
<td>
</td>
<th>
100 000
</th>
<th>
200 000
</th>
<th>
300 000
</th>
<th>
20 000 000
</th></tr>

<tr>
<th>
Maximum gaps averages
</th>
<td>
9412.004
</td>
<td>
15563.977
</td>
<td>
21589.499
</td>
<td>
252499.558
</td></tr>

<tr>
<th>
Maximum gaps weighted averages
</th>
<td>
44751.034
</td>
<td>
65662.288
</td>
<td>
82708.748
</td>
<td>
379858.459
</td></tr>

<tr>
<th>
Maximal maximum gap
</th>
<td>
100000
</td>
<td>
200000
</td>
<td>
299999
</td>
<td>
14128346
</td></tr>

<tr>
<th>
Minimum gaps averages
</th>
<td>
2561.761
</td>
<td>
3754.443
</td>
<td>
4823.760
</td>
<td>
87308.533
</td></tr>

<tr>
<th>
Minimum gaps weighted averages
</th>
<td>
916.812
</td>
<td>
1274.784
</td>
<td>
1583.018
</td>
<td>
21086.952
</td></tr>

<tr>
<td>
Maximal minimum gap
</td>
<td>
99996
</td>
<td>
1999960
</td>
<td>
299980
</td>
<td>
14090749
</td></tr>

<nazev>Table of maximum and minimum gaps</nazev>
</tab>
<h1 id="a-1225128372">Run of the Simulation</h1>

<h2 id="a-1225958068">Hits and Misses</h2>

<p>The aim of FlowMon designers has been to implement in the hardware part a hierarchy of memories (cache and DRAM) in order to speed up the work with the processed data. Our script <tt>hitmiss.pl</tt> simulates the work of the cache memory. The first version of this simulation script has been developed as a very simple program. There has been defined an associative hash array with a constant size of its elements   a natural representation of the cache memory. The size of this array (the capacity of the cache memory) can be set by the script parameter. The script reads the line from the standard input step by step (this script has been developed in such a way that it fits the pipe-style linking with the script <tt>filter.pl</tt>). After loading of the key, script checks if the key is already saved in the array. The reason why this script has been developed was to find out how big the cache should be in order to find the optimal number of cache hits. There are two global variables in the script   <tt>hit</tt> and <tt>miss</tt>. If the currently processed key is found in the array, <tt>hit</tt> is increased, otherwise, <tt>miss</tt> is increased provided that the key is added to the cache. If the cache is full, the first value of the array is deleted additionally before adding the key to the cache. After successful running of the script the resulting values of these two variables are printed to the standard output.</p>

<p>During experiments with the above mentioned script we have found out that the script needs to employ a more sophisticated method of organisation of the array. Especially, when the script was started with a reasonably high parameter value (the length of the cache), its computation has been too slow. Such a high time complexity was caused by frequent reorganisation of the hash structure to which the values were being saved. To overcome this problem, we have created a large array of pointers (containing <i>999983</i> items) in which each pointer refers to a smaller array. Access to the array of pointers is realised by a hash function. The respective sub-arrays are processed sequentially.</p>

<h1 id="a-1225130964">Results of the Simulation</h1>

<p>We have made a simple model of the cache and we have simulated its function. The model is represented by the script <tt>hitmiss.pl</tt>.</p>

<h2 id="a-1225961396">Hits and misses</h2>

<p>We have run the script <i>hitmiss.pl</i> for different parameter values representing different setting of the cache capacity. In other words, this means different numbers of the flows that can be stored in the cache in the same time. <a href="#tab:allpacketshitmiss">Table</a> shows the results obtained for particular settings of the cache capacity. The right-most column represents ratio of number of hits with respect to number of all packets. The results are visualised by graphs in <a href="#fig:cachesimulation">Figure</a> and <a href="#fig:hittosizeratio">Figure</a>.</p>

<tab id="tab:allpacketshitmiss" sloupce="lccc">

<tr>
<td></td>
<th>
hits
</th>
<th>
misses
</th>
<th>
ratio
</th></tr>

<tr>
<th>
100
</th>
<td>
857700
</td>
<td>
13353176
</td>
<td>
6,04%
</td></tr>

<tr>
<th>
200
</th>
<td>
866652
</td>
<td>
13344224
</td>
<td>
6,10%
</td></tr>

<tr>
<th>
500
</th>
<td>
5328302
</td>
<td>
8882574
</td>
<td>
37,49%
</td></tr>

<tr>
<th>
1000
</th>
<td>
6474444
</td>
<td>
7736432
</td>
<td>
45,56%
</td></tr>

<tr>
<th>
2000
</th>
<td>
7873891
</td>
<td>
6336985
</td>
<td>
55,41%
</td></tr>

<tr>
<th>
5000
</th>
<td>
9729892
</td>
<td>
4480984
</td>
<td>
68,47%
</td></tr>

<tr>
<th>
10 000
</th>
<td>
10803954
</td>
<td>
3406922
</td>
<td>
76,03%
</td></tr>

<tr>
<th>
15 000
</th>
<td>
11265142
</td>
<td>
2945734
</td>
<td>
79,27%
</td></tr>

<tr>
<th>
20 000
</th>
<td>
11524476
</td>
<td>
2686400
</td>
<td>
81,10%
</td></tr>

<nazev>Table of the hits and the misses</nazev>
</tab>
<obr id="fig:cachesimulation" src="cache0">Results of the FlowMon cache simulation</obr>

<obr id="fig:hittosizeratio" src="hitratio0">Distribution of different cache sizes</obr>

<h1 id="a-1225910484">Conclusion</h1>

<h2 id="a-1225310228">Summary of the Results</h2>

<p>Although we have based our analyses on just one sampled network flow, the obtained results show that potential investment in a higher-capacity cache memory does not bring the expected overall speed-up of the FlowMon system. However, what capacity of the cache memory should be exactly used in FlowMon will be more clear from more experiments obtained from various samples of real network flows. This remains for future work.</p>

<h2 id="a-1225311860">Future Work</h2>

<p>In future, we plan to change the scripts in order to enable collection of some more information which currently seems to be needed. However, our aim is to develop a robust conception about the network traffic. In order to realise that we need to analyse more input data, i.e., various high-rated samples of real network traffic). We currently encounter problems with catching such detailed netflow data. Especially, using tcpdump for getting some new inputs currently does not allow us to catch full gigabyte traffic. E.g., when we run tcpdump with parameters <tt>tcpdump i eth1 -s 40 -w traffic.dump</tt> we encountered <i>2/3</i> of all packets lost. It is obvious, that it is impossible to monitor the traffic with current software tools. This deficiency itself calls for a hardware acceleration of the netflow monitoring process. We believe that FlowMon with its HW acceleration will be able to satisfy the needs as our first experiments show. Any way, analyses of such incomplete inputs like those presented in this report can be also very useful for making a statistical picture about real network traffic.</p>


<seznamknih>

<kniha id="Zad04">Žádník, M. <i>Overview of NetFlow Monitoring
Adapter.</i> Technical Report <a
href="http://www.cesnet.cz/doc/techzpravy/2004/netflowhw/">8/2004</a>,
CESNET, Praha, 2004.</kniha>

<kniha id="Zad05">Žádník, M. <i>NetFlow probe firmware design.</i> Available <a href="http://www.liberouter.org/netflow/design.php">online</a>.</kniha>

<kniha id="Amd67">Amdahl, G. Validity of the single-processor approach to achieving large-scale computational capabilities. In <i>Proceedings of AFIPS Conference</i>, volume 30, page 483, AFIPS Press, 1967. </kniha>

</seznamknih>


</zprava>
