<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
Hi all: <br>
<br>
We are now implementing OSSIM (<a class="moz-txt-link-abbreviated"
 href="http://www.ossim.net">www.ossim.net</a>) on a clients network
(snort, pads, p0f, ntop, and arpwatch running), and we have an issue
with the amount of traffic we can monitor.
<br>
<br>
The actual phase of the project is about measuring that amount using
the only server we have right now: Dell  PE2950 Xeon 5110 1.6GHz/4MB
1066FSB with 4GB FB 667MHz Memory and an Intel Pro/1000 PT NIC PCIe
Card. There is a Debian etch 64bits running. We need another NIC only
for administering purposes. The traffic in our production environment
is injected from a Cisco 6500 core, and we have four trunked links of
1Gbit each, which is being inserted (Spanned) 1 to 1, 2 to 1, 3 to 1
and 4 to 1 during the tests. In the 1 to 1 spanning we have a 17,5 Mb
peaks and 80 kbits average traffic, and in the 2 to 1 spanning we have
63 Mb peaks and 273 kbits average. Doesn't seem to much for PF_RING
(even though the system will be overloaded with so many apps: all the
sensors + database + correllation engine ...).
<br>
<br>
We have a testing environment, with a Intel(R) Pentium(R) D CPU
3.00GHz, 1 GB memory, a Realtek RTL-8169 NIC, where we want to
reproduce the improvement of PF_RING functionality. It also has a
separated NIC for administration. There is a Debian etch 32bits
running. We will use tcpreplay for injecting traffic (using a real
capture from the real environment)
<br>
<br>
In our testing environment, following the howtos about PF_RING, we have
downloaded the code, edited and run mkpatch... We have a comment
here... this script does the patch itself?? You don't need to execute
"patch" afterwards as the instructions say. Just a point.
<br>
<br>
We execute make menuconfig and select the options (rx and tx polling
for r8169 as a module, PF_RING sockets as a module) and generate the
new kernel which we boot (Debian like). No problem
<br>
<br>
We insert the LKM ring.ko -> insmod ring.ko bucket_len=1500
num_slots=8192
<br>
<br>
Success:
<br>
<br>
"Welcome to PF_RING 3.7.8
<br>
(C) 2004-08 L.Deri <a class="moz-txt-link-rfc2396E"
 href="mailto:deri@...8215..."><deri@...8215...></a>
<br>
NET: Registered protocol family 27
<br>
[PF_RING] Bucket length 1500 bytes
<br>
[PF_RING] Ring slots 8192
<br>
[PF_RING] Slot version 9
<br>
[PF_RING] Capture TX Yes [RX+TX]
<br>
[PF_RING] IP Defragment No
<br>
[PF_RING] initialized correctly
<br>
[PF_RING] registered <i class="moz-txt-slash"><span class="moz-txt-tag">/</span>proc/net/pf_ring<span
 class="moz-txt-tag">/</span></i>"
<br>
<br>
<br>
Next we compile libpfing and libpcap, generating the new dynamic
libraries in /usr/local/lib. Seems a success...
<br>
<br>
We go to ntop:
<br>
<br>
we use ./autogen.sh LDFLAGS="-L/usr/local/lib -lpfring -lpcap
-lpthread" as the options an seems a success, the execution gives
PF_RING loading options... But, executing ldd against the binary: where
is the libpcap linking option??
<br>
# ldd /usr/local/bin/ntop
<br>
       linux-gate.so.1 =>  (0xffffe000)
<br>
       libpfring.so => /usr/local/lib/libpfring.so (0xb7ee7000)
<br>
       libntopreport-3.3.5.so =>
/usr/local/lib/libntopreport-3.3.5.so (0xb7e3e000)
<br>
       libntop-3.3.5.so => /usr/local/lib/libntop-3.3.5.so
(0xb781e000)
<br>
       libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0
(0xb780c000)
<br>
       libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1
(0xb77de000)
<br>
       libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb76ad000)
<br>
       libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8
(0xb766e000)
<br>
       libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8
(0xb7534000)
<br>
       librrd_th.so.2 => /usr/lib/librrd_th.so.2 (0xb74ed000)
<br>
       libgdbm.so.3 => /usr/lib/libgdbm.so.3 (0xb74e7000)
<br>
       libz.so.1 => /usr/lib/libz.so.1 (0xb74d3000)
<br>
       /lib/ld-linux.so.2 (0xb7ef4000)
<br>
       libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb74cf000)
<br>
       libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb7465000)
<br>
       libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb7441000)
<br>
       libart_lgpl_2.so.2 => /usr/lib/libart_lgpl_2.so.2
(0xb742b000)
<br>
       libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7406000)
<br>
<br>
<br>
Then we go to snort (maybe you have nothing to do with it...):
<br>
  <br>
#./configure --enable-dynamicplugin
<br>
<br>
#export LDFLAGS="-L/usr/local/lib -lpcap"
<br>
<br>
Compiling seems successfull... But the execution takes up to 100% CPU
and 85% RAM... And again, executing ldd against the binary: where is
the libpcap linking option?? Any ideas??
<br>
# ldd /usr/local/bin/snort
<br>
       linux-gate.so.1 =>  (0xffffe000)
<br>
       libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0
(0xb7f03000)
<br>
       libpcre.so.3 => /usr/lib/libpcre.so.3 (0xb7edd000)
<br>
       libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7eb7000)
<br>
       libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0xb7ea1000)
<br>
       libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7e9d000)
<br>
       libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d6c000)
<br>
       /lib/ld-linux.so.2 (0xb7f1f000)
<br>
<br>
Also, executing any of theses binaries gives some strange messages
(dmesg), any ideas??
<br>
<br>
[PF_RING] successfully allocated 50925568 bytes at 0xf8afd000
<br>
[PF_RING] allocated 32770 slots [slot_len=1554][tot_mem=50925568]
<br>
[PF_RING] removed /proc/net/pf_ring/25491-lo.0      --> STRANGE!!!
<br>
[PF_RING] successfully allocated 50925568 bytes at 0xf8afd000
<br>
[PF_RING] allocated 32770 slots [slot_len=1554][tot_mem=50925568]
<br>
[PF_RING] removed /proc/net/pf_ring/25491-eth5.1
<br>
[PF_RING] successfully allocated 50925568 bytes at 0xf8afd000
<br>
[PF_RING] allocated 32770 slots [slot_len=1554][tot_mem=50925568]
<br>
[PF_RING] removed /proc/net/pf_ring/25491-eth0.2
<br>
[PF_RING] removed /proc/net/pf_ring/25491.0
<br>
<br>
Then we go to our tests (previously done with the standard Debian
packages and kernel), and there is very little improvement:
We have changed the module parameters num_slots: 8192 and 32768<br>
<br>
These are our results: <br>
<br>
<table frame="void" border="0" cellspacing="0" cols="4" rules="none">
  <colgroup><col width="493"><col width="119"><col width="100"><col
 width="115"></colgroup> <tbody>
    <tr>
      <td rowspan="2" align="center" height="76" valign="middle"
 width="493"><b><font face="Times,Times New Roman" size="3">Tests</font></b></td>
      <td colspan="3" align="center" width="334">Dropped by Libpcap </td>
    </tr>
    <tr>
      <td align="left">Standard Sockets</td>
      <td align="left">PF_ring: 8192</td>
      <td align="left">PF_Ring: 32768</td>
    </tr>
    <tr>
      <td align="left" height="38"><b><font face="Times,Times New Roman"
 size="3">tcpreplay -C -t -l 60 -i eth0 capt_50MB (485.37 Mbps/sec)</font></b></td>
      <td sdval="1,895" sdnum="1034;0;0,00%" align="right">189,50%</td>
      <td sdval="1,18" sdnum="1034;0;0,00%" align="right">118,00%</td>
      <td sdval="1,3" sdnum="1034;0;0,00%" align="right">130,00%</td>
    </tr>
    <tr>
      <td align="left" height="27"><b><font face="Times,Times New Roman"
 size="3">tcpreplay -C -t -l 200 -i eth0 capt_50MB ()</font></b></td>
      <td sdval="1,519" sdnum="1034;0;0,00%" align="right">151,90%</td>
      <td sdval="1,06" sdnum="1034;0;0,00%" align="right">106,00%</td>
      <td sdval="1,1" sdnum="1034;0;0,00%" align="right">110,00%</td>
    </tr>
    <tr>
      <td align="left" height="27"><b><font face="Times,Times New Roman"
 size="3">tcpreplay -C -M 20 -l 10 -i eth0 capt_50MB ()</font></b></td>
      <td sdval="0,002" sdnum="1034;0;0,00%" align="right">0,20%</td>
      <td sdval="0,009" sdnum="1034;0;0,00%" align="right">0,90%</td>
      <td sdval="0" sdnum="1034;0;0,00%" align="right">0,00%</td>
    </tr>
    <tr>
      <td align="left" height="27"><b><font face="Times,Times New Roman"
 size="3">tcpreplay -C -M 70 -l 20 -i eth0 capt_50MB ()</font></b></td>
      <td sdval="0,158" sdnum="1034;0;0,00%" align="right">15,80%</td>
      <td sdval="0,037" sdnum="1034;0;0,00%" align="right">3,70%</td>
      <td sdval="0,021" sdnum="1034;0;0,00%" align="right">2,10%</td>
    </tr>
    <tr>
      <td align="left" height="27"><b><font face="Times,Times New Roman"
 size="3">tcpreplay -C -t -l 60 -i eth0 capt_50MB ()</font></b></td>
      <td sdval="2,892" sdnum="1034;0;0,00%" align="right">289,20%</td>
      <td sdval="1,713" sdnum="1034;0;0,00%" align="right">171,30%</td>
      <td sdval="1,611" sdnum="1034;0;0,00%" align="right">161,10%</td>
    </tr>
    <tr>
      <td align="left" height="27"><b><font face="Times,Times New Roman"
 size="3">tcpreplay -C -M 0.5 -i eth0 capt_50MB ()</font></b></td>
      <td sdval="0" sdnum="1034;0;0,00%" align="right">0,00%</td>
      <td sdval="0" sdnum="1034;0;0,00%" align="right">0,00%</td>
      <td sdval="0" sdnum="1034;0;0,00%" align="right">0,00%</td>
    </tr>
  </tbody>
</table>
<br>
<br>
<br>
Something to do with the BFP filters?
<br>
Now, do you think this is enough?
<br>
We did nothing about RT_IRQ and real-time patches to the kernel, should
we?
<br>
Should we go and do the same on the production environment? Should it
go better just for having a better NIC and the driver support (intel)?
<br>
Any change to these tests we should make?
<br>
<br>
Thanx a lot just for reading...
<br>
<br>
Regards
<br>
<br>
Jorge Cuevas
<pre class="moz-signature" cols="72">
</pre>
</body>
</html>