[jira] [Commented] (METRON-822) Improve Fastcapa Performance

2017-04-06 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/METRON-822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15958837#comment-15958837
 ] 

ASF GitHub Bot commented on METRON-822:
---

Github user asfgit closed the pull request at:

https://github.com/apache/incubator-metron/pull/509


> Improve Fastcapa Performance
> 
>
> Key: METRON-822
> URL: https://issues.apache.org/jira/browse/METRON-822
> Project: Metron
>  Issue Type: Improvement
>Reporter: Nick Allen
>Assignee: Nick Allen
>
> Improve the performance and scalability of the Fastcapa probe.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (METRON-822) Improve Fastcapa Performance

2017-04-05 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/METRON-822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15957205#comment-15957205
 ] 

ASF GitHub Bot commented on METRON-822:
---

Github user nickwallen commented on the issue:

https://github.com/apache/incubator-metron/pull/509
  
As a comment on the JIRA itself, I added some details of a performance test 
showing the probe operating successfully at ~1.1 Gbps.


> Improve Fastcapa Performance
> 
>
> Key: METRON-822
> URL: https://issues.apache.org/jira/browse/METRON-822
> Project: Metron
>  Issue Type: Improvement
>Reporter: Nick Allen
>Assignee: Nick Allen
>
> Improve the performance and scalability of the Fastcapa probe.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (METRON-822) Improve Fastcapa Performance

2017-04-05 Thread Nick Allen (JIRA)

[ 
https://issues.apache.org/jira/browse/METRON-822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15957203#comment-15957203
 ] 

Nick Allen commented on METRON-822:
---

h2. Performance Test

h3. Test Environment

There were two hosts, both Cisco UCS boxes with 10G Cisco VNICs.  There is a 
point-to-point fiber connection between `enp9s0f0` on both hosts.  There is 
also a traditional switched link on `enp10s0f0` connecting these hosts.  
Packets are generated on y137 on `enp9s0f0` and are then captured on y138 over 
`enp9s0f0` by Fastcapa.  Fastcapa then uses `en10s0f0` to package and send 
those packets in bulk to Kafka running on y137.

h3. Results

The following shows the Fastcapa probe capturing ~1.1 Gbps successfully for 
roughly 10 minutes.  All metrics were inline and no significant backlog was 
created.  Effectively, no packets were dropped.  The small number shown as a 
loss are a rounded error and due to some noise on the line caused by a 
misconfigured NIC. The test was successful.

||Event ||Packet Count||Delta||
| Packets Generated   | 126,925,885 | -  |   
| Received @ Fastcapa | 126,926,236 | -351   | 
| Received @ Kafka| 126,926,235 | ~0 |

h3. Steps

Create Kakfa Topic with 256 partitions and 1 broker
{code}
[root@y137 ~]# kafka-topics.sh --zookeeper y137:2181 --create --topic pcap256 
--partitions 256 --replication-factor 1
Created topic "pcap256".
{code}

Count of the number of packets in the topic before the test. The count simply 
uses the offset.
{code}
[root@y137 ~]# kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 
y137:9092 --topic pcap256 --time -1 | tail -n +2 | awk -F":" '{s+=$3} END 
{print s}'
  0
{code}

Start Fastcapa
* Rx descriptors limited to 512 due to VNIC
* Rx queues limited to 2 due to VNIC
* All other parameters as shown in log
{code}
[root@y138 fastcapa]# fastcapa -l 0,1,2,3,4,5,6,7 --huge-dir /mnt/huge_1GB -- 
-t pcap256 -c /etc/fastcapa.y137 -r 512 -q 2 -x 32768
EAL: Detected 32 lcore(s)
EAL: Probing VFIO support...
EAL: PCI device :01:00.0 on NUMA socket 0
EAL:   probe driver: 8086:1521 net_e1000_igb
EAL: PCI device :01:00.1 on NUMA socket 0
EAL:   probe driver: 8086:1521 net_e1000_igb
EAL: PCI device :09:00.0 on NUMA socket 0
EAL:   probe driver: 1137:43 net_enic
PMD: rte_enic_pmd: Advanced Filters not available
PMD: rte_enic_pmd: vNIC MAC addr 00:35:1a:cd:6c:ad wq/rq 256/512 mtu 1500, max 
mtu:9004
PMD: rte_enic_pmd: vNIC csum tx/rx yes/yes rss yes intr mode any type min timer 
125 usec loopback tag 0x
PMD: rte_enic_pmd: vNIC resources avail: wq 1 rq 4 cq 5 intr 8
EAL: PCI device :0a:00.0 on NUMA socket 0
EAL:   probe driver: 1137:43 net_enic
[ -t KAFKA_TOPIC ] defined as pcap256
[ -c KAFKA_CONFIG ] defined as /etc/fastcapa.y137
[ -r NB_RX_DESC ] defined as 512
[ -q NB_RX_QUEUE ] defined as 2
[ -x TX_RING_SIZE ] defined as 32768
[ -p PORT_MASK ] undefined; defaulting to 0x01
[ -b BURST_SIZE ] undefined; defaulting to 32
USER1: Initializing port 0
PMD: rte_enic_pmd: Rq 0 Scatter rx mode enabled
PMD: rte_enic_pmd: Rq 0 Scatter rx mode not being used
PMD: rte_enic_pmd: Using 512 rx descriptors (sop 512, data 0)
PMD: rte_enic_pmd: Rq 1 Scatter rx mode enabled
PMD: rte_enic_pmd: Rq 1 Scatter rx mode not being used
PMD: rte_enic_pmd: Using 512 rx descriptors (sop 512, data 0)
PMD: rte_enic_pmd: TX Queues - effective number of descs:32
PMD: rte_enic_pmd: vNIC resources used:  wq 1 rq 4 cq 3 intr 0
USER1: Device setup successfully; port=0, mac=00 35 1a cd 6c ad
USER1: Launching receive worker; worker=0, core=1, queue=0
USER1: Receive worker started; core=1, socket=0, queue=0 attempts=32
USER1: Launching receive worker; worker=1, core=2, queue=1
USER1: Receive worker started; core=2, socket=0, queue=1 attempts=32
USER1: Launching transmit worker; worker=0, core=3 ring=0
USER1: Launching transmit worker; worker=1, core=4 ring=1
USER1: Transmit worker started; core=3, socket=0
USER1: Transmit worker started; core=4, socket=0
USER1: Launching transmit worker; worker=2, core=5 ring=0
USER1: Launching transmit worker; worker=3, core=6 ring=1
USER1: Transmit worker started; core=5, socket=0
USER1: Launching transmit worker; worker=4, core=7 ring=0
USER1: Transmit worker started; core=6, socket=0
USER1: Starting to monitor workers; core=0, socket=0
USER1: Transmit worker started; core=7, socket=0


  - in -  --- queued --- - out -  drops 
[nic]   2   -   -   -
[rx]2   -   2   0
[tx]2   -   2   0
[kaf]   2   0   1   0

...
{code}

Start packet generator.
{code}
[root@y137 ~]# time tcpreplay -i enp9s0f0 --loop=0 --stats=5 --preload-pcap 
--mbps 1100 example.pcap
File Cache is enabled
Actual: 1055541 packets (687500724 bytes) sent in 5.00 seconds.

[jira] [Commented] (METRON-822) Improve Fastcapa Performance

2017-04-05 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/METRON-822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15957145#comment-15957145
 ] 

ASF GitHub Bot commented on METRON-822:
---

Github user nickwallen commented on a diff in the pull request:

https://github.com/apache/incubator-metron/pull/509#discussion_r109962549
  
--- Diff: metron-sensors/fastcapa/src/kafka.c ---
@@ -21,11 +21,113 @@
 #define POLL_TIMEOUT_MS 1000
 
 /*
- * data structures required for the kafka client
+ * Passed to all callback functions to help identify the connection.
  */
-static rd_kafka_t** kaf_h;
-static rd_kafka_topic_t** kaf_top_h;
-static int num_conns;
+struct opaque {
+int conn_id;  
+};
+
+/*
+ * Data structures required for the kafka client
+ */
+static rd_kafka_t **kaf_h;
+static rd_kafka_topic_t **kaf_top_h;
+static unsigned num_conns;
+static FILE *stats_fd;
+static struct app_stats *kaf_conn_stats;
+static struct opaque *kaf_opaque;
+static uint64_t *kaf_keys;
+
+/*
+ * A callback executed when an error occurs within the kafka client
+ */
+static void kaf_error_cb (rd_kafka_t *rk, int err, const char *reason, 
void* UNUSED(opaque))
+{
+LOG_ERROR(USER1, "kafka client unexpected error; conn=%s, error=%s 
[%s] \n", 
+rd_kafka_name(rk), rd_kafka_err2str(err), reason);
+}
+
+/*
+ * A callback executed when a broker throttles the producer
+ */
+static void kaf_throttle_cb (rd_kafka_t *rk, const char *broker_name, 
int32_t broker_id, int throttle_time_ms, void* UNUSED(opaque))
+{
+LOG_ERROR(USER1, "kafka client throttle event; conn=%s, time=%dms 
broker=%s broker_id=%"PRId32" \n", 
+rd_kafka_name(rk), throttle_time_ms, broker_name, broker_id);
+}
+
+/*
+ * A callback executed on a fixed frequency (defined by 
`statistics.interval.ms`) 
+ * that provides detailed performance statistics
+ */
+static int kaf_stats_cb(rd_kafka_t *rk, char *json, size_t 
UNUSED(json_len), void *opaque) 
+{
+int rc;
+struct opaque *data = (struct opaque*) opaque;
+int conn_id = data->conn_id;   
+
+// update queue depth of this kafka connection
+kaf_conn_stats[conn_id].depth = rd_kafka_outq_len(rk);
+
+// TODO this should be handled by a logging lib that can handle faults 
and rolling the output file
--- End diff --

Created [METRON-828](https://issues.apache.org/jira/browse/METRON-828) to 
track this.


> Improve Fastcapa Performance
> 
>
> Key: METRON-822
> URL: https://issues.apache.org/jira/browse/METRON-822
> Project: Metron
>  Issue Type: Improvement
>Reporter: Nick Allen
>Assignee: Nick Allen
>
> Improve the performance and scalability of the Fastcapa probe.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (METRON-822) Improve Fastcapa Performance

2017-04-05 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/METRON-822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15957009#comment-15957009
 ] 

ASF GitHub Bot commented on METRON-822:
---

Github user nickwallen commented on a diff in the pull request:

https://github.com/apache/incubator-metron/pull/509#discussion_r109944158
  
--- Diff: metron-sensors/fastcapa/src/args.c ---
@@ -84,62 +95,167 @@ int parse_args(int argc, char** argv)
 
 // parse arguments to this application
 argvopt = argv;
-while ((opt = getopt_long(argc, argvopt, "p:b:t:c:", lgopts, 
_index)) != EOF) {
+while ((opt = getopt_long(argc, argvopt, "hp:b:t:c:r:q:s:x:", lgopts, 
_index)) != EOF) {
 switch (opt) {
 
-// portmask
-case 'p':
-app.enabled_port_mask = parse_portmask(optarg);
-if (app.enabled_port_mask == 0) {
-printf("Error: Invalid portmask: '%s'\n", optarg);
-print_usage(prgname);
+// help
+case 'h':
+print_usage();
 return -1;
-}
-break;
-
-// kafka topic
-case 't':
-app.kafka_topic = strdup(optarg);
-if (!valid(app.kafka_topic)) {
-printf("Error: Invalid kafka topic: '%s'\n", optarg);
-print_usage(prgname);
-return -1;
-}
-break;
-
-// kafka config path
-case 'c':
-app.kafka_config_path = strdup(optarg);
-if (!valid(app.kafka_config_path) || 
!file_exists(app.kafka_config_path)) {
-printf("Error: Invalid kafka config: '%s'\n", optarg);
-print_usage(prgname);
-return -1;
-}
-break;
-
-default:
-printf("Error: Invalid argument: '%s'\n", optarg);
-print_usage(prgname);
-return -1;
-}
+
+// burst size
+case 'b':
+app.burst_size = atoi(optarg);
+printf("[ -b BURST_SIZE ] defined as %d \n", 
app.burst_size);
+
+if(app.burst_size < 1 || app.burst_size > MAX_BURST_SIZE) {
+printf("Invalid burst size; burst=%u must be in [1, 
%u]. \n", app.burst_size, MAX_BURST_SIZE);
--- End diff --

Sure, makes sense.


> Improve Fastcapa Performance
> 
>
> Key: METRON-822
> URL: https://issues.apache.org/jira/browse/METRON-822
> Project: Metron
>  Issue Type: Improvement
>Reporter: Nick Allen
>Assignee: Nick Allen
>
> Improve the performance and scalability of the Fastcapa probe.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (METRON-822) Improve Fastcapa Performance

2017-04-05 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/METRON-822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15957008#comment-15957008
 ] 

ASF GitHub Bot commented on METRON-822:
---

Github user nickwallen commented on a diff in the pull request:

https://github.com/apache/incubator-metron/pull/509#discussion_r109944087
  
--- Diff: metron-sensors/fastcapa/src/kafka.c ---
@@ -21,11 +21,113 @@
 #define POLL_TIMEOUT_MS 1000
 
 /*
- * data structures required for the kafka client
+ * Passed to all callback functions to help identify the connection.
  */
-static rd_kafka_t** kaf_h;
-static rd_kafka_topic_t** kaf_top_h;
-static int num_conns;
+struct opaque {
+int conn_id;  
+};
+
+/*
+ * Data structures required for the kafka client
+ */
+static rd_kafka_t **kaf_h;
+static rd_kafka_topic_t **kaf_top_h;
+static unsigned num_conns;
+static FILE *stats_fd;
+static struct app_stats *kaf_conn_stats;
+static struct opaque *kaf_opaque;
+static uint64_t *kaf_keys;
+
+/*
+ * A callback executed when an error occurs within the kafka client
+ */
+static void kaf_error_cb (rd_kafka_t *rk, int err, const char *reason, 
void* UNUSED(opaque))
+{
+LOG_ERROR(USER1, "kafka client unexpected error; conn=%s, error=%s 
[%s] \n", 
+rd_kafka_name(rk), rd_kafka_err2str(err), reason);
+}
+
+/*
+ * A callback executed when a broker throttles the producer
+ */
+static void kaf_throttle_cb (rd_kafka_t *rk, const char *broker_name, 
int32_t broker_id, int throttle_time_ms, void* UNUSED(opaque))
+{
+LOG_ERROR(USER1, "kafka client throttle event; conn=%s, time=%dms 
broker=%s broker_id=%"PRId32" \n", 
+rd_kafka_name(rk), throttle_time_ms, broker_name, broker_id);
+}
+
+/*
+ * A callback executed on a fixed frequency (defined by 
`statistics.interval.ms`) 
+ * that provides detailed performance statistics
+ */
+static int kaf_stats_cb(rd_kafka_t *rk, char *json, size_t 
UNUSED(json_len), void *opaque) 
+{
+int rc;
+struct opaque *data = (struct opaque*) opaque;
+int conn_id = data->conn_id;   
+
+// update queue depth of this kafka connection
+kaf_conn_stats[conn_id].depth = rd_kafka_outq_len(rk);
+
+// TODO this should be handled by a logging lib that can handle faults 
and rolling the output file
--- End diff --

Sure


> Improve Fastcapa Performance
> 
>
> Key: METRON-822
> URL: https://issues.apache.org/jira/browse/METRON-822
> Project: Metron
>  Issue Type: Improvement
>Reporter: Nick Allen
>Assignee: Nick Allen
>
> Improve the performance and scalability of the Fastcapa probe.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (METRON-822) Improve Fastcapa Performance

2017-04-05 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/METRON-822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15956906#comment-15956906
 ] 

ASF GitHub Bot commented on METRON-822:
---

Github user cestella commented on a diff in the pull request:

https://github.com/apache/incubator-metron/pull/509#discussion_r109919377
  
--- Diff: metron-sensors/fastcapa/src/kafka.c ---
@@ -21,11 +21,113 @@
 #define POLL_TIMEOUT_MS 1000
 
 /*
- * data structures required for the kafka client
+ * Passed to all callback functions to help identify the connection.
  */
-static rd_kafka_t** kaf_h;
-static rd_kafka_topic_t** kaf_top_h;
-static int num_conns;
+struct opaque {
+int conn_id;  
+};
+
+/*
+ * Data structures required for the kafka client
+ */
+static rd_kafka_t **kaf_h;
+static rd_kafka_topic_t **kaf_top_h;
+static unsigned num_conns;
+static FILE *stats_fd;
+static struct app_stats *kaf_conn_stats;
+static struct opaque *kaf_opaque;
+static uint64_t *kaf_keys;
+
+/*
+ * A callback executed when an error occurs within the kafka client
+ */
+static void kaf_error_cb (rd_kafka_t *rk, int err, const char *reason, 
void* UNUSED(opaque))
+{
+LOG_ERROR(USER1, "kafka client unexpected error; conn=%s, error=%s 
[%s] \n", 
+rd_kafka_name(rk), rd_kafka_err2str(err), reason);
+}
+
+/*
+ * A callback executed when a broker throttles the producer
+ */
+static void kaf_throttle_cb (rd_kafka_t *rk, const char *broker_name, 
int32_t broker_id, int throttle_time_ms, void* UNUSED(opaque))
+{
+LOG_ERROR(USER1, "kafka client throttle event; conn=%s, time=%dms 
broker=%s broker_id=%"PRId32" \n", 
+rd_kafka_name(rk), throttle_time_ms, broker_name, broker_id);
+}
+
+/*
+ * A callback executed on a fixed frequency (defined by 
`statistics.interval.ms`) 
+ * that provides detailed performance statistics
+ */
+static int kaf_stats_cb(rd_kafka_t *rk, char *json, size_t 
UNUSED(json_len), void *opaque) 
+{
+int rc;
+struct opaque *data = (struct opaque*) opaque;
+int conn_id = data->conn_id;   
+
+// update queue depth of this kafka connection
+kaf_conn_stats[conn_id].depth = rd_kafka_outq_len(rk);
+
+// TODO this should be handled by a logging lib that can handle faults 
and rolling the output file
--- End diff --

Can we have a JIRA created on this?


> Improve Fastcapa Performance
> 
>
> Key: METRON-822
> URL: https://issues.apache.org/jira/browse/METRON-822
> Project: Metron
>  Issue Type: Improvement
>Reporter: Nick Allen
>Assignee: Nick Allen
>
> Improve the performance and scalability of the Fastcapa probe.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (METRON-822) Improve Fastcapa Performance

2017-04-05 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/METRON-822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15956907#comment-15956907
 ] 

ASF GitHub Bot commented on METRON-822:
---

Github user cestella commented on a diff in the pull request:

https://github.com/apache/incubator-metron/pull/509#discussion_r109923278
  
--- Diff: metron-sensors/fastcapa/src/args.c ---
@@ -84,62 +95,167 @@ int parse_args(int argc, char** argv)
 
 // parse arguments to this application
 argvopt = argv;
-while ((opt = getopt_long(argc, argvopt, "p:b:t:c:", lgopts, 
_index)) != EOF) {
+while ((opt = getopt_long(argc, argvopt, "hp:b:t:c:r:q:s:x:", lgopts, 
_index)) != EOF) {
 switch (opt) {
 
-// portmask
-case 'p':
-app.enabled_port_mask = parse_portmask(optarg);
-if (app.enabled_port_mask == 0) {
-printf("Error: Invalid portmask: '%s'\n", optarg);
-print_usage(prgname);
+// help
+case 'h':
+print_usage();
 return -1;
-}
-break;
-
-// kafka topic
-case 't':
-app.kafka_topic = strdup(optarg);
-if (!valid(app.kafka_topic)) {
-printf("Error: Invalid kafka topic: '%s'\n", optarg);
-print_usage(prgname);
-return -1;
-}
-break;
-
-// kafka config path
-case 'c':
-app.kafka_config_path = strdup(optarg);
-if (!valid(app.kafka_config_path) || 
!file_exists(app.kafka_config_path)) {
-printf("Error: Invalid kafka config: '%s'\n", optarg);
-print_usage(prgname);
-return -1;
-}
-break;
-
-default:
-printf("Error: Invalid argument: '%s'\n", optarg);
-print_usage(prgname);
-return -1;
-}
+
+// burst size
+case 'b':
+app.burst_size = atoi(optarg);
+printf("[ -b BURST_SIZE ] defined as %d \n", 
app.burst_size);
+
+if(app.burst_size < 1 || app.burst_size > MAX_BURST_SIZE) {
+printf("Invalid burst size; burst=%u must be in [1, 
%u]. \n", app.burst_size, MAX_BURST_SIZE);
--- End diff --

Can we send this to stderr?


> Improve Fastcapa Performance
> 
>
> Key: METRON-822
> URL: https://issues.apache.org/jira/browse/METRON-822
> Project: Metron
>  Issue Type: Improvement
>Reporter: Nick Allen
>Assignee: Nick Allen
>
> Improve the performance and scalability of the Fastcapa probe.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (METRON-822) Improve Fastcapa Performance

2017-04-04 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/METRON-822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15955772#comment-15955772
 ] 

ASF GitHub Bot commented on METRON-822:
---

Github user nickwallen commented on the issue:

https://github.com/apache/incubator-metron/pull/509
  
The additional commits are showing up as Github is out-of-sync with Apache. 
 That should clear-up once they sync back up.


> Improve Fastcapa Performance
> 
>
> Key: METRON-822
> URL: https://issues.apache.org/jira/browse/METRON-822
> Project: Metron
>  Issue Type: Improvement
>Reporter: Nick Allen
>Assignee: Nick Allen
>
> Improve the performance and scalability of the Fastcapa probe.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (METRON-822) Improve Fastcapa Performance

2017-04-04 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/METRON-822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15955771#comment-15955771
 ] 

ASF GitHub Bot commented on METRON-822:
---

GitHub user nickwallen opened a pull request:

https://github.com/apache/incubator-metron/pull/509

METRON-822 Improve Fastcapa Performance

This PR contains significant improvements to the performance and 
scalability of Fastcapa.  

* Previously the 'distributor' framework was used.  This did not scale well 
and has been replaced with a burst-oriented design.
* Receive and transmission functions have been separated to allow each to 
scale independently.
* Additional parameters have been added to allow the process to be tuned 
easily.
* Output provides basic transparency into the current state of processing.
* If the probe is overwhelmed with more packets than can be handled, it 
will continue processing the packets that it can without crashing.  
* The fact that packets are being dropped is very clear.
* A great deal of documentation has been added to the README.

This change has been tested on Cisco UCS hardware with a 10G Cisco VNIC.  
The probe was able to capture 1 gbps before packets started to drop.  
Additional performance tuning would push this ceiling much higher, but for my 
purposes, I just needed to reach 1 gbps.  Additional work will proceed in the 
future to find its true performance ceiling.

To test the change yourself, simply spin-up the virtualized test 
environment which will deploy and validate that Fastcapa can land packets in 
Kafka correctly.
```
cd metron-deployment/vagrant/fastcapa-test-environment
vagrant up
```

## Pull Request Checklist

### For all changes:
- [ ] Is there a JIRA ticket associated with this PR?
- [ ] Does your PR title start with METRON-?
- [ ] Has your PR been rebased against the latest commit within the target 
branch?

### For code changes:
- [ ] Have you included steps to reproduce the behavior or problem that is 
being changed or addressed?
- [ ] Have you included steps or a guide to how the change may be verified 
and tested manually?
- [ ] Have you ensured that the full suite of tests and checks have been 
executed in the root incubating-metron folder via:
- [ ] Have you written or updated unit tests and or integration tests to 
verify your changes?
- [ ] If adding new dependencies to the code, are these dependencies 
licensed in a way that is compatible for inclusion under [ASF 
2.0](http://www.apache.org/legal/resolved.html#category-a)? 
- [ ] Have you verified the basic functionality of the build by building 
and running locally with Vagrant full-dev environment or the equivalent?


You can merge this pull request into a Git repository by running:

$ git pull https://github.com/nickwallen/incubator-metron METRON-822

Alternatively you can review and apply these changes as the patch at:

https://github.com/apache/incubator-metron/pull/509.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

This closes #509


commit 34614cc9006a77826ed729f2c8a40f99bd84d4b4
Author: dlyle65535 
Date:   2017-04-04T12:15:42Z

METRON-196 Deployment Fails Without Ansible 2.0.0.2 closes 
apache/incubator-metron#499

commit fccb67aecca199d7aebd14b16debff4bf16f8acd
Author: KunalAggarwal 
Date:   2017-04-04T16:14:23Z

METRON-808: Amazon EC2 deployment fails at Expanding Volume Step 
(KunalAggarwal via mmiklavc) closes apache/incubator-metron#496

commit 6410229e6a6a031f470d01ced2eb316d43bae29a
Author: Nick Allen 
Date:   2017-03-21T17:51:55Z

METRON-822 Improve Fastcapa Performance




> Improve Fastcapa Performance
> 
>
> Key: METRON-822
> URL: https://issues.apache.org/jira/browse/METRON-822
> Project: Metron
>  Issue Type: Improvement
>Reporter: Nick Allen
>Assignee: Nick Allen
>
> Improve the performance and scalability of the Fastcapa probe.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)