]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
napatech: auto-config documentation update 3788/head
authorPhil Young <py@napatech.com>
Thu, 28 Mar 2019 20:01:54 +0000 (16:01 -0400)
committerVictor Julien <victor@inliniac.net>
Tue, 9 Apr 2019 11:17:23 +0000 (13:17 +0200)
Added documentation describing how to configure suricata to automaticly
configure sreams and host buffers without using NTPL.  I.e. from
suricata.yaml.

doc/userguide/capture-hardware/napatech.rst

index bf3a27fcb3113f85c7e09d5c914274b92adb744f..3d13aa7ce8dfbd5f2c3a3e231faa4ccf1a65f815 100644 (file)
@@ -1,11 +1,8 @@
-
-
-Napatech Suricata Installation Guide
-=============================================================
+Napatech
+========
 
 Contents
 --------
-
        * Introduction
 
        * Package Installation
@@ -34,13 +31,10 @@ hardware based features:
 
        * Accurate time synchronization
 
-The Napatech Software Suite (driver package) comes in two varieties, NAC and OEM.
-The NAC package distributes deb and rpm packages to ease the installation.
-The OEM package uses a proprietary shell script to handle the installation process.
+The package uses a proprietary shell script to handle the installation process.
 In either case, gcc, make and the kernel header files are required to compile the kernel module and
 install the software.
 
-
 Package Installation
 --------------------
 
@@ -48,52 +42,20 @@ Package Installation
 
 *Root privileges are also required*
 
-Napatech NAC Package
-^^^^^^^^^^^^^^^^^^^^
-
-Red Hat Based Distros::
-
-    $ yum install kernel-devel-$(uname -r) gcc make ncurses-libs
-    $ yum install nac-pcap-<release>.x86_64.rpm
-
-Some distributions will require you to use the --nogpgcheck option with yum for the NAC Software Suite package file::
-
-    $ yum --nogpgcheck install nac-pcap-<release>.x86_64.rpm
-
-Debian Based Distros::
-
-       $ apt-get install linux-headers-$(uname .r) gcc make libncurses5
-       $ dpkg .i nac-pcap_<release>_amd64.deb
-
-To complete installation for all distros stop ntservice::
-
-       $ /opt/napatech3/bin/ntstop.sh -m
-
-Remove these existing setup files::
-
-       $ cd /opt/napatech3/config
-       $ rm ntservice.ini setup.ini
-
-Restart ntservice (a new ntservice.ini configuration file will be generated automatically)::
-
-       $ /opt/napatech3/bin/ntstart.sh -m
-
-
-Napatech OEM Package
-^^^^^^^^^^^^^^^^^^^^
+The latest driver and tools installation package can be downloaded from: https://www.napatech.com/downloads.
 
 *Note that you will be prompted to install the Napatech libpcap library. Answer "yes" if you would like to
-use the Napatech card to capture packets in WIreshark, tcpdump, or another pcap based application.
+use the Napatech card to capture packets in Wireshark, tcpdump, or another pcap based application.
 Libpcap is not needed for Suricata as native Napatech API support is included*
 
 Red Hat Based Distros::
 
   $ yum install kernel-devel-$(uname -r) gcc make
+ $ yum install kernel-devel-$(uname -r) gcc make
        $ ./package_install_3gd.sh
 
 Debian Based Distros::
 
   $ apt-get install linux-headers-$(uname .r) gcc make
+ $ apt-get install linux-headers-$(uname .r) gcc make
        $ ./package_install_3gd.sh
 
 To complete installation for all distros ntservice::
@@ -110,126 +72,286 @@ prepare for compilation::
        $ make
        $ make install-full
 
-Now edit the suricata.yaml file to configure the maximum number of streams to use. If you plan on using the load distribution
-(RSS - like) feature in the Napatech accelerator, then the list should contain the same number of streams as host buffers defined in
-ntservice.ini::
+Suricata configuration
+----------------------
 
-       Napatech:
-               # The Host Buffer Allowance for all streams
-               # (-1 = OFF, 1 - 100 = percentage of the host buffer that can be held back)
-               hba: -1
+Now edit the suricata.yaml file to configure the system. There are three ways
+the system can be configured:
 
-               # use_all_streams set to "yes" will query the Napatech service for all configured
-               # streams and listen on all of them. When set to "no" the streams config array
-               # will be used.
-               use-all-streams: yes
+  1. Auto-config without cpu-affinity: In this mode you specify the stream
+  configuration in suricata.yaml file and allow the threads to
+  roam freely. This is good for single processor systems where NUMA node
+  configuration is not a performance concern.
 
-               # The streams to listen on
-               streams: [0, 1, 2, 3, 4, 5, 6, 7]
+  2. Auto-config with cpu-affinity: In this mode you use the cpu-affinity
+  of the worker threads to control the creation and configuration of streams.
+  One stream and one worker thread will be created for each cpu identified in
+  suricata.yaml. This is best in systems with multiple NUMA nodes (i.e.
+  multi-processor systems) as the NUMA node of the host buffers is matched
+  to the core on which the thread is running.
 
-Note: hba is useful only when a stream is shared with another application.  When hba is enabled packets will be dropped
-(i.e. not delivered to suricata) when the host-buffer utilization reaches the high-water mark indicated by the hba value.
-This insures that, should suricata get behind in it's packet processing, the other application will still receive all
-of the packets.  If this is enabled without another application sharing the stream it will result in sub-optimal packet
-buffering.
+  3. Manual-config (legacy): In this mode the underlying Napatech streams are configured
+  by issuing NTPL commands prior to running suricata. Suricata then connects
+  to the existing streams on startup.
 
+Example Configuration - Auto-config without cpu-affinity:
+---------------------------------------------------------
 
-Basic Configuration
--------------------
+If cpu-affinity is not used it is necessary to explicitly define the streams in
+the Suricata configuration file. To use this option the following options should
+be set in the suricata configuration file:
 
-For the basic installation we will setup the Napatech capture accelerator to merge all physical
-ports into single stream that Suricata can read from. for this configuration, Suricata will
-handle the packet distribution to multiple threads.
+  1. Turn off cpu-affinity
 
-Here are the lines that need changing in /opt/napatech3/bin/ntservice.ini for best single buffer performance::
+  2. Enable the napatech "auto-config" option
 
-       TimeSyncReferencePriority = OSTime      # Timestamp clock synchronized to the OS
-       HostBuffersRx = [1,16,0]                # [number of host buffers, Size(MB), NUMA node]
+  3. Specify the streams that should be created on startup
+
+  4. Specify the ports that will provide traffic to suricata
+
+  5. Specify the hashmode used to distribute traffic to the streams
+
+Below are the options to set::
+
+    threading:
+      set-cpu-affinity: no
+        .
+        .
+        .
+    napatech:
+        auto-config: yes
+        streams: ["0-3"]
+        ports: [all]
+        hashmode: hash5tuplesorted
+
+Now modify ntservice.ini. You also need make sure that you have allocated enough
+host buffers in ntservice.ini for the streams. It's a good idea to also set the
+TimeSyncReferencePriority. To do this make the following changes to ntservice.ini:
+
+    HostBuffersRx = [4,16,-1] # [number of host buffers, Size(MB), NUMA node]
+    TimeSyncReferencePriority = OSTime # Timestamp clock synchronized to the OS
 
 Stop and restart ntservice after making changes to ntservice::
 
-       $ /opt/napatech3/bin/ntstop.sh -m
-       $ /opt/napatech3/bin/ntstart.sh -m
+       $ /opt/napatech3/bin/ntstop.sh
+       $ /opt/napatech3/bin/ntstart.sh
 
-Now we need to execute a few NTPL (Napatech Programming Language) commands to complete the setup. Create
-a file will the following commands::
+Now you are ready to start suricata::
 
-       Delete=All                              # Delete any existing filters
-       Setup[numaNode=0] = streamid==0         # Set stream ID 0 to NUMA 0
-       Assign[priority=0; streamid=0]= all     # Assign all phisical ports to stream ID 0
+ $ suricata -c /usr/local/etc/suricata/suricata.yaml --napatech --runmode workers
+
+Example Configuration - Auto-config with cpu-affinity:
+------------------------------------------------------
+
+This option will create a single worker-thread and stream for each CPU defined in the
+worker-cpu-set. To use this option make the following changes to suricata.yaml:
+
+1. Turn on cpu-affinity
+2. Specify the worker-cpu-set
+3. Enable the napatech "auto-config" option
+4. Specify the ports that will provide traffic to suricata
+5. Specify the hashmode that will be used to control the distribution of
+   traffic to the different streams/cpus.
+
+When you are done it should look similar to this::
+
+  threading:
+    set-cpu-affinity: yes
+    cpu-affinity:
+      management-cpu-set:
+        cpu: [ 0 ]
+      receive-cpu-set:
+        cpu: [ 0 ]
+      worker-cpu-set:
+        cpu: [ all ]
+        .
+        .
+        .
+  napatech:
+    auto-config: yes
+    ports: [all]
+    hashmode: hash5tuplesorted
+
+Prior to running Suricata in this mode you also need to configure a sufficient
+number of host buffers on each NUMA node. So, for example, if you have a two
+processor server with 32 total cores and you plan to use all of the cores you
+will need to allocate 16 host buffers on each NUMA node. It is also desirable
+to set the Napatech cards time source to the OS.
+
+To do this make the following changes to ntservice.ini::
+
+    TimeSyncReferencePriority = OSTime # Timestamp clock synchronized to the OS
+    HostBuffersRx = [16,16,0],[16,16,1] # [number of host buffers, Size(MB), NUMA node]
 
-Next execute those command using the ntpl tool::
+Stop and restart ntservice after making changes to ntservice::
 
-       $ /opt/napatech3/bin/ntpl -f <my_ntpl_file>
+       $ /opt/napatech3/bin/ntstop.sh -m
+       $ /opt/napatech3/bin/ntstart.sh -m
 
 Now you are ready to start suricata::
 
-       $ suricata -c /usr/local/etc/suricata/suricata.yaml --napatech --runmode workers
+    $ suricata -c /usr/local/etc/suricata/suricata.yaml --napatech --runmode workers
 
-Advanced Multithreaded Configuration
-------------------------------------
+Example Configuration - Manual Configuration
+--------------------------------------------
 
-Now let's do a more advanced configuration where we will use the load distribution (RSS - like) capability in the
-accelerator. We will create 8 streams and setup the accelerator to distribute the load based on a 5 tuple hash.
-Increasing buffer size will minimize packet loss only if your CPU cores are fully saturated. Setting the minimum
-buffer size (16MB) will gave the best performance (minimize L3 cache hits) if your CPU cores are keeping up.
+For Manual Configuration the Napatech streams are created by running NTPL
+commands prior to running Suricata. In this example we will setup the Napatech
+capture accelerator to merge all physical ports, and then distribute the merged
+traffic to four streams that Suricata will ingest.
 
-*Note that it is extremely important that the NUMA node the host buffers are define in is the same physical CPU
-socket that the Napatech accelerator is plugged into*
+The steps for this configuration are:
+  1. Disable the napatech auto-config option in suricata.yaml
+  2. Specify the streams that suricata is to use in suricata.yaml
+  3. Create a file with NTPL commands to create the underlying Napatech streams.
 
-First let's modify the ntservice.ini file to increase the number and size of the host buffers::
+First suricata.yaml should be configured similar to the following::
 
-       HostBuffersRx = [8,256,0]               # [number of host buffers, Size (MB), NUMA node]
+    napatech:
+      auto-config: no
+      streams: ["0-3"]
+
+Next you need to make sure you have enough host buffers defined in ntservice.ini. As
+it's also a good idea to set up the TimeSync. Here are the lines to change::
+
+       TimeSyncReferencePriority = OSTime      # Timestamp clock synchronized to the OS
+       HostBuffersRx = [4,16,-1]               # [number of host buffers, Size(MB), NUMA node]
 
 Stop and restart ntservice after making changes to ntservice::
 
-       $ /opt/napatech3/bin/ntstop.sh -m
-       $ /opt/napatech3/bin/ntstart.sh -m
+       $ /opt/napatech3/bin/ntstop.sh
+       $ /opt/napatech3/bin/ntstart.sh
 
-Now let's assign the streams to host buffers and configure the load distribution. The load distribution will be
-setup to support both tunneled and non-tunneled traffic. Create a file that contains the ntpl commands below::
+Now that ntservice is running we need to execute a few NTPL (Napatech Programming Language)
+commands to complete the setup. Create a file will the following commands::
 
        Delete=All                              # Delete any existing filters
-       Setup[numaNode=0] = streamid==0
-       Setup[numaNode=0] = streamid==1
-       Setup[numaNode=0] = streamid==2
-       Setup[numaNode=0] = streamid==3
-       Setup[numaNode=0] = streamid==4
-       Setup[numaNode=0] = streamid==5
-       Setup[numaNode=0] = streamid==6
-       Setup[numaNode=0] = streamid==7
-       HashMode[priority=4]=Hash5TupleSorted
-       Assign[priority=0; streamid=(0..7)]= all
+       Assign[streamid=(0..3)]= all    # Assign all phisical ports to stream ID 0
 
 Next execute those command using the ntpl tool::
 
        $ /opt/napatech3/bin/ntpl -f <my_ntpl_file>
 
-Now you are ready to start Suricata::
+Now you are ready to start suricata::
 
        $ suricata -c /usr/local/etc/suricata/suricata.yaml --napatech --runmode workers
 
+It is possible to specify much more elaborate configurations using this option. Simply by
+creating the appropriate NTPL file and attaching suricata to the streams.
+
 Counters
 --------
 
 For each stream that is being processed the following counters will be output in stats.log:
 
--  nt<streamid>.pkts - The number of packets recieved by the stream.
+- nt<streamid>.pkts - The number of packets recieved by the stream.
 
--  nt<streamid>.bytes - The total bytes received by the stream.
+- nt<streamid>.bytes - The total bytes received by the stream.
 
--  nt<streamid>.drop - The number of packets that were dropped from this stream due to buffer overflow conditions.
+- nt<streamid>.drop - The number of packets that were dropped from this stream due to buffer overflow conditions.
 
 If hba is enabled the following counter will also be provided:
 
--  nt<streamid>.hba_drop - the number of packets dropped because the host buffer allowance high-water mark was reached.
+- nt<streamid>.hba_drop - the number of packets dropped because the host buffer allowance high-water mark was reached.
+
+In addition to counters host buffer utilization is tracked and logged. This is also useful for
+debugging. Log messages are output for both Host and On-Board buffers when reach 25, 50, 75
+percent of utilization. Corresponding messages are output when utilization decreases.
+
+Debugging:
+
+For debugging configurations it is useful to see what traffic is flowing as well as what streams are
+created and receiving traffic. There are two tools in /opt/napatech3/bin that are useful for this:
+
+ - monitoring: this tool will, among other things, show what traffic is arriving at the port interfaces.
+
+ - profiling: this will show  host-buffers, streams and traffic flow to the streams.
+
+If suricata terminates abnormally stream definitions, which are normally removed at shutdown, may remain in effect.
+If this happens they can be cleared by issuing the "delete=all" NTPL command as follows::
+
+    # /opt/napatech3/bin/ntpl -e "delete=all"
+
+Napatech configuration options:
+-------------------------------
+
+These are the Napatech options available in the suricata configuration file::
+
+  napatech:
+    # The Host Buffer Allowance for all streams
+    # (-1 = OFF, 1 - 100 = percentage of the host buffer that can be held back)
+    # This may be enabled when sharing streams with another application.
+    # Otherwise, it should be turned off.
+    #hba: -1
+
+    # When use_all_streams is set to "yes" the initialization code will query
+    # the Napatech service for all configured streams and listen on all of them.
+    # When set to "no" the streams config array will be used.
+    #
+    # This option necessitates running the appropriate NTPL commands to create
+    # the desired streams prior to running suricata.
+    #use-all-streams: no
+
+    # The streams to listen on when cpu-affinity or auto-config is disabled.
+    # This can be either:
+    #   a list of individual streams (e.g. streams: [0,1,2,3])
+    # or
+    #   a range of streams (e.g. streams: ["0-3"])
+    #
+    #streams: ["0-7"]
+    #
+    # When auto-config is enabled the streams will be created and assigned to the
+    # NUMA node where the thread resides automatically. The streams will be created
+    # according to the number of worker threads specified in the worker cpu set.
+    # (I.e. the value of threading.cpu-affinity.worker-cpu-set.cpu.)
+    #
+    # This option cannot be used simultaneous with "use-all-streams".
+    #
+    auto-config: yes
+    #
+    # Ports indicates which napatech ports are to be used in auto-config mode.
+    # these are the port ID's of the ports that will merged prior to the traffic
+    # being distributed to the streams.
+    #
+    # This can be specified in any of the following ways:
+    #
+    #   a list of individual ports (e.g. ports: [0,1,2,3])
+    #
+    #   a range of ports (e.g. ports: [0-3])
+    #
+    #   "all" to indicate that all ports are to be merged together
+    #   (e.g. ports: [all])
+    #
+    # This has no effect if auto-config is disabled.
+    #
+    ports: [all]
+    #
+    # When auto-config is enabled the hashmode specifies the algorithm for
+    # determining to which stream a given packet is to be delivered.
+    # This can be any valid Napatech NTPL hashmode command.
+    #
+    # The most common hashmode commands are: hash2tuple, hash2tuplesorted,
+    # hash5tuple, hash5tuplesorted and roundrobin.
+    #
+    # See Napatech NTPL documentation other hashmodes and details on their use.
+    #
+    # This has no effect if auto-config is disabled.
+    #
+    hashmode: hash5tuplesorted
+
+*Note: hba is useful only when a stream is shared with another application. When hba is enabled packets will be dropped
+(i.e. not delivered to suricata) when the host-buffer utilization reaches the high-water mark indicated by the hba value.
+This insures that, should suricata get behind in it's packet processing, the other application will still receive all
+of the packets. If this is enabled without another application sharing the stream it will result in sub-optimal packet
+buffering.*
 
-In addition to counters host buffer utilization is tracked and logged.  This is also useful for
-debugging.  Log messages are output for both Host and On-Board buffers when reach 25, 50, 75
-percent of utilization.  Corresponding messages are output when utilization decreases.
+Make sure that there are enough host-buffers declared in ntservice.ini to
+accommodate the number of cores/streams being used.
 
 Support
 -------
 
 Contact a support engineer at: ntsupport@napatech.com
 
+Napatech Documentation can be found at: https://docs.napatech.com (Click the search icon, with no search text,
+to see all documents in the portal.)
\ No newline at end of file