* [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx @ 2017-11-30 7:24 Pavan Nikhilesh 2017-11-30 7:24 ` [dpdk-dev] [PATCH 2/4] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (9 more replies) 0 siblings, 10 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2017-11-30 7:24 UTC (permalink / raw) To: jerin.jacobkollanukkaran, gage.eads, harry.van.haaren, bruce.richardson, hemant.agrawal, nipun.gupta, nikhil.rao Cc: dev, Pavan Nikhilesh Modify ethernet dev setup to support packet transmission and probe through ethdev tx capabilities. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- This patch set depends on : http://dpdk.org/dev/patchwork/patch/30520 app/test-eventdev/test_perf_common.c | 56 ++++++++++++++++++++---------------- app/test-eventdev/test_perf_common.h | 6 ++++ 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c index 873eab9..60965dc 100644 --- a/app/test-eventdev/test_perf_common.c +++ b/app/test-eventdev/test_perf_common.c @@ -92,7 +92,7 @@ static int perf_producer_wrapper(void *arg) { RTE_SET_USED(arg); - struct prod_data *p = arg; + struct prod_data *p = arg; struct test_perf *t = p->t; /* Launch the producer function only in case of synthetic producer. */ if (t->opt->prod_type == EVT_PROD_TYPE_SYNT) @@ -126,7 +126,6 @@ total_latency(struct test_perf *t) return total; } - int perf_launch_lcores(struct evt_test *test, struct evt_options *opt, int (*worker)(void *)) @@ -232,7 +231,7 @@ perf_launch_lcores(struct evt_test *test, struct evt_options *opt, return 0; } -static int +int perf_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, struct rte_event_port_conf prod_conf) { @@ -494,9 +493,9 @@ perf_elt_init(struct rte_mempool *mp, void *arg __rte_unused, int perf_ethdev_setup(struct evt_test *test, struct evt_options *opt) { - uint16_t nb_rx_queues = 1; int i; - int j; + uint8_t nb_queues = 1; + uint8_t mt_state = 0; struct test_perf *t = evt_test_priv(test); struct rte_eth_conf port_conf = { .rxmode = { @@ -528,33 +527,42 @@ perf_ethdev_setup(struct evt_test *test, struct evt_options *opt) } for (i = 0; i < rte_eth_dev_count(); i++) { + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(struct rte_eth_dev_info)); + rte_eth_dev_info_get(i, &dev_info); + mt_state = !(dev_info.tx_offload_capa & + DEV_TX_OFFLOAD_MT_LOCKFREE); - if (rte_eth_dev_configure(i, nb_rx_queues, nb_rx_queues, + if (rte_eth_dev_configure(i, nb_queues, nb_queues, &port_conf) < 0) { evt_err("Failed to configure eth port [%d]\n", i); return -EINVAL; } - for (j = 0; j < nb_rx_queues; j++) { - if (rte_eth_rx_queue_setup(i, j, NB_RX_DESC, - rte_socket_id(), NULL, t->pool) < 0) { - evt_err("Failed to setup eth port [%d]" - " rx_queue: %d." - " Using synthetic producer\n", - i, j); - return -EINVAL; - } - if (rte_eth_tx_queue_setup(i, j, NB_TX_DESC, - rte_socket_id(), NULL) < 0) { - evt_err("Failed to setup eth port [%d]" - " tx_queue: %d." - " Using synthetic producer\n", - i, j); - return -EINVAL; - } + if (rte_eth_rx_queue_setup(i, 0, NB_RX_DESC, + rte_socket_id(), NULL, t->pool) < 0) { + evt_err("Failed to setup eth port [%d]" + " rx_queue: %d." + " Using synthetic producer\n", + i, 0); + return -EINVAL; + } + if (rte_eth_tx_queue_setup(i, 0, NB_TX_DESC, + rte_socket_id(), NULL) < 0) { + evt_err("Failed to setup eth port [%d]" + " tx_queue: %d." + " Using synthetic producer\n", + i, 0); + return -EINVAL; } + t->mt_unsafe |= mt_state; + t->tx_buf[i] = + rte_malloc(NULL, RTE_ETH_TX_BUFFER_SIZE(BURST_SIZE), 0); + if (t->tx_buf[i] == NULL) + rte_panic("Unable to allocate Tx buffer memory."); rte_eth_promiscuous_enable(i); } @@ -591,7 +599,7 @@ perf_mempool_setup(struct evt_test *test, struct evt_options *opt) } else { t->pool = rte_pktmbuf_pool_create(test->name, /* mempool name */ opt->pool_sz, /* number of elements*/ - 0, /* cache size*/ + 512, /* cache size*/ 0, RTE_MBUF_DEFAULT_BUF_SIZE, opt->socket_id); /* flags */ diff --git a/app/test-eventdev/test_perf_common.h b/app/test-eventdev/test_perf_common.h index 95a2174..a847a75 100644 --- a/app/test-eventdev/test_perf_common.h +++ b/app/test-eventdev/test_perf_common.h @@ -45,6 +45,7 @@ #include <rte_malloc.h> #include <rte_mempool.h> #include <rte_prefetch.h> +#include <rte_spinlock.h> #include "evt_common.h" #include "evt_options.h" @@ -74,12 +75,15 @@ struct test_perf { int done; uint64_t outstand_pkts; uint8_t nb_workers; + uint8_t mt_unsafe; enum evt_test_result result; uint32_t nb_flows; uint64_t nb_pkts; struct rte_mempool *pool; struct prod_data prod[EVT_MAX_PORTS]; struct worker_data worker[EVT_MAX_PORTS]; + struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; + rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS]; struct evt_options *opt; uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; @@ -159,6 +163,8 @@ int perf_test_result(struct evt_test *test, struct evt_options *opt); int perf_opt_check(struct evt_options *opt, uint64_t nb_queues); int perf_test_setup(struct evt_test *test, struct evt_options *opt); int perf_ethdev_setup(struct evt_test *test, struct evt_options *opt); +int perf_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf); int perf_mempool_setup(struct evt_test *test, struct evt_options *opt); int perf_event_dev_port_setup(struct evt_test *test, struct evt_options *opt, uint8_t stride, uint8_t nb_queues); -- 2.7.4 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH 2/4] app/eventdev: add packet distribution logs 2017-11-30 7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh @ 2017-11-30 7:24 ` Pavan Nikhilesh 2017-12-10 12:31 ` Jerin Jacob 2017-11-30 7:24 ` [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test Pavan Nikhilesh ` (8 subsequent siblings) 9 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2017-11-30 7:24 UTC (permalink / raw) To: jerin.jacobkollanukkaran, gage.eads, harry.van.haaren, bruce.richardson, hemant.agrawal, nipun.gupta, nikhil.rao Cc: dev, Pavan Nikhilesh Add logs for packet distribution across worker cores to be printed along with the test results. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/evt_main.c | 3 +++ app/test-eventdev/test_perf_common.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c index 1c3a7fa..bde388b 100644 --- a/app/test-eventdev/evt_main.c +++ b/app/test-eventdev/evt_main.c @@ -57,6 +57,9 @@ signal_handler(int signum) rte_eal_mp_wait_lcore(); + if (test->ops.test_result) + test->ops.test_result(test, &opt); + if (test->ops.eventdev_destroy) test->ops.eventdev_destroy(test, &opt); diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c index 60965dc..f5d292c 100644 --- a/app/test-eventdev/test_perf_common.c +++ b/app/test-eventdev/test_perf_common.c @@ -36,8 +36,20 @@ int perf_test_result(struct evt_test *test, struct evt_options *opt) { RTE_SET_USED(opt); + int i; + uint64_t total = 0; struct test_perf *t = evt_test_priv(test); + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; } -- 2.7.4 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH 2/4] app/eventdev: add packet distribution logs 2017-11-30 7:24 ` [dpdk-dev] [PATCH 2/4] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2017-12-10 12:31 ` Jerin Jacob 0 siblings, 0 replies; 122+ messages in thread From: Jerin Jacob @ 2017-12-10 12:31 UTC (permalink / raw) To: Pavan Nikhilesh Cc: jerin.jacobkollanukkaran, gage.eads, harry.van.haaren, bruce.richardson, hemant.agrawal, nipun.gupta, nikhil.rao, dev -----Original Message----- > Date: Thu, 30 Nov 2017 12:54:04 +0530 > From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > To: jerin.jacobkollanukkaran@cavium.com, gage.eads@intel.com, > harry.van.haaren@intel.com, bruce.richardson@intel.com, > hemant.agrawal@nxp.com, nipun.gupta@nxp.com, nikhil.rao@intel.com > Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH 2/4] app/eventdev: add packet distribution logs > X-Mailer: git-send-email 2.14.1 > > Add logs for packet distribution across worker cores to be printed > along with the test results. > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test 2017-11-30 7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh 2017-11-30 7:24 ` [dpdk-dev] [PATCH 2/4] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2017-11-30 7:24 ` Pavan Nikhilesh 2017-11-30 17:15 ` Eads, Gage 2017-12-10 12:33 ` Jerin Jacob 2017-11-30 7:24 ` [dpdk-dev] [PATCH 4/4] doc: add perf pipeline test in eventdev test guide Pavan Nikhilesh ` (7 subsequent siblings) 9 siblings, 2 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2017-11-30 7:24 UTC (permalink / raw) To: jerin.jacobkollanukkaran, gage.eads, harry.van.haaren, bruce.richardson, hemant.agrawal, nipun.gupta, nikhil.rao Cc: dev, Pavan Nikhilesh This is a performance test case that aims at testing the following: 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The perf pipeline test configures the eventdev with Q queues and P ports, where Q is nb_ethdev * nb_stages and P is nb_workers. The user can choose the number of workers and number of stages through the --wlcores and the --stlist application command line arguments respectively. The probed ethernet devices act as producer(s) for this application. The ethdevs are configured as event Rx adapters that enables them to injects events to eventdev based the first stage schedule type list requested by the user through --stlist the command line argument. Based on the number of stages to process(selected through --stlist), the application forwards the event to next upstream queue and when it reaches last stage in the pipeline if the event type is ATOMIC it is enqueued onto ethdev Tx queue else to maintain ordering the event type is set to ATOMIC and enqueued onto the last stage queue. On packet Tx, application increments the number events processed and print periodically in one second to get the number of events processed in one second. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run perf pipeline test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=perf_pipeline --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_perf_pipeline.c | 548 +++++++++++++++++++++++++++++++++ 2 files changed, 549 insertions(+) create mode 100644 app/test-eventdev/test_perf_pipeline.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index dcb2ac4..9bd8ecd 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -50,5 +50,6 @@ SRCS-y += test_order_atq.c SRCS-y += test_perf_common.c SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c +SRCS-y += test_perf_pipeline.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_perf_pipeline.c b/app/test-eventdev/test_perf_pipeline.c new file mode 100644 index 0000000..a4a13f8 --- /dev/null +++ b/app/test-eventdev/test_perf_pipeline.c @@ -0,0 +1,548 @@ +/* + * BSD LICENSE + * + * Copyright (C) Cavium, Inc 2017. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Cavium, Inc nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "test_perf_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static inline int +perf_pipeline_nb_event_queues(struct evt_options *opt) +{ + uint16_t eth_count = rte_eth_dev_count(); + + return (eth_count * opt->nb_stages) + + evt_has_all_types_queue(opt->dev_id) ? 0 : eth_count; +} + +static __rte_always_inline void +perf_pipeline_tx_pkt_safe(struct rte_mbuf *mbuf) +{ + while (rte_eth_tx_burst(mbuf->port, 0, &mbuf, 1) != 1) + rte_pause(); +} + +static __rte_always_inline void +perf_pipeline_tx_pkt_unsafe(struct rte_mbuf *mbuf, struct test_perf *t) +{ + rte_spinlock_t *lk = &t->tx_lk[mbuf->port]; + + rte_spinlock_lock(lk); + perf_pipeline_tx_pkt_safe(mbuf); + rte_spinlock_unlock(lk); +} + +static __rte_always_inline void +perf_pipeline_tx_unsafe_burst(struct rte_mbuf *mbuf, struct test_perf *t) +{ + uint16_t port = mbuf->port; + rte_spinlock_t *lk = &t->tx_lk[port]; + + rte_spinlock_lock(lk); + rte_eth_tx_buffer(port, 0, t->tx_buf[port], mbuf); + rte_spinlock_unlock(lk); +} + +static __rte_always_inline void +perf_pipeline_tx_flush(struct test_perf *t, const uint8_t nb_ports) +{ + int i; + rte_spinlock_t *lk; + + for (i = 0; i < nb_ports; i++) { + lk = &t->tx_lk[i]; + + rte_spinlock_lock(lk); + rte_eth_tx_buffer_flush(i, 0, t->tx_buf[i]); + rte_spinlock_unlock(lk); + } +} + +static int +perf_pipeline_worker_single_stage(void *arg) +{ + struct worker_data *w = arg; + struct test_perf *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + const bool mt_safe = !t->mt_unsafe; + const bool atq = evt_has_all_types_queue(dev); + struct rte_event ev; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + if (mt_safe) + perf_pipeline_tx_pkt_safe(ev.mbuf); + else + perf_pipeline_tx_pkt_unsafe(ev.mbuf, t); + w->processed_pkts++; + } else { + ev.event_type = RTE_EVENT_TYPE_CPU; + ev.op = RTE_EVENT_OP_FORWARD; + ev.sched_type = RTE_SCHED_TYPE_ATOMIC; + ev.priority = RTE_EVENT_DEV_PRIORITY_HIGHEST; + atq ? 0 : ev.queue_id++; + while (rte_event_enqueue_burst(dev, port, &ev, 1) != 1) + rte_pause(); + } + } + + return 0; +} + +static int +perf_pipeline_worker_single_stage_burst(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_perf *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + const bool mt_safe = !t->mt_unsafe; + const bool atq = evt_has_all_types_queue(dev); + struct rte_event ev[BURST_SIZE]; + const uint16_t nb_ports = rte_eth_dev_count(); + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + if (!mt_safe) + perf_pipeline_tx_flush(t, nb_ports); + + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + if (mt_safe) + perf_pipeline_tx_pkt_safe(ev[i].mbuf); + else + perf_pipeline_tx_unsafe_burst( + ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else { + ev[i].event_type = RTE_EVENT_TYPE_CPU; + ev[i].op = RTE_EVENT_OP_FORWARD; + ev[i].sched_type = RTE_SCHED_TYPE_ATOMIC; + ev[i].priority = RTE_EVENT_DEV_PRIORITY_HIGHEST; + atq ? 0 : ev[i].queue_id++; + } + } + + uint16_t enq; + + enq = rte_event_enqueue_burst(dev, port, ev, nb_rx); + while (enq < nb_rx) { + enq += rte_event_enqueue_burst(dev, port, + ev + enq, nb_rx - enq); + } + } + + return 0; +} + +static int +perf_pipeline_worker_multi_stage(void *arg) +{ + struct worker_data *w = arg; + struct test_perf *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + const bool mt_safe = !t->mt_unsafe; + const bool atq = evt_has_all_types_queue(dev); + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = atq ? t->opt->nb_stages : + t->opt->nb_stages + 1; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + uint8_t cq_id; + struct rte_event ev; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + if (mt_safe) + perf_pipeline_tx_pkt_safe(ev.mbuf); + else + perf_pipeline_tx_pkt_unsafe(ev.mbuf, t); + w->processed_pkts++; + continue; + } + ev.sched_type = RTE_SCHED_TYPE_ATOMIC; + ev.priority = RTE_EVENT_DEV_PRIORITY_HIGHEST; + atq || !(cq_id == last_queue) ? 0 : ev.queue_id++; + } else { + ev.queue_id++; + ev.sched_type = sched_type_list[cq_id]; + } + + ev.event_type = RTE_EVENT_TYPE_CPU; + ev.op = RTE_EVENT_OP_FORWARD; + while (rte_event_enqueue_burst(dev, port, &ev, 1) != 1) + rte_pause(); + } + return 0; +} + +static int +perf_pipeline_worker_multi_stage_burst(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_perf *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + const bool mt_safe = !t->mt_unsafe; + const bool atq = evt_has_all_types_queue(dev); + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = atq ? t->opt->nb_stages : + t->opt->nb_stages + 1; + uint8_t cq_id; + struct rte_event ev[BURST_SIZE + 1]; + const uint16_t nb_ports = rte_eth_dev_count(); + + RTE_SET_USED(atq); + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + if (!mt_safe) + perf_pipeline_tx_flush(t, nb_ports); + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + if (mt_safe) + perf_pipeline_tx_pkt_safe( + ev[i].mbuf); + else + perf_pipeline_tx_unsafe_burst( + ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + ev[i].sched_type = RTE_SCHED_TYPE_ATOMIC; + ev[i].priority = RTE_EVENT_DEV_PRIORITY_HIGHEST; + atq || !(cq_id == last_queue) ? 0 : + ev[i].queue_id++; + } else { + ev[i].queue_id++; + ev[i].sched_type = sched_type_list[cq_id]; + } + + ev[i].event_type = RTE_EVENT_TYPE_CPU; + ev[i].op = RTE_EVENT_OP_FORWARD; + } + + uint16_t enq; + + enq = rte_event_enqueue_burst(dev, port, ev, nb_rx); + while (enq < nb_rx) { + enq += rte_event_enqueue_burst(dev, port, + ev + enq, nb_rx - enq); + } + } + return 0; +} + +static int +worker_wrapper(void *arg) +{ + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + /* allow compiler to optimize */ + if (nb_stages == 1) { + if (!burst) + return perf_pipeline_worker_single_stage(arg); + else + return perf_pipeline_worker_single_stage_burst(arg); + } else { + if (!burst) + return perf_pipeline_worker_multi_stage(arg); + else + return perf_pipeline_worker_multi_stage_burst(arg); + } + rte_panic("invalid worker\n"); +} + +static int +perf_pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + return perf_launch_lcores(test, opt, worker_wrapper); +} + +static int +perf_pipeline_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + int nb_stages = opt->nb_stages; + uint8_t queue; + uint8_t port; + uint8_t atq = evt_has_all_types_queue(opt->dev_id); + struct test_perf *t = evt_test_priv(test); + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count() * (nb_stages); + nb_queues += atq ? 0 : rte_eth_dev_count(); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = 4096, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = 128, + .nb_event_port_enqueue_depth = 128, + }; + + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + if (atq) { + q_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_ALL_TYPES; + } else { + uint8_t slot; + + slot = queue % (nb_stages + 1); + q_conf.schedule_type = slot == nb_stages ? + RTE_SCHED_TYPE_ATOMIC : + opt->sched_type_list[slot]; + } + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = 64, + .new_event_threshold = 4096, + }; + + /* setup one port per worker, linking to all queues */ + for (port = 0; port < evt_nr_active_lcores(opt->wlcores); port++) { + struct worker_data *w = &t->worker[port]; + + w->dev_id = opt->dev_id; + w->port_id = port; + w->t = t; + w->processed_pkts = 0; + w->latency = 0; + + ret = rte_event_port_setup(opt->dev_id, port, &p_conf); + if (ret) { + evt_err("failed to setup port %d", port); + return ret; + } + + ret = rte_event_port_link(opt->dev_id, port, NULL, NULL, 0); + if (ret != nb_queues) { + evt_err("failed to link all queues to port %d", port); + return -EINVAL; + } + } + + ret = perf_event_rx_adapter_setup(opt, atq ? nb_stages : nb_stages + 1, + p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +perf_pipeline_opt_dump(struct evt_options *opt) +{ + evt_dump_fwd_latency(opt); + perf_opt_dump(opt, perf_pipeline_nb_event_queues(opt)); +} + +static int +perf_pipeline_opt_check(struct evt_options *opt) +{ + unsigned int lcores; + /* + * N worker + 1 master + */ + lcores = 2; + + if (opt->prod_type == EVT_PROD_TYPE_SYNT) { + evt_err("test doesn't support synthetic producers"); + return -1; + } + + if (!rte_eth_dev_count()) { + evt_err("test needs minimum 1 ethernet dev"); + return -1; + } + + if (rte_lcore_count() < lcores) { + evt_err("test need minimum %d lcores", lcores); + return -1; + } + + /* Validate worker lcores */ + if (evt_lcores_has_overlap(opt->wlcores, rte_get_master_lcore())) { + evt_err("worker lcores overlaps with master lcore"); + return -1; + } + if (evt_has_disabled_lcore(opt->wlcores)) { + evt_err("one or more workers lcores are not enabled"); + return -1; + } + if (!evt_has_active_lcore(opt->wlcores)) { + evt_err("minimum one worker is required"); + return -1; + } + + if (perf_pipeline_nb_event_queues(opt) > EVT_MAX_QUEUES) { + evt_err("number of queues exceeds %d", EVT_MAX_QUEUES); + return -1; + } + if (perf_nb_event_ports(opt) > EVT_MAX_PORTS) { + evt_err("number of ports exceeds %d", EVT_MAX_PORTS); + return -1; + } + + if (evt_has_invalid_stage(opt)) + return -1; + + if (evt_has_invalid_sched_type(opt)) + return -1; + + return 0; +} + +static bool +perf_pipeline_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < perf_pipeline_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + perf_pipeline_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops perf_pipeline = { + .cap_check = perf_pipeline_capability_check, + .opt_check = perf_pipeline_opt_check, + .opt_dump = perf_pipeline_opt_dump, + .test_setup = perf_test_setup, + .mempool_setup = perf_mempool_setup, + .ethdev_setup = perf_ethdev_setup, + .eventdev_setup = perf_pipeline_eventdev_setup, + .launch_lcores = perf_pipeline_launch_lcores, + .eventdev_destroy = perf_eventdev_destroy, + .mempool_destroy = perf_mempool_destroy, + .ethdev_destroy = perf_ethdev_destroy, + .test_result = perf_test_result, + .test_destroy = perf_test_destroy, +}; + +EVT_TEST_REGISTER(perf_pipeline); -- 2.7.4 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test 2017-11-30 7:24 ` [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test Pavan Nikhilesh @ 2017-11-30 17:15 ` Eads, Gage 2017-12-01 5:19 ` Pavan Nikhilesh Bhagavatula 2017-12-10 12:33 ` Jerin Jacob 1 sibling, 1 reply; 122+ messages in thread From: Eads, Gage @ 2017-11-30 17:15 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacobkollanukkaran, Van Haaren, Harry, Richardson, Bruce, hemant.agrawal, nipun.gupta, Rao, Nikhil Cc: dev Hi Pavan, > -----Original Message----- > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Thursday, November 30, 2017 1:24 AM > To: jerin.jacobkollanukkaran@cavium.com; Eads, Gage > <gage.eads@intel.com>; Van Haaren, Harry <harry.van.haaren@intel.com>; > Richardson, Bruce <bruce.richardson@intel.com>; hemant.agrawal@nxp.com; > nipun.gupta@nxp.com; Rao, Nikhil <nikhil.rao@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test > > This is a performance test case that aims at testing the following: > 1. Measure the end-to-end performance of an event dev with a ethernet dev. > 2. Maintain packet ordering from Rx to Tx. > > The perf pipeline test configures the eventdev with Q queues and P ports, where > Q is nb_ethdev * nb_stages and P is nb_workers. > > The user can choose the number of workers and number of stages through the -- > wlcores and the --stlist application command line arguments respectively. > The probed ethernet devices act as producer(s) for this application. > > The ethdevs are configured as event Rx adapters that enables them to injects > events to eventdev based the first stage schedule type list requested by the user > through --stlist the command line argument. > > Based on the number of stages to process(selected through --stlist), the > application forwards the event to next upstream queue and when it reaches last > stage in the pipeline if the event type is ATOMIC it is enqueued onto ethdev Tx > queue else to maintain ordering the event type is set to ATOMIC and enqueued > onto the last stage queue. > On packet Tx, application increments the number events processed and print > periodically in one second to get the number of events processed in one second. > > Note: The --prod_type_ethdev is mandatory for running the application. > > Example command to run perf pipeline test: > sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ -- > test=perf_pipeline --wlcore=1 --prod_type_ethdev --stlist=ao > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> </snip> > +static int > +perf_pipeline_eventdev_setup(struct evt_test *test, struct evt_options > +*opt) { > + int ret; > + int nb_ports; > + int nb_queues; > + int nb_stages = opt->nb_stages; > + uint8_t queue; > + uint8_t port; > + uint8_t atq = evt_has_all_types_queue(opt->dev_id); > + struct test_perf *t = evt_test_priv(test); > + > + nb_ports = evt_nr_active_lcores(opt->wlcores); > + nb_queues = rte_eth_dev_count() * (nb_stages); > + nb_queues += atq ? 0 : rte_eth_dev_count(); > + > + const struct rte_event_dev_config config = { > + .nb_event_queues = nb_queues, > + .nb_event_ports = nb_ports, > + .nb_events_limit = 4096, > + .nb_event_queue_flows = opt->nb_flows, > + .nb_event_port_dequeue_depth = 128, > + .nb_event_port_enqueue_depth = 128, > + }; > + > + ret = rte_event_dev_configure(opt->dev_id, &config); > + if (ret) { > + evt_err("failed to configure eventdev %d", opt->dev_id); > + return ret; > + } > + > + struct rte_event_queue_conf q_conf = { > + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, > + .nb_atomic_flows = opt->nb_flows, > + .nb_atomic_order_sequences = opt->nb_flows, > + }; > + /* queue configurations */ > + for (queue = 0; queue < nb_queues; queue++) { > + if (atq) { > + q_conf.event_queue_cfg = > RTE_EVENT_QUEUE_CFG_ALL_TYPES; > + } else { > + uint8_t slot; > + > + slot = queue % (nb_stages + 1); > + q_conf.schedule_type = slot == nb_stages ? > + RTE_SCHED_TYPE_ATOMIC : > + opt->sched_type_list[slot]; > + } > + > + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); > + if (ret) { > + evt_err("failed to setup queue=%d", queue); > + return ret; > + } > + } > + > + /* port configuration */ > + const struct rte_event_port_conf p_conf = { > + .dequeue_depth = opt->wkr_deq_dep, > + .enqueue_depth = 64, > + .new_event_threshold = 4096, > + }; > + For the hard-coded event device (new_event_threshold, port_dequeue_depth, enqueue_depth) and port configuration (enqueue_depth, new_event_threshold) values, it would be better to use the values from rte_event_dev_info_get() and rte_event_port_default_conf_get() instead. Thanks, Gage ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test 2017-11-30 17:15 ` Eads, Gage @ 2017-12-01 5:19 ` Pavan Nikhilesh Bhagavatula 0 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh Bhagavatula @ 2017-12-01 5:19 UTC (permalink / raw) To: Eads, Gage, jerin.jacobkollanukkaran, Van Haaren, Harry, bruce.richardson, hemant.agrawal, nipun.gupta, Rao, Nikhil Cc: dev Hi Gage, Thanks for the review, will clean it up in v2. On Thu, Nov 30, 2017 at 05:15:14PM +0000, Eads, Gage wrote: > Hi Pavan, > > > -----Original Message----- > > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > > Sent: Thursday, November 30, 2017 1:24 AM > > To: jerin.jacobkollanukkaran@cavium.com; Eads, Gage > > <gage.eads@intel.com>; Van Haaren, Harry <harry.van.haaren@intel.com>; > > Richardson, Bruce <bruce.richardson@intel.com>; hemant.agrawal@nxp.com; > > nipun.gupta@nxp.com; Rao, Nikhil <nikhil.rao@intel.com> > > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > Subject: [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test > > > > This is a performance test case that aims at testing the following: > > 1. Measure the end-to-end performance of an event dev with a ethernet dev. > > 2. Maintain packet ordering from Rx to Tx. > > > > The perf pipeline test configures the eventdev with Q queues and P ports, where > > Q is nb_ethdev * nb_stages and P is nb_workers. > > > > The user can choose the number of workers and number of stages through the -- > > wlcores and the --stlist application command line arguments respectively. > > The probed ethernet devices act as producer(s) for this application. > > > > The ethdevs are configured as event Rx adapters that enables them to injects > > events to eventdev based the first stage schedule type list requested by the user > > through --stlist the command line argument. > > > > Based on the number of stages to process(selected through --stlist), the > > application forwards the event to next upstream queue and when it reaches last > > stage in the pipeline if the event type is ATOMIC it is enqueued onto ethdev Tx > > queue else to maintain ordering the event type is set to ATOMIC and enqueued > > onto the last stage queue. > > On packet Tx, application increments the number events processed and print > > periodically in one second to get the number of events processed in one second. > > > > Note: The --prod_type_ethdev is mandatory for running the application. > > > > Example command to run perf pipeline test: > > sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ -- > > test=perf_pipeline --wlcore=1 --prod_type_ethdev --stlist=ao > > > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > </snip> > > > +static int > > +perf_pipeline_eventdev_setup(struct evt_test *test, struct evt_options > > +*opt) { > > + int ret; > > + int nb_ports; > > + int nb_queues; > > + int nb_stages = opt->nb_stages; > > + uint8_t queue; > > + uint8_t port; > > + uint8_t atq = evt_has_all_types_queue(opt->dev_id); > > + struct test_perf *t = evt_test_priv(test); > > + > > + nb_ports = evt_nr_active_lcores(opt->wlcores); > > + nb_queues = rte_eth_dev_count() * (nb_stages); > > + nb_queues += atq ? 0 : rte_eth_dev_count(); > > + > > + const struct rte_event_dev_config config = { > > + .nb_event_queues = nb_queues, > > + .nb_event_ports = nb_ports, > > + .nb_events_limit = 4096, > > + .nb_event_queue_flows = opt->nb_flows, > > + .nb_event_port_dequeue_depth = 128, > > + .nb_event_port_enqueue_depth = 128, > > + }; > > + > > + ret = rte_event_dev_configure(opt->dev_id, &config); > > + if (ret) { > > + evt_err("failed to configure eventdev %d", opt->dev_id); > > + return ret; > > + } > > + > > + struct rte_event_queue_conf q_conf = { > > + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, > > + .nb_atomic_flows = opt->nb_flows, > > + .nb_atomic_order_sequences = opt->nb_flows, > > + }; > > + /* queue configurations */ > > + for (queue = 0; queue < nb_queues; queue++) { > > + if (atq) { > > + q_conf.event_queue_cfg = > > RTE_EVENT_QUEUE_CFG_ALL_TYPES; > > + } else { > > + uint8_t slot; > > + > > + slot = queue % (nb_stages + 1); > > + q_conf.schedule_type = slot == nb_stages ? > > + RTE_SCHED_TYPE_ATOMIC : > > + opt->sched_type_list[slot]; > > + } > > + > > + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); > > + if (ret) { > > + evt_err("failed to setup queue=%d", queue); > > + return ret; > > + } > > + } > > + > > + /* port configuration */ > > + const struct rte_event_port_conf p_conf = { > > + .dequeue_depth = opt->wkr_deq_dep, > > + .enqueue_depth = 64, > > + .new_event_threshold = 4096, > > + }; > > + > > For the hard-coded event device (new_event_threshold, port_dequeue_depth, enqueue_depth) and port configuration (enqueue_depth, new_event_threshold) values, it would be better to use the values from rte_event_dev_info_get() and rte_event_port_default_conf_get() instead. > > Thanks, > Gage ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test 2017-11-30 7:24 ` [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test Pavan Nikhilesh 2017-11-30 17:15 ` Eads, Gage @ 2017-12-10 12:33 ` Jerin Jacob 2017-12-11 15:20 ` Pavan Nikhilesh Bhagavatula 1 sibling, 1 reply; 122+ messages in thread From: Jerin Jacob @ 2017-12-10 12:33 UTC (permalink / raw) To: Pavan Nikhilesh Cc: jerin.jacobkollanukkaran, gage.eads, harry.van.haaren, bruce.richardson, hemant.agrawal, nipun.gupta, nikhil.rao, dev -----Original Message----- > Date: Thu, 30 Nov 2017 12:54:05 +0530 > From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > To: jerin.jacobkollanukkaran@cavium.com, gage.eads@intel.com, > harry.van.haaren@intel.com, bruce.richardson@intel.com, > hemant.agrawal@nxp.com, nipun.gupta@nxp.com, nikhil.rao@intel.com > Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test > X-Mailer: git-send-email 2.14.1 > > This is a performance test case that aims at testing the following: > 1. Measure the end-to-end performance of an event dev with a ethernet dev. > 2. Maintain packet ordering from Rx to Tx. > > The perf pipeline test configures the eventdev with Q queues and P ports, > where Q is nb_ethdev * nb_stages and P is nb_workers. > > The user can choose the number of workers and number of stages through the > --wlcores and the --stlist application command line arguments respectively. > The probed ethernet devices act as producer(s) for this application. > > The ethdevs are configured as event Rx adapters that enables them to > injects events to eventdev based the first stage schedule type list > requested by the user through --stlist the command line argument. > > Based on the number of stages to process(selected through --stlist), > the application forwards the event to next upstream queue and when it > reaches last stage in the pipeline if the event type is ATOMIC it is > enqueued onto ethdev Tx queue else to maintain ordering the event type is > set to ATOMIC and enqueued onto the last stage queue. > On packet Tx, application increments the number events processed and print > periodically in one second to get the number of events processed in one > second. > > Note: The --prod_type_ethdev is mandatory for running the application. > > Example command to run perf pipeline test: > sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ > --test=perf_pipeline --wlcore=1 --prod_type_ethdev --stlist=ao > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > --- > app/test-eventdev/Makefile | 1 + > app/test-eventdev/test_perf_pipeline.c | 548 +++++++++++++++++++++++++++++++++ > 2 files changed, 549 insertions(+) > create mode 100644 app/test-eventdev/test_perf_pipeline.c > > diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile > index dcb2ac4..9bd8ecd 100644 > --- a/app/test-eventdev/Makefile > +++ b/app/test-eventdev/Makefile > @@ -50,5 +50,6 @@ SRCS-y += test_order_atq.c > SRCS-y += test_perf_common.c > SRCS-y += test_perf_queue.c > SRCS-y += test_perf_atq.c > +SRCS-y += test_perf_pipeline.c atq support is not available in sw driver. So please rework this test to make separate fast path functions for queue and atq like other performance tests in this directory. This will further reduce the complexity in fast path and Please split the files also to depict the model.Something like, test_perf_pipeline_common.c test_perf_pipeline_queue.c test_perf_pipeline_atq.c ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test 2017-12-10 12:33 ` Jerin Jacob @ 2017-12-11 15:20 ` Pavan Nikhilesh Bhagavatula 2017-12-11 15:45 ` Jerin Jacob 0 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh Bhagavatula @ 2017-12-11 15:20 UTC (permalink / raw) To: Jerin Jacob, harry.van.haaren, bruce.richardson, hemant.agrawal, nipun.gupta, nikhil.rao, gage.eads Cc: dev On Sun, Dec 10, 2017 at 06:03:07PM +0530, Jerin Jacob wrote: > -----Original Message----- > > Date: Thu, 30 Nov 2017 12:54:05 +0530 > > From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > To: jerin.jacobkollanukkaran@cavium.com, gage.eads@intel.com, > > harry.van.haaren@intel.com, bruce.richardson@intel.com, > > hemant.agrawal@nxp.com, nipun.gupta@nxp.com, nikhil.rao@intel.com > > Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > Subject: [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test > > X-Mailer: git-send-email 2.14.1 > > > > This is a performance test case that aims at testing the following: > > 1. Measure the end-to-end performance of an event dev with a ethernet dev. > > 2. Maintain packet ordering from Rx to Tx. > > > > The perf pipeline test configures the eventdev with Q queues and P ports, > > where Q is nb_ethdev * nb_stages and P is nb_workers. > > > > The user can choose the number of workers and number of stages through the > > --wlcores and the --stlist application command line arguments respectively. > > The probed ethernet devices act as producer(s) for this application. > > > > The ethdevs are configured as event Rx adapters that enables them to > > injects events to eventdev based the first stage schedule type list > > requested by the user through --stlist the command line argument. > > > > Based on the number of stages to process(selected through --stlist), > > the application forwards the event to next upstream queue and when it > > reaches last stage in the pipeline if the event type is ATOMIC it is > > enqueued onto ethdev Tx queue else to maintain ordering the event type is > > set to ATOMIC and enqueued onto the last stage queue. > > On packet Tx, application increments the number events processed and print > > periodically in one second to get the number of events processed in one > > second. > > > > Note: The --prod_type_ethdev is mandatory for running the application. > > > > Example command to run perf pipeline test: > > sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ > > --test=perf_pipeline --wlcore=1 --prod_type_ethdev --stlist=ao > > > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > --- > > app/test-eventdev/Makefile | 1 + > > app/test-eventdev/test_perf_pipeline.c | 548 +++++++++++++++++++++++++++++++++ > > 2 files changed, 549 insertions(+) > > create mode 100644 app/test-eventdev/test_perf_pipeline.c > > > > diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile > > index dcb2ac4..9bd8ecd 100644 > > --- a/app/test-eventdev/Makefile > > +++ b/app/test-eventdev/Makefile > > @@ -50,5 +50,6 @@ SRCS-y += test_order_atq.c > > SRCS-y += test_perf_common.c > > SRCS-y += test_perf_queue.c > > SRCS-y += test_perf_atq.c > > +SRCS-y += test_perf_pipeline.c > > atq support is not available in sw driver. So please rework > this test to make separate fast path functions for queue and > atq like other performance tests in this directory. > This will further reduce the complexity in fast path and > Please split the files also to depict the model.Something like, > > test_perf_pipeline_common.c > test_perf_pipeline_queue.c > test_perf_pipeline_atq.c > Agreed, but the name seems too long would test_pipeline_* be acceptable? Thanks, Pavan. > > ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test 2017-12-11 15:20 ` Pavan Nikhilesh Bhagavatula @ 2017-12-11 15:45 ` Jerin Jacob 0 siblings, 0 replies; 122+ messages in thread From: Jerin Jacob @ 2017-12-11 15:45 UTC (permalink / raw) To: Pavan Nikhilesh Bhagavatula Cc: harry.van.haaren, bruce.richardson, hemant.agrawal, nipun.gupta, nikhil.rao, gage.eads, dev -----Original Message----- > Date: Mon, 11 Dec 2017 15:20:34 +0000 > From: Pavan Nikhilesh Bhagavatula <pbhagavatula@caviumnetworks.com> > To: Jerin Jacob <jerin.jacob@caviumnetworks.com>, > harry.van.haaren@intel.com, bruce.richardson@intel.com, > hemant.agrawal@nxp.com, nipun.gupta@nxp.com, nikhil.rao@intel.com, > gage.eads@intel.com > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test > User-Agent: Mutt/1.5.24 (2015-08-30) > > On Sun, Dec 10, 2017 at 06:03:07PM +0530, Jerin Jacob wrote: > > -----Original Message----- > > > Date: Thu, 30 Nov 2017 12:54:05 +0530 > > > From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > > To: jerin.jacobkollanukkaran@cavium.com, gage.eads@intel.com, > > > harry.van.haaren@intel.com, bruce.richardson@intel.com, > > > hemant.agrawal@nxp.com, nipun.gupta@nxp.com, nikhil.rao@intel.com > > > Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > > Subject: [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test > > > X-Mailer: git-send-email 2.14.1 > > > > > > This is a performance test case that aims at testing the following: > > > 1. Measure the end-to-end performance of an event dev with a ethernet dev. > > > 2. Maintain packet ordering from Rx to Tx. > > > > > > The perf pipeline test configures the eventdev with Q queues and P ports, > > > where Q is nb_ethdev * nb_stages and P is nb_workers. > > > > > > The user can choose the number of workers and number of stages through the > > > --wlcores and the --stlist application command line arguments respectively. > > > The probed ethernet devices act as producer(s) for this application. > > > > > > The ethdevs are configured as event Rx adapters that enables them to > > > injects events to eventdev based the first stage schedule type list > > > requested by the user through --stlist the command line argument. > > > > > > Based on the number of stages to process(selected through --stlist), > > > the application forwards the event to next upstream queue and when it > > > reaches last stage in the pipeline if the event type is ATOMIC it is > > > enqueued onto ethdev Tx queue else to maintain ordering the event type is > > > set to ATOMIC and enqueued onto the last stage queue. > > > On packet Tx, application increments the number events processed and print > > > periodically in one second to get the number of events processed in one > > > second. > > > > > > Note: The --prod_type_ethdev is mandatory for running the application. > > > > > > Example command to run perf pipeline test: > > > sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ > > > --test=perf_pipeline --wlcore=1 --prod_type_ethdev --stlist=ao > > > > > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > > --- > > > app/test-eventdev/Makefile | 1 + > > > app/test-eventdev/test_perf_pipeline.c | 548 +++++++++++++++++++++++++++++++++ > > > 2 files changed, 549 insertions(+) > > > create mode 100644 app/test-eventdev/test_perf_pipeline.c > > > > > > diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile > > > index dcb2ac4..9bd8ecd 100644 > > > --- a/app/test-eventdev/Makefile > > > +++ b/app/test-eventdev/Makefile > > > @@ -50,5 +50,6 @@ SRCS-y += test_order_atq.c > > > SRCS-y += test_perf_common.c > > > SRCS-y += test_perf_queue.c > > > SRCS-y += test_perf_atq.c > > > +SRCS-y += test_perf_pipeline.c > > > > atq support is not available in sw driver. So please rework > > this test to make separate fast path functions for queue and > > atq like other performance tests in this directory. > > This will further reduce the complexity in fast path and > > Please split the files also to depict the model.Something like, > > > > test_perf_pipeline_common.c > > test_perf_pipeline_queue.c > > test_perf_pipeline_atq.c > > > > Agreed, but the name seems too long would test_pipeline_* be acceptable? short name looks good to me. > > Thanks, > Pavan. > > > > > ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH 4/4] doc: add perf pipeline test in eventdev test guide 2017-11-30 7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh 2017-11-30 7:24 ` [dpdk-dev] [PATCH 2/4] app/eventdev: add packet distribution logs Pavan Nikhilesh 2017-11-30 7:24 ` [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test Pavan Nikhilesh @ 2017-11-30 7:24 ` Pavan Nikhilesh 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (6 subsequent siblings) 9 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2017-11-30 7:24 UTC (permalink / raw) To: jerin.jacobkollanukkaran, gage.eads, harry.van.haaren, bruce.richardson, hemant.agrawal, nipun.gupta, nikhil.rao Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- .../tools/img/eventdev_perf_pipeline_test.svg | 3292 ++++++++++++++++++++ doc/guides/tools/testeventdev.rst | 99 + 2 files changed, 3391 insertions(+) create mode 100644 doc/guides/tools/img/eventdev_perf_pipeline_test.svg diff --git a/doc/guides/tools/img/eventdev_perf_pipeline_test.svg b/doc/guides/tools/img/eventdev_perf_pipeline_test.svg new file mode 100644 index 0000000..144b928 --- /dev/null +++ b/doc/guides/tools/img/eventdev_perf_pipeline_test.svg @@ -0,0 +1,3292 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# BSD LICENSE +# +# Copyright (c) 2017, Cavium, Inc +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# - Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# +# - Neither the name of Cavium, Inc nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGE. +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_perf_pipeline_test.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="Arrow2Mstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Mstart" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2002" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.6) translate(0,0)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="EmptyTriangleOutM" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2141" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#358611;stroke-width:1pt;stroke-opacity:0.95703125" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-156,68)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-30,14)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(32,-46)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76424623,0,0,1,-92.508475,2)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,8.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,5.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-0" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-7-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-0-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-9-9-1-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-2-7-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-39.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58515,13.679547)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-49" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.91877242,0,0,1.0012876,401.69944,9.159662)" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-0-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-4-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-8-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-1-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4142136" + inkscape:cx="462.17434" + inkscape:cy="203.76375" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.96962941;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.9696294, 1.9696294;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-0-2)" + d="m 571.04412,302.94327 c 0,-11.28285 0,-22.56711 0,-33.85278" + id="path2656-7-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-8-2" + inkscape:original-d="m 571.04412,302.94327 c 0.003,-11.28285 0.003,-22.56711 0,-33.85278" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="29.328003" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="29.328003" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="54.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="439.29071" + y="283.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="438.83691" + y="230.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="437.98169" + y="170.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="442.87885" + y="167.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="442.87885" + y="167.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="442.61511" + y="227.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="442.61511" + y="227.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="444.61511" + y="281.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="444.61511" + y="281.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="448.13348" + y="188.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="448.13348" + y="188.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="449.25244" + y="248.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="449.25244" + y="248.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="451.25244" + y="302.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="451.25244" + y="302.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.85571432;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.41464" + height="223.72733" + x="217.65247" + y="133.50191" + ry="5.6568542" + rx="6.9393806" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.2462,184.07275 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940" + inkscape:original-d="m 390.2462,184.07275 c 9.43699,-0.001 18.87298,-0.001 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM)" + d="m 417.84632,184.68305 c 0,8.01981 0,16.04062 0,24.06243" + id="path2656" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658" + inkscape:original-d="m 417.84632,184.68305 c 0.001,8.01981 0.001,16.04062 0,24.06243" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="452.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="452.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: perf_pipeline</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.16081,240.12929 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-3" + inkscape:original-d="m 390.16081,240.12929 c 9.43699,-0.001 18.87298,-0.001 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-7)" + d="m 417.76093,240.73959 c 0,8.0198 0,16.04062 0,24.06242" + id="path2656-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-9" + inkscape:original-d="m 417.76093,240.73959 c 0.001,8.0198 0.001,16.04062 0,24.06242" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.16081,294.1293 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938-3-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-3-6" + inkscape:original-d="m 390.16081,294.1293 c 9.43699,-10e-4 18.87298,-10e-4 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-7-9)" + d="m 417.76093,294.7396 c 0,8.0198 0,16.04062 0,24.06242" + id="path2656-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-9-7" + inkscape:original-d="m 417.76093,294.7396 c 0.001,8.0198 0.001,16.04062 0,24.06242" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.77605528;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.77605523, 0.77605523;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236);marker-end:url(#marker3706)" + d="m 405.38162,226.06021 c 4.18328,1.14108 8.58277,1.48403 12.89235,1.005 8.24205,-0.91615 16.10405,-4.92166 21.69025,-11.0507 5.5862,-6.12904 8.84752,-14.32775 8.99757,-22.61921" + id="path14459" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461" + inkscape:original-d="m 405.38162,226.06021 c 2.85007,-12.15989 6.00401,4.45519 12.89235,1.005 41.63501,-20.85393 4.69471,-33.67123 30.68782,-33.66991" + sodipodi:nodetypes="csc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.64431453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.6443145, 0.6443145;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker27764);marker-end:url(#marker3706)" + d="m 384.00393,359.44156 c 5.47652,3.69065 12.00427,5.80227 18.60476,6.01835 4.34535,0.14225 8.72568,-0.5286 12.79431,-2.06112 8.17137,-3.07788 14.68764,-9.42627 20.14228,-16.24474 2.99856,-3.74829 5.75343,-7.68637 8.37907,-11.7047 3.45377,-5.28571 6.69104,-10.7217 9.46577,-16.3934 0.32776,-0.66995 0.64901,-1.34309 0.9637,-2.01928" + id="path14478" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14480" + inkscape:original-d="m 384.00393,359.44156 c 4.43549,3.57571 14.17063,2.44073 18.60476,6.01835 4.43412,3.57763 6.76344,0.19553 12.79431,-2.06112 6.03087,-2.25664 13.42887,-10.83078 20.14228,-16.24474 6.7134,-5.41397 5.58672,-7.8041 8.37907,-11.7047 2.79234,-3.90063 6.31119,-10.92989 9.46577,-16.3934 3.15458,-5.4635 0.64314,-1.34712 0.9637,-2.01928" + sodipodi:nodetypes="cssccsc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.66480464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.6648046, 0.6648046;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow2Mstart);marker-end:url(#marker3706)" + d="m 403.84316,273.42402 c 2.05111,2.93979 4.84929,5.35386 8.05799,6.95187 3.49017,1.73819 7.42944,2.50158 11.32771,2.42378 3.89827,-0.0778 7.75698,-0.98012 11.37892,-2.42378 8.08398,-3.22219 15.03284,-9.21717 19.40527,-16.74147" + id="path14482" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14484" + inkscape:original-d="m 403.84316,273.42402 c 2.68667,2.31628 5.37267,4.63356 8.05799,6.95187 2.68532,2.3183 15.13844,-0.001 22.70663,0 7.5682,10e-4 12.93753,-11.162 19.40527,-16.74147" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="105.35634" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="105.35634" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="256.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="256.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="365.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="365.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="173.03555" + y="126.90381" + id="text5219-26"><tspan + sodipodi:role="line" + x="173.03555" + y="126.90381" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = number of stages * number of producers</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="407.66333" + y="349.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="407.66333" + y="349.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port a</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9);marker-end:url(#marker3706-2)" + d="m 385.01751,166.18935 c 6.55603,-7.21647 16.26555,-11.46121 26.01498,-11.37303 6.63484,0.06 13.24026,2.07203 18.7819,5.72098 5.54164,3.64896 9.99986,8.92192 12.67653,14.99317" + id="path14459-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7" + inkscape:original-d="m 385.01751,166.18935 c 5.92072,15.88628 28.91798,-63.08988 26.01498,-11.37303 -3.44145,61.30951 1.38145,44.83512 31.45843,20.71415" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.47793281;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.47793282, 1.47793282;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-9-9-1-1)" + d="m 491.5518,246.00386 c 17.51755,0 35.03729,0 52.55918,0" + id="path2656-8-6-3-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-2-3-9-4" + inkscape:original-d="m 491.5518,246.00386 c 17.51755,-9.9e-4 35.03729,-9.9e-4 52.55918,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2);marker-end:url(#marker3706-2-6)" + d="m 385.51243,248.87002 c 5.48696,-8.85344 15.60233,-14.65031 26.01498,-14.90856 7.15944,-0.17757 14.35645,2.1752 20.0285,6.54749 5.67206,4.3723 9.77927,10.73337 11.42993,17.70219" + id="path14459-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5" + inkscape:original-d="m 385.51243,248.87002 c 5.92072,15.88628 28.91798,-66.62541 26.01498,-14.90856 -3.44145,61.30951 1.38145,48.37065 31.45843,24.24968" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2-4);marker-end:url(#marker3706-2-6-6)" + d="m 367.00275,331.92384 c 3.89778,-7.26007 9.15112,-13.78948 15.40838,-19.1512 9.22443,-7.90423 20.64062,-13.22358 32.62613,-15.20209 11.98552,-1.97851 24.50563,-0.61044 35.78103,3.90977" + id="path14459-5-5-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5-6" + inkscape:original-d="m 367.00275,331.92384 c 5.92072,15.88628 18.31138,-70.86805 15.40838,-19.1512 -3.44145,61.30951 38.33018,12.82865 68.40716,-11.29232" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="307.3092" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894426)"><tspan + sodipodi:role="line" + id="tspan1220" + x="307.3092" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="509.31921" + y="201.97095" + id="text5219-2-4-3-3"><tspan + sodipodi:role="line" + x="509.31921" + y="201.97095" + id="tspan5223-0-7-7-7" + style="font-size:8.66666698px;line-height:1.25">Event type </tspan><tspan + sodipodi:role="line" + x="509.31921" + y="212.80428" + style="font-size:8.66666698px;line-height:1.25" + id="tspan1242"> Atomic</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="419.69006" + y="139.72652" + id="text5219-2-4-3-3-4"><tspan + sodipodi:role="line" + x="419.69006" + y="139.72652" + id="tspan5223-0-7-7-7-5" + style="font-size:8.66666667px;line-height:1.25">Event type </tspan><tspan + sodipodi:role="line" + x="419.69006" + y="152.22652" + style="font-size:8.66666667px;line-height:1.25" + id="tspan1265">Parallel/Ordered</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7" + width="51.714954" + height="32.587509" + x="610.41241" + y="175.56439" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8" + width="51.714954" + height="32.587509" + x="610.31189" + y="228.99942" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8-1" + width="51.714954" + height="32.587509" + x="610.31189" + y="284.99939" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-49);stroke-width:0.98503989;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8-0" + width="46.100037" + height="41.821865" + x="544.77686" + y="224.75677" + rx="23.050018" + ry="19.496723" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="550.90131" + y="243.5219" + id="text5219-2-4-3-3-6"><tspan + sodipodi:role="line" + x="550.90131" + y="243.5219" + style="font-size:8.66666698px;line-height:1.25" + id="tspan1242-9">mt safe </tspan><tspan + sodipodi:role="line" + x="550.90131" + y="254.35522" + style="font-size:8.66666698px;line-height:1.25" + id="tspan6969"> tx?</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.65842497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.65842498, 1.65842498;stroke-dashoffset:0;stroke-opacity:1" + d="m 490.36981,185.5008 c 26.02242,0 52.04208,0 64.72658,-0.12632 12.68451,-0.12632 12.0325,-0.38057 11.38255,-0.63402" + id="path1938-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-7" + inkscape:original-d="m 490.36981,185.5008 c 26.02242,-0.001 52.04208,-0.001 78.05897,0 -0.64718,-0.25444 -1.94984,-0.76034 -1.94984,-0.76034" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:2.04590178;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.04590175, 2.04590175;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-0)" + d="m 566.4769,186.10953 c 0,12.17361 0,24.34874 0,36.52539" + id="path2656-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-8" + inkscape:original-d="m 566.4769,186.10953 c 0.003,12.17361 0.003,24.34874 0,36.52539" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.65842497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.65842498, 1.65842498;stroke-dashoffset:0;stroke-opacity:1" + d="m 492.46012,302.18293 c 26.02242,0 52.04208,0 64.72658,0.12632 12.68451,0.12632 12.0325,0.38057 11.38255,0.63402" + id="path1938-1-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-7-2" + inkscape:original-d="m 492.46012,302.18293 c 26.02242,10e-4 52.04208,10e-4 78.05897,0 -0.64718,0.25444 -1.94984,0.76034 -1.94984,0.76034" + sodipodi:nodetypes="ccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="620.28857" + y="239.64172" + id="text5219-2-3-7-7" + transform="scale(0.98989581,1.0102073)"><tspan + sodipodi:role="line" + x="620.28857" + y="239.64172" + id="tspan5223-0-6-5-1" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port 1</tspan><tspan + sodipodi:role="line" + x="620.28857" + y="250.43735" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15"> Txq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="621.00293" + y="186.44463" + id="text5219-2-3-7-7-9" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="621.00293" + y="186.44463" + id="tspan5223-0-6-5-1-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port 0</tspan><tspan + sodipodi:role="line" + x="621.00293" + y="197.24025" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-7"> Txq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="621.71729" + y="294.93872" + id="text5219-2-3-7-7-6" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="621.71729" + y="294.93872" + id="tspan5223-0-6-5-1-73" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port a</tspan><tspan + sodipodi:role="line" + x="621.71729" + y="305.73434" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-6"> Txq 0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-5)" + d="m 590.89557,246.52582 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-39" + inkscape:original-d="m 590.89557,246.52582 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-8)" + d="m 584.8092,262.55454 c 11.8346,6.14848 23.66883,12.29676 35.50269,18.44485" + id="path5226-6-6-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-2" + inkscape:original-d="m 584.8092,262.55454 c 11.83522,6.14728 23.66945,12.29556 35.50269,18.44485" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-8-3)" + d="m 582.8092,227.97785 c 11.8346,-6.14848 23.66883,-12.29676 35.50269,-18.44485" + id="path5226-6-6-9-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-2-0" + inkscape:original-d="m 582.8092,227.97785 c 11.83522,-6.14728 23.66945,-12.29556 35.50269,-18.44485" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:0.81462836;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.81462827, 0.81462827;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-8);marker-end:url(#marker3706-2-0)" + d="m 545.54392,254.17939 c -3.62648,-0.66909 -7.50276,0.13346 -10.56544,2.18747 -3.06268,2.05402 -5.2763,5.33572 -6.03357,8.94481 -0.75727,3.60909 -0.0494,7.50379 1.92933,10.61562 1.97877,3.11183 5.20555,5.40477 8.79511,6.24977 2.39256,0.56322 4.9306,0.49598 7.28998,-0.19314 2.35938,-0.68913 4.53461,-1.99853 6.24789,-3.76098 1.71328,-1.76245 2.96063,-3.97385 3.58274,-6.35178 0.62211,-2.37792 0.61753,-4.91685 -0.0131,-7.29252" + id="path14459-5-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-63" + inkscape:original-d="m 545.54392,254.17939 c -4.42306,-11.93362 -8.04324,66.84688 -5.87457,27.99767 2.57092,-46.05513 49.47586,-15.91888 17.10747,-17.59842" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="521.71185" + y="285.83926" + id="text5219-2-3-7-7-5" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="521.71185" + y="285.83926" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-1">Spin lock</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr a</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/testeventdev.rst b/doc/guides/tools/testeventdev.rst index 11e608b..b5c84cd 100644 --- a/doc/guides/tools/testeventdev.rst +++ b/doc/guides/tools/testeventdev.rst @@ -468,3 +468,102 @@ Example command to run perf ``all types queue`` test: sudo build/app/dpdk-test-eventdev --vdev=event_octeontx -- \ --test=perf_atq --plcores=2 --wlcore=3 --stlist=p --nb_pkts=0 + + +PERF_PIPELINE Test +~~~~~~~~~~~~~~~~~~ + +This is a performance test case that aims at testing the following: + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_perf_pipeline_test: + +.. table:: Perf pipeline test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | nb_producers * | Queues will be configured based on the | + | | | nb_stages | user requested sched type list(--stlist)| + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_perf_pipeline_test: + +.. figure:: img/eventdev_perf_pipeline_test.* + + perf pipeline test operation. + +The perf pipeline test configures the eventdev with Q queues and P ports, where +Q and P is a function of the number of workers, the number of producers and +number of stages as mentioned in :numref:`table_eventdev_perf_pipeline_test`. + +The user can choose the number of workers and number of stages through the +``--wlcores`` and the ``--stlist`` application command line arguments +respectively. + +The number of producers depends on the number of ethernet devices detected and +each ethernet device is configured as a event_eth_rx_adapter that acts as a +producer. + +The producer(s) injects the events to eventdev based the first stage sched type +list requested by the user through ``--stlist`` the command line argument. + +Based on the number of stages to process(selected through ``--stlist``), +The application forwards the event to next upstream queue and when it reaches +the last stage in the pipeline if the event type is ``atomic`` it is enqueued +onto ethdev Tx queue else to maintain ordering the event type is set to +``atomic`` and enqueued onto the last stage queue. +On packet Tx, application increments the number events processed and print +periodically in one second to get the number of events processed in one +second. + + .. Note:: + + * If the event device doesn't support ``all types queue`` and the last + stage is not ``atomic`` then an additional ``atomic`` queue is created + to maintain packet ordering before Tx. + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run perf pipeline test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=perf_pipeline --wlcore=1 --prod_type_ethdev --stlist=ao -- 2.7.4 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs 2017-11-30 7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh ` (2 preceding siblings ...) 2017-11-30 7:24 ` [dpdk-dev] [PATCH 4/4] doc: add perf pipeline test in eventdev test guide Pavan Nikhilesh @ 2017-12-18 21:43 ` Pavan Nikhilesh 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh ` (10 more replies) 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (5 subsequent siblings) 9 siblings, 11 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:43 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add logs for packet distribution across worker cores to be printed along with the test results. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-eventdev/evt_main.c | 3 +++ app/test-eventdev/test_perf_common.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c index 1c3a7faeb..bde388b97 100644 --- a/app/test-eventdev/evt_main.c +++ b/app/test-eventdev/evt_main.c @@ -57,6 +57,9 @@ signal_handler(int signum) rte_eal_mp_wait_lcore(); + if (test->ops.test_result) + test->ops.test_result(test, &opt); + if (test->ops.eventdev_destroy) test->ops.eventdev_destroy(test, &opt); diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c index 9aff31f20..428af4ae2 100644 --- a/app/test-eventdev/test_perf_common.c +++ b/app/test-eventdev/test_perf_common.c @@ -36,8 +36,20 @@ int perf_test_result(struct evt_test *test, struct evt_options *opt) { RTE_SET_USED(opt); + int i; + uint64_t total = 0; struct test_perf *t = evt_test_priv(test); + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 02/12] app/eventdev: add pipeline test setup and destroy 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2017-12-18 21:43 ` Pavan Nikhilesh 2018-01-08 14:04 ` Jerin Jacob 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 03/12] app/eventdev: add mempool " Pavan Nikhilesh ` (9 subsequent siblings) 10 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:43 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Pipeline test has the queue and all types queue variants. Introduce test_pipeline_common* to share the common code between those tests. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/Makefile | 2 + app/test-eventdev/test_pipeline_common.c | 71 +++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 84 ++++++++++++++++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_common.c create mode 100644 app/test-eventdev/test_pipeline_common.h diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index dcb2ac476..f2fb665d8 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -51,4 +51,6 @@ SRCS-y += test_perf_common.c SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c +SRCS-y += test_pipeline_common.c + include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c new file mode 100644 index 000000000..6e9088719 --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.c @@ -0,0 +1,71 @@ +/* + * BSD LICENSE + * + * Copyright (C) Cavium, Inc 2017. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Cavium, Inc nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "test_pipeline_common.h" + +int +pipeline_test_setup(struct evt_test *test, struct evt_options *opt) +{ + void *test_pipeline; + + test_pipeline = rte_zmalloc_socket(test->name, + sizeof(struct test_pipeline), RTE_CACHE_LINE_SIZE, + opt->socket_id); + if (test_pipeline == NULL) { + evt_err("failed to allocate test_pipeline memory"); + goto nomem; + } + test->test_priv = test_pipeline; + + struct test_pipeline *t = evt_test_priv(test); + + t->nb_workers = evt_nr_active_lcores(opt->wlcores); + t->outstand_pkts = opt->nb_pkts * evt_nr_active_lcores(opt->wlcores); + t->done = false; + t->nb_flows = opt->nb_flows; + t->result = EVT_TEST_FAILED; + t->opt = opt; + opt->prod_type = EVT_PROD_TYPE_ETH_RX_ADPTR; + memcpy(t->sched_type_list, opt->sched_type_list, + sizeof(opt->sched_type_list)); + return 0; +nomem: + return -ENOMEM; +} + +void +pipeline_test_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + + rte_free(test->test_priv); +} diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h new file mode 100644 index 000000000..f87d02d6b --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.h @@ -0,0 +1,84 @@ +/* + * BSD LICENSE + * + * Copyright (C) Cavium, Inc 2017. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Cavium, Inc nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _TEST_PIPELINE_COMMON_ +#define _TEST_PIPELINE_COMMON_ + +#include <stdio.h> +#include <stdbool.h> +#include <unistd.h> + +#include <rte_cycles.h> +#include <rte_ethdev.h> +#include <rte_eventdev.h> +#include <rte_event_eth_rx_adapter.h> +#include <rte_lcore.h> +#include <rte_malloc.h> +#include <rte_mempool.h> +#include <rte_prefetch.h> +#include <rte_spinlock.h> + +#include "evt_common.h" +#include "evt_options.h" +#include "evt_test.h" + +struct test_pipeline; + +struct worker_data { + uint64_t processed_pkts; + uint8_t dev_id; + uint8_t port_id; + struct test_pipeline *t; +} __rte_cache_aligned; + +struct test_pipeline { + /* Don't change the offset of "done". Signal handler use this memory + * to terminate all lcores work. + */ + int done; + uint8_t nb_workers; + uint8_t mt_unsafe; + enum evt_test_result result; + uint32_t nb_flows; + uint64_t outstand_pkts; + struct rte_mempool *pool; + struct worker_data worker[EVT_MAX_PORTS]; + struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; + rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS]; + struct evt_options *opt; + uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; +} __rte_cache_aligned; + +int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); + +#endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v2 02/12] app/eventdev: add pipeline test setup and destroy 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh @ 2018-01-08 14:04 ` Jerin Jacob 0 siblings, 0 replies; 122+ messages in thread From: Jerin Jacob @ 2018-01-08 14:04 UTC (permalink / raw) To: Pavan Nikhilesh Cc: santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma, dev -----Original Message----- > Date: Tue, 19 Dec 2017 03:13:55 +0530 > From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > To: jerin.jacob@caviumnetworks.com, santosh.shukla@caviumnetworks.com, > bruce.richardson@intel.com, harry.van.haaren@intel.com, > gage.eads@intel.com, hemant.agrawal@nxp.com, nipun.gupta@nxp.com, > liang.j.ma@intel.com > Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v2 02/12] app/eventdev: add pipeline test setup > and destroy > X-Mailer: git-send-email 2.14.1 > > Pipeline test has the queue and all types queue variants. > Introduce test_pipeline_common* to share the common code between those > tests. > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > --- > app/test-eventdev/Makefile | 2 + > app/test-eventdev/test_pipeline_common.c | 71 +++++++++++++++++++++++++++ > app/test-eventdev/test_pipeline_common.h | 84 ++++++++++++++++++++++++++++++++ > 3 files changed, 157 insertions(+) > create mode 100644 app/test-eventdev/test_pipeline_common.c > create mode 100644 app/test-eventdev/test_pipeline_common.h > > diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile > index dcb2ac476..f2fb665d8 100644 > --- a/app/test-eventdev/Makefile > +++ b/app/test-eventdev/Makefile > @@ -51,4 +51,6 @@ SRCS-y += test_perf_common.c > SRCS-y += test_perf_queue.c > SRCS-y += test_perf_atq.c > > +SRCS-y += test_pipeline_common.c > + > include $(RTE_SDK)/mk/rte.app.mk > diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c > new file mode 100644 > index 000000000..6e9088719 > --- /dev/null > +++ b/app/test-eventdev/test_pipeline_common.c > @@ -0,0 +1,71 @@ > +/* > + * BSD LICENSE > + * > + * Copyright (C) Cavium, Inc 2017. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * > + * * Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * * Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in > + * the documentation and/or other materials provided with the > + * distribution. > + * * Neither the name of Cavium, Inc nor the names of its > + * contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + */ > + Use SPDX license plate. With above change: Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 03/12] app/eventdev: add mempool setup and destroy 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh @ 2017-12-18 21:43 ` Pavan Nikhilesh 2018-01-08 14:06 ` Jerin Jacob 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 04/12] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh ` (8 subsequent siblings) 10 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:43 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 29 +++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 6e9088719..d34003362 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -32,6 +32,35 @@ #include "test_pipeline_common.h" +int +pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + t->pool = rte_pktmbuf_pool_create(test->name, /* mempool name */ + opt->pool_sz, /* number of elements*/ + 512, /* cache size*/ + 0, + RTE_MBUF_DEFAULT_BUF_SIZE, + opt->socket_id); /* flags */ + + if (t->pool == NULL) { + evt_err("failed to create mempool"); + return -ENOMEM; + } + + return 0; +} + +void +pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + struct test_pipeline *t = evt_test_priv(test); + + rte_mempool_free(t->pool); +} + int pipeline_test_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index f87d02d6b..35367d546 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -79,6 +79,8 @@ struct test_pipeline { } __rte_cache_aligned; int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v2 03/12] app/eventdev: add mempool setup and destroy 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 03/12] app/eventdev: add mempool " Pavan Nikhilesh @ 2018-01-08 14:06 ` Jerin Jacob 0 siblings, 0 replies; 122+ messages in thread From: Jerin Jacob @ 2018-01-08 14:06 UTC (permalink / raw) To: Pavan Nikhilesh Cc: santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma, dev -----Original Message----- > Date: Tue, 19 Dec 2017 03:13:56 +0530 > From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > To: jerin.jacob@caviumnetworks.com, santosh.shukla@caviumnetworks.com, > bruce.richardson@intel.com, harry.van.haaren@intel.com, > gage.eads@intel.com, hemant.agrawal@nxp.com, nipun.gupta@nxp.com, > liang.j.ma@intel.com > Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v2 03/12] app/eventdev: add mempool setup and > destroy > X-Mailer: git-send-email 2.14.1 > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> > --- > app/test-eventdev/test_pipeline_common.c | 29 +++++++++++++++++++++++++++++ > app/test-eventdev/test_pipeline_common.h | 2 ++ > 2 files changed, 31 insertions(+) > > diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c > index 6e9088719..d34003362 100644 > --- a/app/test-eventdev/test_pipeline_common.c > +++ b/app/test-eventdev/test_pipeline_common.c > @@ -32,6 +32,35 @@ > > #include "test_pipeline_common.h" > > +int > +pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) > +{ > + struct test_pipeline *t = evt_test_priv(test); > + > + t->pool = rte_pktmbuf_pool_create(test->name, /* mempool name */ > + opt->pool_sz, /* number of elements*/ > + 512, /* cache size*/ > + 0, > + RTE_MBUF_DEFAULT_BUF_SIZE, > + opt->socket_id); /* flags */ > + > + if (t->pool == NULL) { > + evt_err("failed to create mempool"); > + return -ENOMEM; > + } > + > + return 0; > +} > + > +void > +pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt) > +{ > + RTE_SET_USED(opt); > + struct test_pipeline *t = evt_test_priv(test); > + > + rte_mempool_free(t->pool); > +} > + > int > pipeline_test_setup(struct evt_test *test, struct evt_options *opt) > { > diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h > index f87d02d6b..35367d546 100644 > --- a/app/test-eventdev/test_pipeline_common.h > +++ b/app/test-eventdev/test_pipeline_common.h > @@ -79,6 +79,8 @@ struct test_pipeline { > } __rte_cache_aligned; > > int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); > +int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); > void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); > +void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); > > #endif /* _TEST_PIPELINE_COMMON_ */ > -- > 2.14.1 > ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 04/12] app/eventdev: add pipeline opt dump and check functions 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 03/12] app/eventdev: add mempool " Pavan Nikhilesh @ 2017-12-18 21:43 ` Pavan Nikhilesh 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 05/12] app/eventdev: add perf ethport setup and destroy Pavan Nikhilesh ` (7 subsequent siblings) 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:43 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 84 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 ++ 2 files changed, 87 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index d34003362..d2ffcbe08 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -32,6 +32,90 @@ #include "test_pipeline_common.h" +int +pipeline_test_result(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + int i; + uint64_t total = 0; + struct test_pipeline *t = evt_test_priv(test); + + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; +} + +void +pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) +{ + evt_dump("nb_worker_lcores", "%d", evt_nr_active_lcores(opt->wlcores)); + evt_dump_worker_lcores(opt); + evt_dump_nb_stages(opt); + evt_dump("nb_evdev_ports", "%d", pipeline_nb_event_ports(opt)); + evt_dump("nb_evdev_queues", "%d", nb_queues); + evt_dump_queue_priority(opt); + evt_dump_sched_type_list(opt); + evt_dump_producer_type(opt); +} + +int +pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) +{ + unsigned int lcores; + /* + * N worker + 1 master + */ + lcores = 2; + + if (!rte_eth_dev_count()) { + evt_err("test needs minimum 1 ethernet dev"); + return -1; + } + + if (rte_lcore_count() < lcores) { + evt_err("test need minimum %d lcores", lcores); + return -1; + } + + /* Validate worker lcores */ + if (evt_lcores_has_overlap(opt->wlcores, rte_get_master_lcore())) { + evt_err("worker lcores overlaps with master lcore"); + return -1; + } + if (evt_has_disabled_lcore(opt->wlcores)) { + evt_err("one or more workers lcores are not enabled"); + return -1; + } + if (!evt_has_active_lcore(opt->wlcores)) { + evt_err("minimum one worker is required"); + return -1; + } + + if (nb_queues > EVT_MAX_QUEUES) { + evt_err("number of queues exceeds %d", EVT_MAX_QUEUES); + return -1; + } + if (pipeline_nb_event_ports(opt) > EVT_MAX_PORTS) { + evt_err("number of ports exceeds %d", EVT_MAX_PORTS); + return -1; + } + + if (evt_has_invalid_stage(opt)) + return -1; + + if (evt_has_invalid_sched_type(opt)) + return -1; + + return 0; +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 35367d546..e709a1000 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -78,8 +78,11 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +int pipeline_test_result(struct evt_test *test, struct evt_options *opt); +int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 05/12] app/eventdev: add perf ethport setup and destroy 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (2 preceding siblings ...) 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 04/12] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh @ 2017-12-18 21:43 ` Pavan Nikhilesh 2018-01-08 14:10 ` Jerin Jacob 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 06/12] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh ` (6 subsequent siblings) 10 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:43 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add common ethdev port setup and destroy along with event dev destroy. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 98 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 + 2 files changed, 101 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index d2ffcbe08..eb3ab6d44 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -116,6 +116,104 @@ pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) return 0; } +#define NB_RX_DESC 128 +#define NB_TX_DESC 512 +int +pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int i; + uint8_t nb_queues = 1; + uint8_t mt_state = 0; + struct test_pipeline *t = evt_test_priv(test); + struct rte_eth_conf port_conf = { + .rxmode = { + .mq_mode = ETH_MQ_RX_RSS, + .max_rx_pkt_len = ETHER_MAX_LEN, + .split_hdr_size = 0, + .header_split = 0, + .hw_ip_checksum = 0, + .hw_vlan_filter = 0, + .hw_vlan_strip = 0, + .hw_vlan_extend = 0, + .jumbo_frame = 0, + .hw_strip_crc = 1, + }, + .rx_adv_conf = { + .rss_conf = { + .rss_key = NULL, + .rss_hf = ETH_RSS_IP, + }, + }, + }; + + RTE_SET_USED(opt); + if (!rte_eth_dev_count()) { + evt_err("No ethernet ports found.\n"); + return -ENODEV; + } + + for (i = 0; i < rte_eth_dev_count(); i++) { + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(struct rte_eth_dev_info)); + rte_eth_dev_info_get(i, &dev_info); + mt_state = !(dev_info.tx_offload_capa & + DEV_TX_OFFLOAD_MT_LOCKFREE); + + if (rte_eth_dev_configure(i, nb_queues, nb_queues, + &port_conf) + < 0) { + evt_err("Failed to configure eth port [%d]\n", i); + return -EINVAL; + } + + if (rte_eth_rx_queue_setup(i, 0, NB_RX_DESC, + rte_socket_id(), NULL, t->pool) < 0) { + evt_err("Failed to setup eth port [%d] rx_queue: %d.\n", + i, 0); + return -EINVAL; + } + if (rte_eth_tx_queue_setup(i, 0, NB_TX_DESC, + rte_socket_id(), NULL) < 0) { + evt_err("Failed to setup eth port [%d] tx_queue: %d.\n", + i, 0); + return -EINVAL; + } + + t->mt_unsafe |= mt_state; + t->tx_buf[i] = + rte_malloc(NULL, RTE_ETH_TX_BUFFER_SIZE(BURST_SIZE), 0); + if (t->tx_buf[i] == NULL) + rte_panic("Unable to allocate Tx buffer memory."); + rte_eth_promiscuous_enable(i); + } + + return 0; +} + +void +pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + int i; + RTE_SET_USED(test); + RTE_SET_USED(opt); + + for (i = 0; i < rte_eth_dev_count(); i++) { + rte_event_eth_rx_adapter_stop(i); + rte_eth_dev_stop(i); + rte_eth_dev_close(i); + } +} + +void +pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(test); + + rte_event_dev_stop(opt->dev_id); + rte_event_dev_close(opt->dev_id); +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index e709a1000..204033a01 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -81,9 +81,12 @@ struct test_pipeline { int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v2 05/12] app/eventdev: add perf ethport setup and destroy 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 05/12] app/eventdev: add perf ethport setup and destroy Pavan Nikhilesh @ 2018-01-08 14:10 ` Jerin Jacob 0 siblings, 0 replies; 122+ messages in thread From: Jerin Jacob @ 2018-01-08 14:10 UTC (permalink / raw) To: Pavan Nikhilesh Cc: santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma, dev -----Original Message----- > Date: Tue, 19 Dec 2017 03:13:58 +0530 > From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > To: jerin.jacob@caviumnetworks.com, santosh.shukla@caviumnetworks.com, > bruce.richardson@intel.com, harry.van.haaren@intel.com, > gage.eads@intel.com, hemant.agrawal@nxp.com, nipun.gupta@nxp.com, > liang.j.ma@intel.com > Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v2 05/12] app/eventdev: add perf ethport setup > and destroy > X-Mailer: git-send-email 2.14.1 > > Add common ethdev port setup and destroy along with event dev destroy. > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > --- > app/test-eventdev/test_pipeline_common.c | 98 ++++++++++++++++++++++++++++++++ > app/test-eventdev/test_pipeline_common.h | 3 + > 2 files changed, 101 insertions(+) > > diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c > index d2ffcbe08..eb3ab6d44 100644 > --- a/app/test-eventdev/test_pipeline_common.c > +++ b/app/test-eventdev/test_pipeline_common.c > @@ -116,6 +116,104 @@ pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) > return 0; > } > > +#define NB_RX_DESC 128 > +#define NB_TX_DESC 512 > +int > +pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) > +{ > + int i; > + uint8_t nb_queues = 1; > + uint8_t mt_state = 0; > + struct test_pipeline *t = evt_test_priv(test); > + struct rte_eth_conf port_conf = { > + .rxmode = { > + .mq_mode = ETH_MQ_RX_RSS, > + .max_rx_pkt_len = ETHER_MAX_LEN, > + .split_hdr_size = 0, > + .header_split = 0, > + .hw_ip_checksum = 0, > + .hw_vlan_filter = 0, > + .hw_vlan_strip = 0, > + .hw_vlan_extend = 0, > + .jumbo_frame = 0, > + .hw_strip_crc = 1, Use new Rx/TX offload scheme. > + }, > + .rx_adv_conf = { > + .rss_conf = { > + .rss_key = NULL, > + .rss_hf = ETH_RSS_IP, > + }, > + }, > + }; > + > + RTE_SET_USED(opt); > + if (!rte_eth_dev_count()) { > + evt_err("No ethernet ports found.\n"); > + return -ENODEV; > + } > + ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 06/12] app/eventdev: add event port setup and Rx adapter setup 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (3 preceding siblings ...) 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 05/12] app/eventdev: add perf ethport setup and destroy Pavan Nikhilesh @ 2017-12-18 21:43 ` Pavan Nikhilesh 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 07/12] app/eventdev: launch pipeline lcores Pavan Nikhilesh ` (5 subsequent siblings) 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:43 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Setup one port per worker and link to all queues and setup producer port based on Rx adapter capabilities. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 102 +++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 4 ++ 2 files changed, 106 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index eb3ab6d44..df7521453 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -191,6 +191,108 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) return 0; } +int +pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint16_t nb_queues, const struct rte_event_port_conf p_conf) +{ + int ret; + uint8_t port; + struct test_pipeline *t = evt_test_priv(test); + + + /* setup one port per worker, linking to all queues */ + for (port = 0; port < evt_nr_active_lcores(opt->wlcores); port++) { + struct worker_data *w = &t->worker[port]; + + w->dev_id = opt->dev_id; + w->port_id = port; + w->t = t; + w->processed_pkts = 0; + + ret = rte_event_port_setup(opt->dev_id, port, &p_conf); + if (ret) { + evt_err("failed to setup port %d", port); + return ret; + } + + ret = rte_event_port_link(opt->dev_id, port, NULL, NULL, 0); + if (ret != nb_queues) { + evt_err("failed to link all queues to port %d", port); + return -EINVAL; + } + } + + return 0; +} + +int +pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf) +{ + int ret = 0; + uint16_t prod; + struct rte_event_eth_rx_adapter_queue_conf queue_conf; + + memset(&queue_conf, 0, + sizeof(struct rte_event_eth_rx_adapter_queue_conf)); + queue_conf.ev.sched_type = opt->sched_type_list[0]; + for (prod = 0; prod < rte_eth_dev_count(); prod++) { + uint32_t cap; + + ret = rte_event_eth_rx_adapter_caps_get(opt->dev_id, + prod, &cap); + if (ret) { + evt_err("failed to get event rx adapter[%d]" + " capabilities", + opt->dev_id); + return ret; + } + queue_conf.ev.queue_id = prod * stride; + ret = rte_event_eth_rx_adapter_create(prod, opt->dev_id, + &prod_conf); + if (ret) { + evt_err("failed to create rx adapter[%d]", prod); + return ret; + } + ret = rte_event_eth_rx_adapter_queue_add(prod, prod, -1, + &queue_conf); + if (ret) { + evt_err("failed to add rx queues to adapter[%d]", prod); + return ret; + } + + if (!(cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT)) { + uint32_t service_id; + + rte_event_eth_rx_adapter_service_id_get(prod, + &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("Failed to setup service core" + " for Rx adapter\n"); + return ret; + } + } + + ret = rte_eth_dev_start(prod); + if (ret) { + evt_err("Ethernet dev [%d] failed to start." + " Using synthetic producer", prod); + return ret; + } + + ret = rte_event_eth_rx_adapter_start(prod); + if (ret) { + evt_err("Rx adapter[%d] start failed", prod); + return ret; + } + printf("%s: Port[%d] using Rx adapter[%d] started\n", __func__, + prod, prod); + } + + return ret; +} + void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 204033a01..412c6095e 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -82,7 +82,11 @@ int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint16_t nb_queues, const struct rte_event_port_conf p_conf); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 07/12] app/eventdev: launch pipeline lcores 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (4 preceding siblings ...) 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 06/12] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh @ 2017-12-18 21:44 ` Pavan Nikhilesh 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 08/12] app/eventdev: add pipeline queue test Pavan Nikhilesh ` (4 subsequent siblings) 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh The event master lcore's test termination and the logic to print the mpps are common for the queue and all types queue test. Move them as the common function. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 64 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 + 2 files changed, 66 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index df7521453..9a70943b6 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -65,6 +65,70 @@ pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) evt_dump_producer_type(opt); } +static inline uint64_t +processed_pkts(struct test_pipeline *t) +{ + uint8_t i; + uint64_t total = 0; + + rte_smp_rmb(); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + + return total; +} + +int +pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)) +{ + int ret, lcore_id; + struct test_pipeline *t = evt_test_priv(test); + + int port_idx = 0; + /* launch workers */ + RTE_LCORE_FOREACH_SLAVE(lcore_id) { + if (!(opt->wlcores[lcore_id])) + continue; + + ret = rte_eal_remote_launch(worker, + &t->worker[port_idx], lcore_id); + if (ret) { + evt_err("failed to launch worker %d", lcore_id); + return ret; + } + port_idx++; + } + + uint64_t perf_cycles = rte_get_timer_cycles(); + const uint64_t perf_sample = rte_get_timer_hz(); + + static float total_mpps; + static uint64_t samples; + + uint64_t prev_pkts = 0; + + while (t->done == false) { + const uint64_t new_cycles = rte_get_timer_cycles(); + + if ((new_cycles - perf_cycles) > perf_sample) { + const uint64_t curr_pkts = processed_pkts(t); + + float mpps = (float)(curr_pkts - prev_pkts)/1000000; + + prev_pkts = curr_pkts; + perf_cycles = new_cycles; + total_mpps += mpps; + ++samples; + printf(CLGRN"\r%.3f mpps avg %.3f mpps"CLNRM, + mpps, total_mpps/samples); + fflush(stdout); + } + } + printf("\n"); + return 0; +} + int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 412c6095e..26d265a3d 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -87,6 +87,8 @@ int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, uint16_t nb_queues, const struct rte_event_port_conf p_conf); +int pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 08/12] app/eventdev: add pipeline queue test 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (5 preceding siblings ...) 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 07/12] app/eventdev: launch pipeline lcores Pavan Nikhilesh @ 2017-12-18 21:44 ` Pavan Nikhilesh 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 09/12] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh ` (3 subsequent siblings) 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline queue test case that aims at testing the following: 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The pipeline queue test configures the eventdev with Q queues and P ports, where Q is (nb_ethdev * nb_stages) + nb_ethdev and P is nb_workers. The user can choose the number of workers and number of stages through the --wlcores and the --stlist application command line arguments respectively. The probed ethernet devices act as producer(s) for this application. The ethdevs are configured as event Rx adapters that enables them to injects events to eventdev based the first stage schedule type list requested by the user through --stlist the command line argument. Based on the number of stages to process(selected through --stlist), the application forwards the event to next upstream queue and when it reaches last stage in the pipeline if the event type is ATOMIC it is enqueued onto ethdev Tx queue else to maintain ordering the event type is set to ATOMIC and enqueued onto the last stage queue. On packet Tx, application increments the number events processed and print periodically in one second to get the number of events processed in one second. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline queue test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_queue.c | 193 ++++++++++++++++++++++++++++++++ 2 files changed, 194 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_queue.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index f2fb665d8..30bebfb2f 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -52,5 +52,6 @@ SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c +SRCS-y += test_pipeline_queue.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c new file mode 100644 index 000000000..851027cb7 --- /dev/null +++ b/app/test-eventdev/test_pipeline_queue.c @@ -0,0 +1,193 @@ +/* + * BSD LICENSE + * + * Copyright (C) Cavium, Inc 2017. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Cavium, Inc nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_queue_nb_event_queues(struct evt_options *opt) +{ + uint16_t eth_count = rte_eth_dev_count(); + + return (eth_count * opt->nb_stages) + eth_count; +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_queue_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + int nb_stages = opt->nb_stages; + uint8_t queue; + struct rte_event_dev_info info; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count() * (nb_stages); + nb_queues += rte_eth_dev_count(); + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + uint8_t slot; + + slot = queue % (nb_stages + 1); + q_conf.schedule_type = slot == nb_stages ? + RTE_SCHED_TYPE_ATOMIC : + opt->sched_type_list[slot]; + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + ret = pipeline_event_port_setup(test, opt, nb_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_rx_adapter_setup(opt, nb_stages + 1, + p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_queue_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_queue_nb_event_queues(opt)); +} + +static int +pipeline_queue_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_queue_nb_event_queues(opt)); +} + +static bool +pipeline_queue_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_queue_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_queue_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_queue = { + .cap_check = pipeline_queue_capability_check, + .opt_check = pipeline_queue_opt_check, + .opt_dump = pipeline_queue_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_queue_eventdev_setup, + .launch_lcores = pipeline_queue_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_queue); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 09/12] app/eventdev: add pipeline queue worker functions 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (6 preceding siblings ...) 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 08/12] app/eventdev: add pipeline queue test Pavan Nikhilesh @ 2017-12-18 21:44 ` Pavan Nikhilesh 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 10/12] app/eventdev: add pipeline atq test Pavan Nikhilesh ` (2 subsequent siblings) 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.h | 80 +++++++ app/test-eventdev/test_pipeline_queue.c | 367 ++++++++++++++++++++++++++++++- 2 files changed, 446 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 26d265a3d..009b20a7d 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -78,6 +78,86 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +#define BURST_SIZE 16 + +static __rte_always_inline void +pipeline_fwd_event(struct rte_event *ev, uint8_t sched) +{ + ev->event_type = RTE_EVENT_TYPE_CPU; + ev->op = RTE_EVENT_OP_FORWARD; + ev->sched_type = sched; +} + +static __rte_always_inline void +pipeline_event_enqueue(const uint8_t dev, const uint8_t port, + struct rte_event *ev) +{ + while (rte_event_enqueue_burst(dev, port, ev, 1) != 1) + rte_pause(); +} + +static __rte_always_inline void +pipeline_event_enqueue_burst(const uint8_t dev, const uint8_t port, + struct rte_event *ev, const uint16_t nb_rx) +{ + uint16_t enq; + + enq = rte_event_enqueue_burst(dev, port, ev, nb_rx); + while (enq < nb_rx) { + enq += rte_event_enqueue_burst(dev, port, + ev + enq, nb_rx - enq); + } +} + +static __rte_always_inline void +pipeline_tx_pkt_safe(struct rte_mbuf *mbuf) +{ + while (rte_eth_tx_burst(mbuf->port, 0, &mbuf, 1) != 1) + rte_pause(); +} + +static __rte_always_inline void +pipeline_tx_pkt_unsafe(struct rte_mbuf *mbuf, struct test_pipeline *t) +{ + rte_spinlock_t *lk = &t->tx_lk[mbuf->port]; + + rte_spinlock_lock(lk); + pipeline_tx_pkt_safe(mbuf); + rte_spinlock_unlock(lk); +} + +static __rte_always_inline void +pipeline_tx_unsafe_burst(struct rte_mbuf *mbuf, struct test_pipeline *t) +{ + uint16_t port = mbuf->port; + rte_spinlock_t *lk = &t->tx_lk[port]; + + rte_spinlock_lock(lk); + rte_eth_tx_buffer(port, 0, t->tx_buf[port], mbuf); + rte_spinlock_unlock(lk); +} + +static __rte_always_inline void +pipeline_tx_flush(struct test_pipeline *t, const uint8_t nb_ports) +{ + int i; + rte_spinlock_t *lk; + + for (i = 0; i < nb_ports; i++) { + lk = &t->tx_lk[i]; + + rte_spinlock_lock(lk); + rte_eth_tx_buffer_flush(i, 0, t->tx_buf[i]); + rte_spinlock_unlock(lk); + } +} + +static inline int +pipeline_nb_event_ports(struct evt_options *opt) +{ + return evt_nr_active_lcores(opt->wlcores); +} + int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c index 851027cb7..f89adc4b4 100644 --- a/app/test-eventdev/test_pipeline_queue.c +++ b/app/test-eventdev/test_pipeline_queue.c @@ -42,10 +42,375 @@ pipeline_queue_nb_event_queues(struct evt_options *opt) return (eth_count * opt->nb_stages) + eth_count; } +static int +pipeline_queue_worker_single_stage_safe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt_safe(ev.mbuf); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_unsafe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt_unsafe(ev.mbuf, t); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_safe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev[BURST_SIZE]; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_safe(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_unsafe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev[BURST_SIZE]; + const uint16_t nb_ports = rte_eth_dev_count(); + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + pipeline_tx_flush(t, nb_ports); + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_unsafe_burst(ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else { + + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + + +static int +pipeline_queue_worker_multi_stage_safe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages + 1; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + uint8_t cq_id; + struct rte_event ev; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_safe(ev.mbuf); + w->processed_pkts++; + continue; + } + ev.queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_unsafe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages + 1; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + uint8_t cq_id; + struct rte_event ev; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_unsafe(ev.mbuf, t); + w->processed_pkts++; + continue; + } + ev.queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_safe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages + 1; + uint8_t cq_id; + struct rte_event ev[BURST_SIZE + 1]; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_safe(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + ev[i].queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_unsafe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages + 1; + uint8_t cq_id; + struct rte_event ev[BURST_SIZE + 1]; + const uint16_t nb_ports = rte_eth_dev_count(); + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + pipeline_tx_flush(t, nb_ports); + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_unsafe_burst(ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + ev[i].queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + /* allow compiler to optimize */ + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_queue_worker_single_stage_safe(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_single_stage_unsafe( + arg); + else if (burst && mt_safe) + return pipeline_queue_worker_single_stage_burst_safe( + arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_single_stage_burst_unsafe( + arg); + } else { + if (!burst && mt_safe) + return pipeline_queue_worker_multi_stage_safe(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_multi_stage_unsafe(arg); + if (burst && mt_safe) + return pipeline_queue_worker_multi_stage_burst_safe( + arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_multi_stage_burst_unsafe( + arg); + + } rte_panic("invalid worker\n"); } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 10/12] app/eventdev: add pipeline atq test 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (7 preceding siblings ...) 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 09/12] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh @ 2017-12-18 21:44 ` Pavan Nikhilesh 2018-01-08 14:15 ` Jerin Jacob 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 11/12] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 12/12] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 10 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline test case that aims at testing the following with ``all types queue`` eventdev scheme. 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The atq queue test functions as same as ``pipeline_queue`` test. The difference is, It uses, ``all type queue scheme`` instead of separate queues for each stage and thus reduces the number of queues required to realize the use case. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline atq test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_atq.c | 187 ++++++++++++++++++++++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_atq.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index 30bebfb2f..6e3e36fb8 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -53,5 +53,6 @@ SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c SRCS-y += test_pipeline_queue.c +SRCS-y += test_pipeline_atq.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c new file mode 100644 index 000000000..f625b04b1 --- /dev/null +++ b/app/test-eventdev/test_pipeline_atq.c @@ -0,0 +1,187 @@ +/* + * BSD LICENSE + * + * Copyright (C) Cavium, Inc 2017. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Cavium, Inc nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_atq_nb_event_queues(struct evt_options *opt) +{ + uint16_t eth_count = rte_eth_dev_count(); + + return (eth_count * opt->nb_stages); +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_atq_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + int nb_stages = opt->nb_stages; + uint8_t queue; + struct rte_event_dev_info info; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count() * (nb_stages); + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + q_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_ALL_TYPES; + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + ret = pipeline_event_port_setup(test, opt, nb_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_rx_adapter_setup(opt, nb_stages, + p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_atq_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_atq_nb_event_queues(opt)); +} + +static int +pipeline_atq_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_atq_nb_event_queues(opt)); +} + +static bool +pipeline_atq_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_atq_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_atq_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_atq = { + .cap_check = pipeline_atq_capability_check, + .opt_check = pipeline_atq_opt_check, + .opt_dump = pipeline_atq_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_atq_eventdev_setup, + .launch_lcores = pipeline_atq_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_atq); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v2 10/12] app/eventdev: add pipeline atq test 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 10/12] app/eventdev: add pipeline atq test Pavan Nikhilesh @ 2018-01-08 14:15 ` Jerin Jacob 0 siblings, 0 replies; 122+ messages in thread From: Jerin Jacob @ 2018-01-08 14:15 UTC (permalink / raw) To: Pavan Nikhilesh Cc: santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma, dev -----Original Message----- > Date: Tue, 19 Dec 2017 03:14:03 +0530 > From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > To: jerin.jacob@caviumnetworks.com, santosh.shukla@caviumnetworks.com, > bruce.richardson@intel.com, harry.van.haaren@intel.com, > gage.eads@intel.com, hemant.agrawal@nxp.com, nipun.gupta@nxp.com, > liang.j.ma@intel.com > Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v2 10/12] app/eventdev: add pipeline atq test > X-Mailer: git-send-email 2.14.1 > > This is a pipeline test case that aims at testing the following with > ``all types queue`` eventdev scheme. > 1. Measure the end-to-end performance of an event dev with a ethernet dev. > 2. Maintain packet ordering from Rx to Tx. > > The atq queue test functions as same as ``pipeline_queue`` test. > The difference is, It uses, ``all type queue scheme`` instead of separate > queues for each stage and thus reduces the number of queues required to > realize the use case. > > Note: The --prod_type_ethdev is mandatory for running the application. > > Example command to run pipeline atq test: > sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ > --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=ao > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > + > +#include "test_pipeline_common.h" > + > +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ > + > +static __rte_always_inline int > +pipeline_atq_nb_event_queues(struct evt_options *opt) > +{ > + uint16_t eth_count = rte_eth_dev_count(); > + > + return (eth_count * opt->nb_stages); > +} > + > +static int > +worker_wrapper(void *arg) > +{ > + RTE_SET_USED(arg); > + rte_panic("invalid worker\n"); > +} > + > +static int > +pipeline_atq_launch_lcores(struct evt_test *test, struct evt_options *opt) > +{ > + return pipeline_launch_lcores(test, opt, worker_wrapper); > +} > + > +static int > +pipeline_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt) > +{ > + int ret; > + int nb_ports; > + int nb_queues; > + int nb_stages = opt->nb_stages; > + uint8_t queue; > + struct rte_event_dev_info info; > + > + nb_ports = evt_nr_active_lcores(opt->wlcores); > + nb_queues = rte_eth_dev_count() * (nb_stages); nb_queues = rte_eth_dev_count(); for atq. ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 11/12] app/eventdev: add pipeline atq worker functions 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (8 preceding siblings ...) 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 10/12] app/eventdev: add pipeline atq test Pavan Nikhilesh @ 2017-12-18 21:44 ` Pavan Nikhilesh 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 12/12] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_atq.c | 354 +++++++++++++++++++++++++++++++++- 1 file changed, 353 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c index f625b04b1..6507ac911 100644 --- a/app/test-eventdev/test_pipeline_atq.c +++ b/app/test-eventdev/test_pipeline_atq.c @@ -42,10 +42,362 @@ pipeline_atq_nb_event_queues(struct evt_options *opt) return (eth_count * opt->nb_stages); } +static int +pipeline_atq_worker_single_stage_safe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt_safe(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_unsafe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt_unsafe(ev.mbuf, t); + w->processed_pkts++; + } else { + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_safe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev[BURST_SIZE]; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_safe(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_unsafe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev[BURST_SIZE]; + const uint16_t nb_ports = rte_eth_dev_count(); + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + pipeline_tx_flush(t, nb_ports); + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_unsafe_burst(ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_multi_stage_safe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + uint8_t cq_id; + struct rte_event ev; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id == last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_safe(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_unsafe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + uint8_t cq_id; + struct rte_event ev; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id == last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_unsafe(ev.mbuf, t); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_safe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages; + uint8_t cq_id; + struct rte_event ev[BURST_SIZE + 1]; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id == last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_unsafe_burst(ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_unsafe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages; + uint8_t cq_id; + struct rte_event ev[BURST_SIZE + 1]; + const uint16_t nb_ports = rte_eth_dev_count(); + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + pipeline_tx_flush(t, nb_ports); + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id == last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_unsafe_burst(ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + /* allow compiler to optimize */ + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_atq_worker_single_stage_safe(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_single_stage_unsafe( + arg); + else if (burst && mt_safe) + return pipeline_atq_worker_single_stage_burst_safe( + arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_single_stage_burst_unsafe( + arg); + } else { + if (!burst && mt_safe) + return pipeline_atq_worker_multi_stage_safe(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_multi_stage_unsafe(arg); + if (burst && mt_safe) + return pipeline_atq_worker_multi_stage_burst_safe( + arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_multi_stage_burst_unsafe( + arg); + + } rte_panic("invalid worker\n"); } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v2 12/12] doc: add pipeline test in eventdev test guide 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (9 preceding siblings ...) 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 11/12] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh @ 2017-12-18 21:44 ` Pavan Nikhilesh 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2017-12-18 21:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, bruce.richardson, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- .../tools/img/eventdev_pipeline_atq_test.svg | 3292 ++++++++++++++++++++ .../tools/img/eventdev_pipeline_queue_test.svg | 3292 ++++++++++++++++++++ doc/guides/tools/testeventdev.rst | 174 ++ 3 files changed, 6758 insertions(+) create mode 100644 doc/guides/tools/img/eventdev_pipeline_atq_test.svg create mode 100644 doc/guides/tools/img/eventdev_pipeline_queue_test.svg diff --git a/doc/guides/tools/img/eventdev_pipeline_atq_test.svg b/doc/guides/tools/img/eventdev_pipeline_atq_test.svg new file mode 100644 index 000000000..eb926227f --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_atq_test.svg @@ -0,0 +1,3292 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# BSD LICENSE +# +# Copyright (c) 2017, Cavium, Inc +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# - Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# +# - Neither the name of Cavium, Inc nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGE. +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_atq_test.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="Arrow2Mstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Mstart" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2002" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.6) translate(0,0)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="EmptyTriangleOutM" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2141" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#358611;stroke-width:1pt;stroke-opacity:0.95703125" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-156,68)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-30,14)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(32,-46)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76424623,0,0,1,-92.508475,2)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,8.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,5.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-0" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-7-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-0-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-9-9-1-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-2-7-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-39.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58515,13.679547)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-49" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.91877242,0,0,1.0012876,401.69944,9.159662)" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-0-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-4-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-8-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-1-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.7519532" + inkscape:cx="476.06166" + inkscape:cy="257.16874" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.96962941;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.9696294, 1.9696294;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-0-2)" + d="m 571.04412,302.94327 c 0,-11.28285 0,-22.56711 0,-33.85278" + id="path2656-7-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-8-2" + inkscape:original-d="m 571.04412,302.94327 c 0.003,-11.28285 0.003,-22.56711 0,-33.85278" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="29.328003" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="29.328003" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="54.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="439.29071" + y="283.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="438.83691" + y="230.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="437.98169" + y="170.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="442.87885" + y="167.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="442.87885" + y="167.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="442.61511" + y="227.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="442.61511" + y="227.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="444.61511" + y="281.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="444.61511" + y="281.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="448.13348" + y="188.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="448.13348" + y="188.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="449.25244" + y="248.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="449.25244" + y="248.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="451.25244" + y="302.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="451.25244" + y="302.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.85571432;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.41464" + height="223.72733" + x="217.65247" + y="133.50191" + ry="5.6568542" + rx="6.9393806" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.2462,184.07275 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940" + inkscape:original-d="m 390.2462,184.07275 c 9.43699,-0.001 18.87298,-0.001 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM)" + d="m 417.84632,184.68305 c 0,8.01981 0,16.04062 0,24.06243" + id="path2656" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658" + inkscape:original-d="m 417.84632,184.68305 c 0.001,8.01981 0.001,16.04062 0,24.06243" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="452.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="452.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_atq</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.16081,240.12929 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-3" + inkscape:original-d="m 390.16081,240.12929 c 9.43699,-0.001 18.87298,-0.001 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-7)" + d="m 417.76093,240.73959 c 0,8.0198 0,16.04062 0,24.06242" + id="path2656-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-9" + inkscape:original-d="m 417.76093,240.73959 c 0.001,8.0198 0.001,16.04062 0,24.06242" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.16081,294.1293 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938-3-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-3-6" + inkscape:original-d="m 390.16081,294.1293 c 9.43699,-10e-4 18.87298,-10e-4 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-7-9)" + d="m 417.76093,294.7396 c 0,8.0198 0,16.04062 0,24.06242" + id="path2656-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-9-7" + inkscape:original-d="m 417.76093,294.7396 c 0.001,8.0198 0.001,16.04062 0,24.06242" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.77605528;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.77605523, 0.77605523;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236);marker-end:url(#marker3706)" + d="m 405.38162,226.06021 c 4.18328,1.14108 8.58277,1.48403 12.89235,1.005 8.24205,-0.91615 16.10405,-4.92166 21.69025,-11.0507 5.5862,-6.12904 8.84752,-14.32775 8.99757,-22.61921" + id="path14459" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461" + inkscape:original-d="m 405.38162,226.06021 c 2.85007,-12.15989 6.00401,4.45519 12.89235,1.005 41.63501,-20.85393 4.69471,-33.67123 30.68782,-33.66991" + sodipodi:nodetypes="csc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.64431453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.6443145, 0.6443145;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker27764);marker-end:url(#marker3706)" + d="m 384.00393,359.44156 c 5.47652,3.69065 12.00427,5.80227 18.60476,6.01835 4.34535,0.14225 8.72568,-0.5286 12.79431,-2.06112 8.17137,-3.07788 14.68764,-9.42627 20.14228,-16.24474 2.99856,-3.74829 5.75343,-7.68637 8.37907,-11.7047 3.45377,-5.28571 6.69104,-10.7217 9.46577,-16.3934 0.32776,-0.66995 0.64901,-1.34309 0.9637,-2.01928" + id="path14478" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14480" + inkscape:original-d="m 384.00393,359.44156 c 4.43549,3.57571 14.17063,2.44073 18.60476,6.01835 4.43412,3.57763 6.76344,0.19553 12.79431,-2.06112 6.03087,-2.25664 13.42887,-10.83078 20.14228,-16.24474 6.7134,-5.41397 5.58672,-7.8041 8.37907,-11.7047 2.79234,-3.90063 6.31119,-10.92989 9.46577,-16.3934 3.15458,-5.4635 0.64314,-1.34712 0.9637,-2.01928" + sodipodi:nodetypes="cssccsc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.66480464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.6648046, 0.6648046;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow2Mstart);marker-end:url(#marker3706)" + d="m 403.84316,273.42402 c 2.05111,2.93979 4.84929,5.35386 8.05799,6.95187 3.49017,1.73819 7.42944,2.50158 11.32771,2.42378 3.89827,-0.0778 7.75698,-0.98012 11.37892,-2.42378 8.08398,-3.22219 15.03284,-9.21717 19.40527,-16.74147" + id="path14482" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14484" + inkscape:original-d="m 403.84316,273.42402 c 2.68667,2.31628 5.37267,4.63356 8.05799,6.95187 2.68532,2.3183 15.13844,-0.001 22.70663,0 7.5682,10e-4 12.93753,-11.162 19.40527,-16.74147" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="105.35634" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="105.35634" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="256.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="256.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="365.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="365.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="172.32845" + y="123.36828" + id="text5219-26"><tspan + sodipodi:role="line" + x="172.32845" + y="123.36828" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = (number of stages * number of producers)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="407.66333" + y="349.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="407.66333" + y="349.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port a</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9);marker-end:url(#marker3706-2)" + d="m 385.01751,166.18935 c 6.55603,-7.21647 16.26555,-11.46121 26.01498,-11.37303 6.63484,0.06 13.24026,2.07203 18.7819,5.72098 5.54164,3.64896 9.99986,8.92192 12.67653,14.99317" + id="path14459-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7" + inkscape:original-d="m 385.01751,166.18935 c 5.92072,15.88628 28.91798,-63.08988 26.01498,-11.37303 -3.44145,61.30951 1.38145,44.83512 31.45843,20.71415" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.47793281;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.47793282, 1.47793282;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-9-9-1-1)" + d="m 491.5518,246.00386 c 17.51755,0 35.03729,0 52.55918,0" + id="path2656-8-6-3-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-2-3-9-4" + inkscape:original-d="m 491.5518,246.00386 c 17.51755,-9.9e-4 35.03729,-9.9e-4 52.55918,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2);marker-end:url(#marker3706-2-6)" + d="m 385.51243,248.87002 c 5.48696,-8.85344 15.60233,-14.65031 26.01498,-14.90856 7.15944,-0.17757 14.35645,2.1752 20.0285,6.54749 5.67206,4.3723 9.77927,10.73337 11.42993,17.70219" + id="path14459-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5" + inkscape:original-d="m 385.51243,248.87002 c 5.92072,15.88628 28.91798,-66.62541 26.01498,-14.90856 -3.44145,61.30951 1.38145,48.37065 31.45843,24.24968" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2-4);marker-end:url(#marker3706-2-6-6)" + d="m 367.00275,331.92384 c 3.89778,-7.26007 9.15112,-13.78948 15.40838,-19.1512 9.22443,-7.90423 20.64062,-13.22358 32.62613,-15.20209 11.98552,-1.97851 24.50563,-0.61044 35.78103,3.90977" + id="path14459-5-5-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5-6" + inkscape:original-d="m 367.00275,331.92384 c 5.92072,15.88628 18.31138,-70.86805 15.40838,-19.1512 -3.44145,61.30951 38.33018,12.82865 68.40716,-11.29232" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="307.3092" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894426)"><tspan + sodipodi:role="line" + id="tspan1220" + x="307.3092" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="509.31921" + y="201.97095" + id="text5219-2-4-3-3"><tspan + sodipodi:role="line" + x="509.31921" + y="201.97095" + id="tspan5223-0-7-7-7" + style="font-size:8.66666698px;line-height:1.25">Event type </tspan><tspan + sodipodi:role="line" + x="509.31921" + y="212.80428" + style="font-size:8.66666698px;line-height:1.25" + id="tspan1242"> Atomic</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="419.69006" + y="139.72652" + id="text5219-2-4-3-3-4"><tspan + sodipodi:role="line" + x="419.69006" + y="139.72652" + id="tspan5223-0-7-7-7-5" + style="font-size:8.66666667px;line-height:1.25">Event type </tspan><tspan + sodipodi:role="line" + x="419.69006" + y="152.22652" + style="font-size:8.66666667px;line-height:1.25" + id="tspan1265">Parallel/Ordered</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7" + width="51.714954" + height="32.587509" + x="610.41241" + y="175.56439" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8" + width="51.714954" + height="32.587509" + x="610.31189" + y="228.99942" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8-1" + width="51.714954" + height="32.587509" + x="610.31189" + y="284.99939" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-49);stroke-width:0.98503989;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8-0" + width="46.100037" + height="41.821865" + x="544.77686" + y="224.75677" + rx="23.050018" + ry="19.496723" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="550.90131" + y="243.5219" + id="text5219-2-4-3-3-6"><tspan + sodipodi:role="line" + x="550.90131" + y="243.5219" + style="font-size:8.66666698px;line-height:1.25" + id="tspan1242-9">mt safe </tspan><tspan + sodipodi:role="line" + x="550.90131" + y="254.35522" + style="font-size:8.66666698px;line-height:1.25" + id="tspan6969"> tx?</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.65842497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.65842498, 1.65842498;stroke-dashoffset:0;stroke-opacity:1" + d="m 490.36981,185.5008 c 26.02242,0 52.04208,0 64.72658,-0.12632 12.68451,-0.12632 12.0325,-0.38057 11.38255,-0.63402" + id="path1938-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-7" + inkscape:original-d="m 490.36981,185.5008 c 26.02242,-0.001 52.04208,-0.001 78.05897,0 -0.64718,-0.25444 -1.94984,-0.76034 -1.94984,-0.76034" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:2.04590178;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.04590175, 2.04590175;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-0)" + d="m 566.4769,186.10953 c 0,12.17361 0,24.34874 0,36.52539" + id="path2656-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-8" + inkscape:original-d="m 566.4769,186.10953 c 0.003,12.17361 0.003,24.34874 0,36.52539" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.65842497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.65842498, 1.65842498;stroke-dashoffset:0;stroke-opacity:1" + d="m 492.46012,302.18293 c 26.02242,0 52.04208,0 64.72658,0.12632 12.68451,0.12632 12.0325,0.38057 11.38255,0.63402" + id="path1938-1-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-7-2" + inkscape:original-d="m 492.46012,302.18293 c 26.02242,10e-4 52.04208,10e-4 78.05897,0 -0.64718,0.25444 -1.94984,0.76034 -1.94984,0.76034" + sodipodi:nodetypes="ccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="620.28857" + y="239.64172" + id="text5219-2-3-7-7" + transform="scale(0.98989581,1.0102073)"><tspan + sodipodi:role="line" + x="620.28857" + y="239.64172" + id="tspan5223-0-6-5-1" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port 1</tspan><tspan + sodipodi:role="line" + x="620.28857" + y="250.43735" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15"> Txq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="621.00293" + y="186.44463" + id="text5219-2-3-7-7-9" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="621.00293" + y="186.44463" + id="tspan5223-0-6-5-1-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port 0</tspan><tspan + sodipodi:role="line" + x="621.00293" + y="197.24025" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-7"> Txq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="621.71729" + y="294.93872" + id="text5219-2-3-7-7-6" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="621.71729" + y="294.93872" + id="tspan5223-0-6-5-1-73" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port a</tspan><tspan + sodipodi:role="line" + x="621.71729" + y="305.73434" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-6"> Txq 0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-5)" + d="m 590.89557,246.52582 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-39" + inkscape:original-d="m 590.89557,246.52582 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-8)" + d="m 584.8092,262.55454 c 11.8346,6.14848 23.66883,12.29676 35.50269,18.44485" + id="path5226-6-6-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-2" + inkscape:original-d="m 584.8092,262.55454 c 11.83522,6.14728 23.66945,12.29556 35.50269,18.44485" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-8-3)" + d="m 582.8092,227.97785 c 11.8346,-6.14848 23.66883,-12.29676 35.50269,-18.44485" + id="path5226-6-6-9-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-2-0" + inkscape:original-d="m 582.8092,227.97785 c 11.83522,-6.14728 23.66945,-12.29556 35.50269,-18.44485" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:0.81462836;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.81462827, 0.81462827;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-8);marker-end:url(#marker3706-2-0)" + d="m 545.54392,254.17939 c -3.62648,-0.66909 -7.50276,0.13346 -10.56544,2.18747 -3.06268,2.05402 -5.2763,5.33572 -6.03357,8.94481 -0.75727,3.60909 -0.0494,7.50379 1.92933,10.61562 1.97877,3.11183 5.20555,5.40477 8.79511,6.24977 2.39256,0.56322 4.9306,0.49598 7.28998,-0.19314 2.35938,-0.68913 4.53461,-1.99853 6.24789,-3.76098 1.71328,-1.76245 2.96063,-3.97385 3.58274,-6.35178 0.62211,-2.37792 0.61753,-4.91685 -0.0131,-7.29252" + id="path14459-5-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-63" + inkscape:original-d="m 545.54392,254.17939 c -4.42306,-11.93362 -8.04324,66.84688 -5.87457,27.99767 2.57092,-46.05513 49.47586,-15.91888 17.10747,-17.59842" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="521.71185" + y="285.83926" + id="text5219-2-3-7-7-5" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="521.71185" + y="285.83926" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-1">Spin lock</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr a</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/img/eventdev_pipeline_queue_test.svg b/doc/guides/tools/img/eventdev_pipeline_queue_test.svg new file mode 100644 index 000000000..4c096bc86 --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_queue_test.svg @@ -0,0 +1,3292 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# BSD LICENSE +# +# Copyright (c) 2017, Cavium, Inc +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# - Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# +# - Neither the name of Cavium, Inc nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGE. +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_queue_test.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="Arrow2Mstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Mstart" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2002" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.6) translate(0,0)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="EmptyTriangleOutM" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2141" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#358611;stroke-width:1pt;stroke-opacity:0.95703125" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-156,68)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-30,14)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(32,-46)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76424623,0,0,1,-92.508475,2)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,8.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,5.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-0" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-7-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-0-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-9-9-1-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-2-7-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-39.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58515,13.679547)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-49" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.91877242,0,0,1.0012876,401.69944,9.159662)" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-0-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-4-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-8-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-1-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4142136" + inkscape:cx="462.17434" + inkscape:cy="203.76375" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.96962941;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.9696294, 1.9696294;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-0-2)" + d="m 571.04412,302.94327 c 0,-11.28285 0,-22.56711 0,-33.85278" + id="path2656-7-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-8-2" + inkscape:original-d="m 571.04412,302.94327 c 0.003,-11.28285 0.003,-22.56711 0,-33.85278" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="29.328003" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="29.328003" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="54.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="439.29071" + y="283.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="438.83691" + y="230.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="437.98169" + y="170.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="442.87885" + y="167.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="442.87885" + y="167.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="442.61511" + y="227.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="442.61511" + y="227.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="444.61511" + y="281.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="444.61511" + y="281.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="448.13348" + y="188.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="448.13348" + y="188.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="449.25244" + y="248.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="449.25244" + y="248.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="451.25244" + y="302.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="451.25244" + y="302.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.85571432;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.41464" + height="223.72733" + x="217.65247" + y="133.50191" + ry="5.6568542" + rx="6.9393806" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.2462,184.07275 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940" + inkscape:original-d="m 390.2462,184.07275 c 9.43699,-0.001 18.87298,-0.001 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM)" + d="m 417.84632,184.68305 c 0,8.01981 0,16.04062 0,24.06243" + id="path2656" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658" + inkscape:original-d="m 417.84632,184.68305 c 0.001,8.01981 0.001,16.04062 0,24.06243" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="452.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="452.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_queue</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.16081,240.12929 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-3" + inkscape:original-d="m 390.16081,240.12929 c 9.43699,-0.001 18.87298,-0.001 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-7)" + d="m 417.76093,240.73959 c 0,8.0198 0,16.04062 0,24.06242" + id="path2656-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-9" + inkscape:original-d="m 417.76093,240.73959 c 0.001,8.0198 0.001,16.04062 0,24.06242" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.16081,294.1293 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938-3-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-3-6" + inkscape:original-d="m 390.16081,294.1293 c 9.43699,-10e-4 18.87298,-10e-4 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-7-9)" + d="m 417.76093,294.7396 c 0,8.0198 0,16.04062 0,24.06242" + id="path2656-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-9-7" + inkscape:original-d="m 417.76093,294.7396 c 0.001,8.0198 0.001,16.04062 0,24.06242" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.77605528;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.77605523, 0.77605523;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236);marker-end:url(#marker3706)" + d="m 405.38162,226.06021 c 4.18328,1.14108 8.58277,1.48403 12.89235,1.005 8.24205,-0.91615 16.10405,-4.92166 21.69025,-11.0507 5.5862,-6.12904 8.84752,-14.32775 8.99757,-22.61921" + id="path14459" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461" + inkscape:original-d="m 405.38162,226.06021 c 2.85007,-12.15989 6.00401,4.45519 12.89235,1.005 41.63501,-20.85393 4.69471,-33.67123 30.68782,-33.66991" + sodipodi:nodetypes="csc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.64431453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.6443145, 0.6443145;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker27764);marker-end:url(#marker3706)" + d="m 384.00393,359.44156 c 5.47652,3.69065 12.00427,5.80227 18.60476,6.01835 4.34535,0.14225 8.72568,-0.5286 12.79431,-2.06112 8.17137,-3.07788 14.68764,-9.42627 20.14228,-16.24474 2.99856,-3.74829 5.75343,-7.68637 8.37907,-11.7047 3.45377,-5.28571 6.69104,-10.7217 9.46577,-16.3934 0.32776,-0.66995 0.64901,-1.34309 0.9637,-2.01928" + id="path14478" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14480" + inkscape:original-d="m 384.00393,359.44156 c 4.43549,3.57571 14.17063,2.44073 18.60476,6.01835 4.43412,3.57763 6.76344,0.19553 12.79431,-2.06112 6.03087,-2.25664 13.42887,-10.83078 20.14228,-16.24474 6.7134,-5.41397 5.58672,-7.8041 8.37907,-11.7047 2.79234,-3.90063 6.31119,-10.92989 9.46577,-16.3934 3.15458,-5.4635 0.64314,-1.34712 0.9637,-2.01928" + sodipodi:nodetypes="cssccsc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.66480464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.6648046, 0.6648046;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow2Mstart);marker-end:url(#marker3706)" + d="m 403.84316,273.42402 c 2.05111,2.93979 4.84929,5.35386 8.05799,6.95187 3.49017,1.73819 7.42944,2.50158 11.32771,2.42378 3.89827,-0.0778 7.75698,-0.98012 11.37892,-2.42378 8.08398,-3.22219 15.03284,-9.21717 19.40527,-16.74147" + id="path14482" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14484" + inkscape:original-d="m 403.84316,273.42402 c 2.68667,2.31628 5.37267,4.63356 8.05799,6.95187 2.68532,2.3183 15.13844,-0.001 22.70663,0 7.5682,10e-4 12.93753,-11.162 19.40527,-16.74147" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="105.35634" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="105.35634" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="256.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="256.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="365.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="365.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="172.32845" + y="123.36828" + id="text5219-26"><tspan + sodipodi:role="line" + x="172.32845" + y="123.36828" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = (number of stages * number of producers) + number of producers</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="407.66333" + y="349.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="407.66333" + y="349.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port a</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9);marker-end:url(#marker3706-2)" + d="m 385.01751,166.18935 c 6.55603,-7.21647 16.26555,-11.46121 26.01498,-11.37303 6.63484,0.06 13.24026,2.07203 18.7819,5.72098 5.54164,3.64896 9.99986,8.92192 12.67653,14.99317" + id="path14459-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7" + inkscape:original-d="m 385.01751,166.18935 c 5.92072,15.88628 28.91798,-63.08988 26.01498,-11.37303 -3.44145,61.30951 1.38145,44.83512 31.45843,20.71415" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.47793281;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.47793282, 1.47793282;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-9-9-1-1)" + d="m 491.5518,246.00386 c 17.51755,0 35.03729,0 52.55918,0" + id="path2656-8-6-3-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-2-3-9-4" + inkscape:original-d="m 491.5518,246.00386 c 17.51755,-9.9e-4 35.03729,-9.9e-4 52.55918,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2);marker-end:url(#marker3706-2-6)" + d="m 385.51243,248.87002 c 5.48696,-8.85344 15.60233,-14.65031 26.01498,-14.90856 7.15944,-0.17757 14.35645,2.1752 20.0285,6.54749 5.67206,4.3723 9.77927,10.73337 11.42993,17.70219" + id="path14459-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5" + inkscape:original-d="m 385.51243,248.87002 c 5.92072,15.88628 28.91798,-66.62541 26.01498,-14.90856 -3.44145,61.30951 1.38145,48.37065 31.45843,24.24968" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2-4);marker-end:url(#marker3706-2-6-6)" + d="m 367.00275,331.92384 c 3.89778,-7.26007 9.15112,-13.78948 15.40838,-19.1512 9.22443,-7.90423 20.64062,-13.22358 32.62613,-15.20209 11.98552,-1.97851 24.50563,-0.61044 35.78103,3.90977" + id="path14459-5-5-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5-6" + inkscape:original-d="m 367.00275,331.92384 c 5.92072,15.88628 18.31138,-70.86805 15.40838,-19.1512 -3.44145,61.30951 38.33018,12.82865 68.40716,-11.29232" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="307.3092" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894426)"><tspan + sodipodi:role="line" + id="tspan1220" + x="307.3092" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="509.31921" + y="201.97095" + id="text5219-2-4-3-3"><tspan + sodipodi:role="line" + x="509.31921" + y="201.97095" + id="tspan5223-0-7-7-7" + style="font-size:8.66666698px;line-height:1.25">Event type </tspan><tspan + sodipodi:role="line" + x="509.31921" + y="212.80428" + style="font-size:8.66666698px;line-height:1.25" + id="tspan1242"> Atomic</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="419.69006" + y="139.72652" + id="text5219-2-4-3-3-4"><tspan + sodipodi:role="line" + x="419.69006" + y="139.72652" + id="tspan5223-0-7-7-7-5" + style="font-size:8.66666667px;line-height:1.25">Event type </tspan><tspan + sodipodi:role="line" + x="419.69006" + y="152.22652" + style="font-size:8.66666667px;line-height:1.25" + id="tspan1265">Parallel/Ordered</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7" + width="51.714954" + height="32.587509" + x="610.41241" + y="175.56439" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8" + width="51.714954" + height="32.587509" + x="610.31189" + y="228.99942" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8-1" + width="51.714954" + height="32.587509" + x="610.31189" + y="284.99939" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-49);stroke-width:0.98503989;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8-0" + width="46.100037" + height="41.821865" + x="544.77686" + y="224.75677" + rx="23.050018" + ry="19.496723" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="550.90131" + y="243.5219" + id="text5219-2-4-3-3-6"><tspan + sodipodi:role="line" + x="550.90131" + y="243.5219" + style="font-size:8.66666698px;line-height:1.25" + id="tspan1242-9">mt safe </tspan><tspan + sodipodi:role="line" + x="550.90131" + y="254.35522" + style="font-size:8.66666698px;line-height:1.25" + id="tspan6969"> tx?</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.65842497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.65842498, 1.65842498;stroke-dashoffset:0;stroke-opacity:1" + d="m 490.36981,185.5008 c 26.02242,0 52.04208,0 64.72658,-0.12632 12.68451,-0.12632 12.0325,-0.38057 11.38255,-0.63402" + id="path1938-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-7" + inkscape:original-d="m 490.36981,185.5008 c 26.02242,-0.001 52.04208,-0.001 78.05897,0 -0.64718,-0.25444 -1.94984,-0.76034 -1.94984,-0.76034" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:2.04590178;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.04590175, 2.04590175;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-0)" + d="m 566.4769,186.10953 c 0,12.17361 0,24.34874 0,36.52539" + id="path2656-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-8" + inkscape:original-d="m 566.4769,186.10953 c 0.003,12.17361 0.003,24.34874 0,36.52539" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.65842497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.65842498, 1.65842498;stroke-dashoffset:0;stroke-opacity:1" + d="m 492.46012,302.18293 c 26.02242,0 52.04208,0 64.72658,0.12632 12.68451,0.12632 12.0325,0.38057 11.38255,0.63402" + id="path1938-1-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-7-2" + inkscape:original-d="m 492.46012,302.18293 c 26.02242,10e-4 52.04208,10e-4 78.05897,0 -0.64718,0.25444 -1.94984,0.76034 -1.94984,0.76034" + sodipodi:nodetypes="ccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="620.28857" + y="239.64172" + id="text5219-2-3-7-7" + transform="scale(0.98989581,1.0102073)"><tspan + sodipodi:role="line" + x="620.28857" + y="239.64172" + id="tspan5223-0-6-5-1" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port 1</tspan><tspan + sodipodi:role="line" + x="620.28857" + y="250.43735" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15"> Txq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="621.00293" + y="186.44463" + id="text5219-2-3-7-7-9" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="621.00293" + y="186.44463" + id="tspan5223-0-6-5-1-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port 0</tspan><tspan + sodipodi:role="line" + x="621.00293" + y="197.24025" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-7"> Txq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="621.71729" + y="294.93872" + id="text5219-2-3-7-7-6" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="621.71729" + y="294.93872" + id="tspan5223-0-6-5-1-73" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port a</tspan><tspan + sodipodi:role="line" + x="621.71729" + y="305.73434" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-6"> Txq 0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-5)" + d="m 590.89557,246.52582 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-39" + inkscape:original-d="m 590.89557,246.52582 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-8)" + d="m 584.8092,262.55454 c 11.8346,6.14848 23.66883,12.29676 35.50269,18.44485" + id="path5226-6-6-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-2" + inkscape:original-d="m 584.8092,262.55454 c 11.83522,6.14728 23.66945,12.29556 35.50269,18.44485" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-8-3)" + d="m 582.8092,227.97785 c 11.8346,-6.14848 23.66883,-12.29676 35.50269,-18.44485" + id="path5226-6-6-9-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-2-0" + inkscape:original-d="m 582.8092,227.97785 c 11.83522,-6.14728 23.66945,-12.29556 35.50269,-18.44485" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:0.81462836;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.81462827, 0.81462827;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-8);marker-end:url(#marker3706-2-0)" + d="m 545.54392,254.17939 c -3.62648,-0.66909 -7.50276,0.13346 -10.56544,2.18747 -3.06268,2.05402 -5.2763,5.33572 -6.03357,8.94481 -0.75727,3.60909 -0.0494,7.50379 1.92933,10.61562 1.97877,3.11183 5.20555,5.40477 8.79511,6.24977 2.39256,0.56322 4.9306,0.49598 7.28998,-0.19314 2.35938,-0.68913 4.53461,-1.99853 6.24789,-3.76098 1.71328,-1.76245 2.96063,-3.97385 3.58274,-6.35178 0.62211,-2.37792 0.61753,-4.91685 -0.0131,-7.29252" + id="path14459-5-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-63" + inkscape:original-d="m 545.54392,254.17939 c -4.42306,-11.93362 -8.04324,66.84688 -5.87457,27.99767 2.57092,-46.05513 49.47586,-15.91888 17.10747,-17.59842" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="521.71185" + y="285.83926" + id="text5219-2-3-7-7-5" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="521.71185" + y="285.83926" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-1">Spin lock</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr a</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/testeventdev.rst b/doc/guides/tools/testeventdev.rst index 11e608b74..527798b3d 100644 --- a/doc/guides/tools/testeventdev.rst +++ b/doc/guides/tools/testeventdev.rst @@ -468,3 +468,177 @@ Example command to run perf ``all types queue`` test: sudo build/app/dpdk-test-eventdev --vdev=event_octeontx -- \ --test=perf_atq --plcores=2 --wlcore=3 --stlist=p --nb_pkts=0 + + +PIPELINE_QUEUE Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following: + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_queue_test: + +.. table:: Pipeline queue test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | (nb_producers | Queues will be configured based on the | + | | | * nb_stages) + | user requested sched type list(--stlist)| + | | | nb_producers | | + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_queue_test: + +.. figure:: img/eventdev_pipeline_queue_test.* + + pipeline queue test operation. + +The pipeline queue test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_queue_test`. + +The user can choose the number of workers and number of stages through the +``--wlcores`` and the ``--stlist`` application command line arguments +respectively. + +The number of producers depends on the number of ethernet devices detected and +each ethernet device is configured as a event_eth_rx_adapter that acts as a +producer. + +The producer(s) injects the events to eventdev based the first stage sched type +list requested by the user through ``--stlist`` the command line argument. + +Based on the number of stages to process(selected through ``--stlist``), +The application forwards the event to next upstream queue and when it reaches +the last stage in the pipeline if the event type is ``atomic`` it is enqueued +onto ethdev Tx queue else to maintain ordering the event type is set to +``atomic`` and enqueued onto the last stage queue. +On packet Tx, application increments the number events processed and print +periodically in one second to get the number of events processed in one +second. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=a + + +PIPELINE_ATQ Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following with +``all types queue`` eventdev scheme. + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_atq_test: + +.. table:: Pipeline atq test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | (nb_producers | Queues will be configured based on the | + | | | * nb_stages) | user requested sched type list(--stlist)| + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_atq_test: + +.. figure:: img/eventdev_pipeline_atq_test.* + + pipeline atq test operation. + +The pipeline atq test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_atq_test`. + +The atq queue test functions as same as ``pipeline_queue`` test. The difference +is, It uses, ``all type queue scheme`` instead of separate queues for each +stage and thus reduces the number of queues required to realize the use case. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=a -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs 2017-11-30 7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh ` (3 preceding siblings ...) 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh ` (10 more replies) 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (4 subsequent siblings) 9 siblings, 11 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add logs for packet distribution across worker cores to be printed along with the test results. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-eventdev/evt_main.c | 3 +++ app/test-eventdev/test_perf_common.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c index 1c3a7faeb..bde388b97 100644 --- a/app/test-eventdev/evt_main.c +++ b/app/test-eventdev/evt_main.c @@ -57,6 +57,9 @@ signal_handler(int signum) rte_eal_mp_wait_lcore(); + if (test->ops.test_result) + test->ops.test_result(test, &opt); + if (test->ops.eventdev_destroy) test->ops.eventdev_destroy(test, &opt); diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c index 9aff31f20..428af4ae2 100644 --- a/app/test-eventdev/test_perf_common.c +++ b/app/test-eventdev/test_perf_common.c @@ -36,8 +36,20 @@ int perf_test_result(struct evt_test *test, struct evt_options *opt) { RTE_SET_USED(opt); + int i; + uint64_t total = 0; struct test_perf *t = evt_test_priv(test); + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; } -- 2.15.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 02/12] app/eventdev: add pipeline test setup and destroy 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 03/12] app/eventdev: add mempool " Pavan Nikhilesh ` (9 subsequent siblings) 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Pipeline test has the queue and all types queue variants. Introduce test_pipeline_common* to share the common code between those tests. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- v3 Changes: - add SPDX licence tags app/test-eventdev/Makefile | 2 ++ app/test-eventdev/test_pipeline_common.c | 44 ++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 57 ++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_common.c create mode 100644 app/test-eventdev/test_pipeline_common.h diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index dcb2ac476..f2fb665d8 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -51,4 +51,6 @@ SRCS-y += test_perf_common.c SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c +SRCS-y += test_pipeline_common.c + include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c new file mode 100644 index 000000000..aa3481247 --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.c @@ -0,0 +1,44 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +int +pipeline_test_setup(struct evt_test *test, struct evt_options *opt) +{ + void *test_pipeline; + + test_pipeline = rte_zmalloc_socket(test->name, + sizeof(struct test_pipeline), RTE_CACHE_LINE_SIZE, + opt->socket_id); + if (test_pipeline == NULL) { + evt_err("failed to allocate test_pipeline memory"); + goto nomem; + } + test->test_priv = test_pipeline; + + struct test_pipeline *t = evt_test_priv(test); + + t->nb_workers = evt_nr_active_lcores(opt->wlcores); + t->outstand_pkts = opt->nb_pkts * evt_nr_active_lcores(opt->wlcores); + t->done = false; + t->nb_flows = opt->nb_flows; + t->result = EVT_TEST_FAILED; + t->opt = opt; + opt->prod_type = EVT_PROD_TYPE_ETH_RX_ADPTR; + memcpy(t->sched_type_list, opt->sched_type_list, + sizeof(opt->sched_type_list)); + return 0; +nomem: + return -ENOMEM; +} + +void +pipeline_test_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + + rte_free(test->test_priv); +} diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h new file mode 100644 index 000000000..645571cf5 --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.h @@ -0,0 +1,57 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#ifndef _TEST_PIPELINE_COMMON_ +#define _TEST_PIPELINE_COMMON_ + +#include <stdio.h> +#include <stdbool.h> +#include <unistd.h> + +#include <rte_cycles.h> +#include <rte_ethdev.h> +#include <rte_eventdev.h> +#include <rte_event_eth_rx_adapter.h> +#include <rte_lcore.h> +#include <rte_malloc.h> +#include <rte_mempool.h> +#include <rte_prefetch.h> +#include <rte_spinlock.h> + +#include "evt_common.h" +#include "evt_options.h" +#include "evt_test.h" + +struct test_pipeline; + +struct worker_data { + uint64_t processed_pkts; + uint8_t dev_id; + uint8_t port_id; + struct test_pipeline *t; +} __rte_cache_aligned; + +struct test_pipeline { + /* Don't change the offset of "done". Signal handler use this memory + * to terminate all lcores work. + */ + int done; + uint8_t nb_workers; + uint8_t mt_unsafe; + enum evt_test_result result; + uint32_t nb_flows; + uint64_t outstand_pkts; + struct rte_mempool *pool; + struct worker_data worker[EVT_MAX_PORTS]; + struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; + rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS]; + struct evt_options *opt; + uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; +} __rte_cache_aligned; + +int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); + +#endif /* _TEST_PIPELINE_COMMON_ */ -- 2.15.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 03/12] app/eventdev: add mempool setup and destroy 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 04/12] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh ` (8 subsequent siblings) 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 29 +++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index aa3481247..ff60fc36c 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,35 @@ #include "test_pipeline_common.h" +int +pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + t->pool = rte_pktmbuf_pool_create(test->name, /* mempool name */ + opt->pool_sz, /* number of elements*/ + 512, /* cache size*/ + 0, + RTE_MBUF_DEFAULT_BUF_SIZE, + opt->socket_id); /* flags */ + + if (t->pool == NULL) { + evt_err("failed to create mempool"); + return -ENOMEM; + } + + return 0; +} + +void +pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + struct test_pipeline *t = evt_test_priv(test); + + rte_mempool_free(t->pool); +} + int pipeline_test_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 645571cf5..569db1de5 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -52,6 +52,8 @@ struct test_pipeline { } __rte_cache_aligned; int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.15.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 04/12] app/eventdev: add pipeline opt dump and check functions 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 03/12] app/eventdev: add mempool " Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 05/12] app/eventdev: add perf ethport setup and destroy Pavan Nikhilesh ` (7 subsequent siblings) 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 84 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 ++ 2 files changed, 87 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index ff60fc36c..45e0652b8 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,90 @@ #include "test_pipeline_common.h" +int +pipeline_test_result(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + int i; + uint64_t total = 0; + struct test_pipeline *t = evt_test_priv(test); + + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; +} + +void +pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) +{ + evt_dump("nb_worker_lcores", "%d", evt_nr_active_lcores(opt->wlcores)); + evt_dump_worker_lcores(opt); + evt_dump_nb_stages(opt); + evt_dump("nb_evdev_ports", "%d", pipeline_nb_event_ports(opt)); + evt_dump("nb_evdev_queues", "%d", nb_queues); + evt_dump_queue_priority(opt); + evt_dump_sched_type_list(opt); + evt_dump_producer_type(opt); +} + +int +pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) +{ + unsigned int lcores; + /* + * N worker + 1 master + */ + lcores = 2; + + if (!rte_eth_dev_count()) { + evt_err("test needs minimum 1 ethernet dev"); + return -1; + } + + if (rte_lcore_count() < lcores) { + evt_err("test need minimum %d lcores", lcores); + return -1; + } + + /* Validate worker lcores */ + if (evt_lcores_has_overlap(opt->wlcores, rte_get_master_lcore())) { + evt_err("worker lcores overlaps with master lcore"); + return -1; + } + if (evt_has_disabled_lcore(opt->wlcores)) { + evt_err("one or more workers lcores are not enabled"); + return -1; + } + if (!evt_has_active_lcore(opt->wlcores)) { + evt_err("minimum one worker is required"); + return -1; + } + + if (nb_queues > EVT_MAX_QUEUES) { + evt_err("number of queues exceeds %d", EVT_MAX_QUEUES); + return -1; + } + if (pipeline_nb_event_ports(opt) > EVT_MAX_PORTS) { + evt_err("number of ports exceeds %d", EVT_MAX_PORTS); + return -1; + } + + if (evt_has_invalid_stage(opt)) + return -1; + + if (evt_has_invalid_sched_type(opt)) + return -1; + + return 0; +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 569db1de5..6e43eea2b 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -51,8 +51,11 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +int pipeline_test_result(struct evt_test *test, struct evt_options *opt); +int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); -- 2.15.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 05/12] app/eventdev: add perf ethport setup and destroy 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (2 preceding siblings ...) 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 04/12] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 06/12] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh ` (6 subsequent siblings) 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add common ethdev port setup and destroy along with event dev destroy. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- v3 Changes: - Use new RX offload scheme app/test-eventdev/test_pipeline_common.c | 95 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 + 2 files changed, 98 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 45e0652b8..fc3f9fb15 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -89,6 +89,101 @@ pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) return 0; } +#define NB_RX_DESC 128 +#define NB_TX_DESC 512 +int +pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int i; + uint8_t nb_queues = 1; + uint8_t mt_state = 0; + struct test_pipeline *t = evt_test_priv(test); + struct rte_eth_rxconf rx_conf; + struct rte_eth_conf port_conf = { + .rxmode = { + .mq_mode = ETH_MQ_RX_RSS, + .max_rx_pkt_len = ETHER_MAX_LEN, + .offloads = DEV_RX_OFFLOAD_CRC_STRIP, + .ignore_offload_bitfield = 1, + }, + .rx_adv_conf = { + .rss_conf = { + .rss_key = NULL, + .rss_hf = ETH_RSS_IP, + }, + }, + }; + + RTE_SET_USED(opt); + if (!rte_eth_dev_count()) { + evt_err("No ethernet ports found.\n"); + return -ENODEV; + } + + for (i = 0; i < rte_eth_dev_count(); i++) { + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(struct rte_eth_dev_info)); + rte_eth_dev_info_get(i, &dev_info); + mt_state = !(dev_info.tx_offload_capa & + DEV_TX_OFFLOAD_MT_LOCKFREE); + rx_conf = dev_info.default_rxconf; + rx_conf.offloads = port_conf.rxmode.offloads; + + if (rte_eth_dev_configure(i, nb_queues, nb_queues, + &port_conf) + < 0) { + evt_err("Failed to configure eth port [%d]\n", i); + return -EINVAL; + } + + if (rte_eth_rx_queue_setup(i, 0, NB_RX_DESC, + rte_socket_id(), &rx_conf, t->pool) < 0) { + evt_err("Failed to setup eth port [%d] rx_queue: %d.\n", + i, 0); + return -EINVAL; + } + if (rte_eth_tx_queue_setup(i, 0, NB_TX_DESC, + rte_socket_id(), NULL) < 0) { + evt_err("Failed to setup eth port [%d] tx_queue: %d.\n", + i, 0); + return -EINVAL; + } + + t->mt_unsafe |= mt_state; + t->tx_buf[i] = + rte_malloc(NULL, RTE_ETH_TX_BUFFER_SIZE(BURST_SIZE), 0); + if (t->tx_buf[i] == NULL) + rte_panic("Unable to allocate Tx buffer memory."); + rte_eth_promiscuous_enable(i); + } + + return 0; +} + +void +pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + int i; + RTE_SET_USED(test); + RTE_SET_USED(opt); + + for (i = 0; i < rte_eth_dev_count(); i++) { + rte_event_eth_rx_adapter_stop(i); + rte_eth_dev_stop(i); + rte_eth_dev_close(i); + } +} + +void +pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(test); + + rte_event_dev_stop(opt->dev_id); + rte_event_dev_close(opt->dev_id); +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 6e43eea2b..d8ab797bb 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -54,9 +54,12 @@ struct test_pipeline { int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.15.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 06/12] app/eventdev: add event port setup and Rx adapter setup 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (3 preceding siblings ...) 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 05/12] app/eventdev: add perf ethport setup and destroy Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 07/12] app/eventdev: launch pipeline lcores Pavan Nikhilesh ` (5 subsequent siblings) 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Setup one port per worker and link to all queues and setup producer port based on Rx adapter capabilities. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 102 +++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 4 ++ 2 files changed, 106 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index fc3f9fb15..e212cb93d 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -161,6 +161,108 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) return 0; } +int +pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint16_t nb_queues, const struct rte_event_port_conf p_conf) +{ + int ret; + uint8_t port; + struct test_pipeline *t = evt_test_priv(test); + + + /* setup one port per worker, linking to all queues */ + for (port = 0; port < evt_nr_active_lcores(opt->wlcores); port++) { + struct worker_data *w = &t->worker[port]; + + w->dev_id = opt->dev_id; + w->port_id = port; + w->t = t; + w->processed_pkts = 0; + + ret = rte_event_port_setup(opt->dev_id, port, &p_conf); + if (ret) { + evt_err("failed to setup port %d", port); + return ret; + } + + ret = rte_event_port_link(opt->dev_id, port, NULL, NULL, 0); + if (ret != nb_queues) { + evt_err("failed to link all queues to port %d", port); + return -EINVAL; + } + } + + return 0; +} + +int +pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf) +{ + int ret = 0; + uint16_t prod; + struct rte_event_eth_rx_adapter_queue_conf queue_conf; + + memset(&queue_conf, 0, + sizeof(struct rte_event_eth_rx_adapter_queue_conf)); + queue_conf.ev.sched_type = opt->sched_type_list[0]; + for (prod = 0; prod < rte_eth_dev_count(); prod++) { + uint32_t cap; + + ret = rte_event_eth_rx_adapter_caps_get(opt->dev_id, + prod, &cap); + if (ret) { + evt_err("failed to get event rx adapter[%d]" + " capabilities", + opt->dev_id); + return ret; + } + queue_conf.ev.queue_id = prod * stride; + ret = rte_event_eth_rx_adapter_create(prod, opt->dev_id, + &prod_conf); + if (ret) { + evt_err("failed to create rx adapter[%d]", prod); + return ret; + } + ret = rte_event_eth_rx_adapter_queue_add(prod, prod, -1, + &queue_conf); + if (ret) { + evt_err("failed to add rx queues to adapter[%d]", prod); + return ret; + } + + if (!(cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT)) { + uint32_t service_id; + + rte_event_eth_rx_adapter_service_id_get(prod, + &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("Failed to setup service core" + " for Rx adapter\n"); + return ret; + } + } + + ret = rte_eth_dev_start(prod); + if (ret) { + evt_err("Ethernet dev [%d] failed to start." + " Using synthetic producer", prod); + return ret; + } + + ret = rte_event_eth_rx_adapter_start(prod); + if (ret) { + evt_err("Rx adapter[%d] start failed", prod); + return ret; + } + printf("%s: Port[%d] using Rx adapter[%d] started\n", __func__, + prod, prod); + } + + return ret; +} + void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index d8ab797bb..985c9a008 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -55,7 +55,11 @@ int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint16_t nb_queues, const struct rte_event_port_conf p_conf); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.15.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 07/12] app/eventdev: launch pipeline lcores 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (4 preceding siblings ...) 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 06/12] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue test Pavan Nikhilesh ` (4 subsequent siblings) 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh The event master lcore's test termination and the logic to print the mpps are common for the queue and all types queue test. Move them as the common function. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 64 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 + 2 files changed, 66 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index e212cb93d..c9463aea1 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -38,6 +38,70 @@ pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) evt_dump_producer_type(opt); } +static inline uint64_t +processed_pkts(struct test_pipeline *t) +{ + uint8_t i; + uint64_t total = 0; + + rte_smp_rmb(); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + + return total; +} + +int +pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)) +{ + int ret, lcore_id; + struct test_pipeline *t = evt_test_priv(test); + + int port_idx = 0; + /* launch workers */ + RTE_LCORE_FOREACH_SLAVE(lcore_id) { + if (!(opt->wlcores[lcore_id])) + continue; + + ret = rte_eal_remote_launch(worker, + &t->worker[port_idx], lcore_id); + if (ret) { + evt_err("failed to launch worker %d", lcore_id); + return ret; + } + port_idx++; + } + + uint64_t perf_cycles = rte_get_timer_cycles(); + const uint64_t perf_sample = rte_get_timer_hz(); + + static float total_mpps; + static uint64_t samples; + + uint64_t prev_pkts = 0; + + while (t->done == false) { + const uint64_t new_cycles = rte_get_timer_cycles(); + + if ((new_cycles - perf_cycles) > perf_sample) { + const uint64_t curr_pkts = processed_pkts(t); + + float mpps = (float)(curr_pkts - prev_pkts)/1000000; + + prev_pkts = curr_pkts; + perf_cycles = new_cycles; + total_mpps += mpps; + ++samples; + printf(CLGRN"\r%.3f mpps avg %.3f mpps"CLNRM, + mpps, total_mpps/samples); + fflush(stdout); + } + } + printf("\n"); + return 0; +} + int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 985c9a008..481cb133b 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -60,6 +60,8 @@ int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, uint16_t nb_queues, const struct rte_event_port_conf p_conf); +int pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.15.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue test 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (5 preceding siblings ...) 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 07/12] app/eventdev: launch pipeline lcores Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 2018-01-10 16:38 ` Van Haaren, Harry 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh ` (3 subsequent siblings) 10 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline queue test case that aims at testing the following: 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The pipeline queue test configures the eventdev with Q queues and P ports, where Q is (nb_ethdev * nb_stages) + nb_ethdev and P is nb_workers. The user can choose the number of workers and number of stages through the --wlcores and the --stlist application command line arguments respectively. The probed ethernet devices act as producer(s) for this application. The ethdevs are configured as event Rx adapters that enables them to injects events to eventdev based the first stage schedule type list requested by the user through --stlist the command line argument. Based on the number of stages to process(selected through --stlist), the application forwards the event to next upstream queue and when it reaches last stage in the pipeline if the event type is ATOMIC it is enqueued onto ethdev Tx queue else to maintain ordering the event type is set to ATOMIC and enqueued onto the last stage queue. On packet Tx, application increments the number events processed and print periodically in one second to get the number of events processed in one second. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline queue test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- v3 Changes: - add SPDX licence tags app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_queue.c | 166 ++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_queue.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index f2fb665d8..30bebfb2f 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -52,5 +52,6 @@ SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c +SRCS-y += test_pipeline_queue.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c new file mode 100644 index 000000000..4b50e7b54 --- /dev/null +++ b/app/test-eventdev/test_pipeline_queue.c @@ -0,0 +1,166 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_queue_nb_event_queues(struct evt_options *opt) +{ + uint16_t eth_count = rte_eth_dev_count(); + + return (eth_count * opt->nb_stages) + eth_count; +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_queue_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + int nb_stages = opt->nb_stages; + uint8_t queue; + struct rte_event_dev_info info; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count() * (nb_stages); + nb_queues += rte_eth_dev_count(); + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + uint8_t slot; + + slot = queue % (nb_stages + 1); + q_conf.schedule_type = slot == nb_stages ? + RTE_SCHED_TYPE_ATOMIC : + opt->sched_type_list[slot]; + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + ret = pipeline_event_port_setup(test, opt, nb_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_rx_adapter_setup(opt, nb_stages + 1, + p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_queue_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_queue_nb_event_queues(opt)); +} + +static int +pipeline_queue_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_queue_nb_event_queues(opt)); +} + +static bool +pipeline_queue_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_queue_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_queue_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_queue = { + .cap_check = pipeline_queue_capability_check, + .opt_check = pipeline_queue_opt_check, + .opt_dump = pipeline_queue_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_queue_eventdev_setup, + .launch_lcores = pipeline_queue_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_queue); -- 2.15.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue test 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue test Pavan Nikhilesh @ 2018-01-10 16:38 ` Van Haaren, Harry 2018-01-10 20:01 ` Pavan Nikhilesh 0 siblings, 1 reply; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-10 16:38 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Wednesday, January 10, 2018 2:52 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue test > > This is a pipeline queue test case that aims at testing the following: > 1. Measure the end-to-end performance of an event dev with a ethernet dev. > 2. Maintain packet ordering from Rx to Tx. > > The pipeline queue test configures the eventdev with Q queues and P ports, > where Q is (nb_ethdev * nb_stages) + nb_ethdev and P is nb_workers. Why (nb_ethdev * nb_stages) number of Queues? I had expected if the test is for eventdev with Q queues, P ports, that that Q number of stages is all that is required, (possibly with +1 for TX queue, iirc some HW doesn't require the TX Queue). Am I missing something here? I've left the code snippet I don't understand below. <snip> > Note: The --prod_type_ethdev is mandatory for running the application. Mandatory arguments seem pointless to me, unless there are other valid options to choose from. > + > +static int > +pipeline_queue_eventdev_setup(struct evt_test *test, struct evt_options > *opt) > +{ > + int ret; > + int nb_ports; > + int nb_queues; > + int nb_stages = opt->nb_stages; > + uint8_t queue; > + struct rte_event_dev_info info; > + > + nb_ports = evt_nr_active_lcores(opt->wlcores); > + nb_queues = rte_eth_dev_count() * (nb_stages); As per comment above, this is what I don't understand? Why more queues than stages? ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue test 2018-01-10 16:38 ` Van Haaren, Harry @ 2018-01-10 20:01 ` Pavan Nikhilesh 2018-01-15 10:17 ` Van Haaren, Harry 0 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 20:01 UTC (permalink / raw) To: Van Haaren, Harry, jerin.jacob, santosh.shukla, gage.eads, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev Hi Harry, Thanks for the review. On Wed, Jan 10, 2018 at 04:38:35PM +0000, Van Haaren, Harry wrote: > > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > > Sent: Wednesday, January 10, 2018 2:52 PM > > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > > Liang J <liang.j.ma@intel.com> > > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > Subject: [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue test > > > > This is a pipeline queue test case that aims at testing the following: > > 1. Measure the end-to-end performance of an event dev with a ethernet dev. > > 2. Maintain packet ordering from Rx to Tx. > > > > The pipeline queue test configures the eventdev with Q queues and P ports, > > where Q is (nb_ethdev * nb_stages) + nb_ethdev and P is nb_workers. > > Why (nb_ethdev * nb_stages) number of Queues? > > I had expected if the test is for eventdev with Q queues, P ports, that that Q number of stages is all that is required, (possibly with +1 for TX queue, iirc some HW doesn't require the TX Queue). > > Am I missing something here? I've left the code snippet I don't understand below. > The idea is to reduce the load on ingress event queue (mapped to ethernet Rx queue) by splitting the traffic across event queues for each ethernet device. for example, nb_stages = 2 and nb_ethdev = 2 then nb_queues = (2 * 2) + 2 = 6 (non atq) stride = 3 (nb_stages + 1 used for directing each ethernet dev traffic into a specific event queue) queue id's 0,1,2,3,4,5 This allows us to direct the traffic from eth dev0 to event queue 0 and dev1 to queue 3 based on the stride (dev_id * stride). This intern forms two pipelines ethdev0 0->1->2->tx ethdev1 3->4->5->tx In the absence of this both ethdev0 and ethdev1 would have to inject to 0th queue and this leads to more congestion as the number of ethernet devices increase. Hope this clears things up. > > <snip> > > > Note: The --prod_type_ethdev is mandatory for running the application. > > Mandatory arguments seem pointless to me, unless there are other valid options to choose from. > In future we might have --prod_type_event_timer_adptr and --prod_type_cryptodev :-) Cheers, Pavan > > > + > > +static int > > +pipeline_queue_eventdev_setup(struct evt_test *test, struct evt_options > > *opt) > > +{ > > + int ret; > > + int nb_ports; > > + int nb_queues; > > + int nb_stages = opt->nb_stages; > > + uint8_t queue; > > + struct rte_event_dev_info info; > > + > > + nb_ports = evt_nr_active_lcores(opt->wlcores); > > + nb_queues = rte_eth_dev_count() * (nb_stages); > > > As per comment above, this is what I don't understand? Why more queues than stages? ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue test 2018-01-10 20:01 ` Pavan Nikhilesh @ 2018-01-15 10:17 ` Van Haaren, Harry 0 siblings, 0 replies; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-15 10:17 UTC (permalink / raw) To: 'Pavan Nikhilesh', jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Wednesday, January 10, 2018 8:01 PM > To: Van Haaren, Harry <harry.van.haaren@intel.com>; > jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Eads, > Gage <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue > test > > Hi Harry, > > Thanks for the review. > > On Wed, Jan 10, 2018 at 04:38:35PM +0000, Van Haaren, Harry wrote: > > > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > > > Sent: Wednesday, January 10, 2018 2:52 PM > > > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; > Van > > > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > > > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > > > Liang J <liang.j.ma@intel.com> > > > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > > Subject: [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue > test > > > > > > This is a pipeline queue test case that aims at testing the following: > > > 1. Measure the end-to-end performance of an event dev with a ethernet > dev. > > > 2. Maintain packet ordering from Rx to Tx. > > > > > > The pipeline queue test configures the eventdev with Q queues and P > ports, > > > where Q is (nb_ethdev * nb_stages) + nb_ethdev and P is nb_workers. > > > > Why (nb_ethdev * nb_stages) number of Queues? > > > > I had expected if the test is for eventdev with Q queues, P ports, that > that Q number of stages is all that is required, (possibly with +1 for TX > queue, iirc some HW doesn't require the TX Queue). > > > > Am I missing something here? I've left the code snippet I don't understand > below. > > > > The idea is to reduce the load on ingress event queue (mapped to ethernet Rx > queue) > by splitting the traffic across event queues for each ethernet device. > > for example, nb_stages = 2 and nb_ethdev = 2 then > > nb_queues = (2 * 2) + 2 = 6 (non atq) > stride = 3 (nb_stages + 1 used for directing each ethernet dev traffic > into a specific event queue) > > queue id's 0,1,2,3,4,5 > > This allows us to direct the traffic from eth dev0 to event queue 0 and dev1 > to > queue 3 based on the stride (dev_id * stride). This intern forms two > pipelines > ethdev0 0->1->2->tx > ethdev1 3->4->5->tx > > In the absence of this both ethdev0 and ethdev1 would have to inject to 0th > queue and this leads to more congestion as the number of ethernet devices > increase. > > Hope this clears things up. Ah ok, two parallel pipelines use-case. Makes sense, thanks for explaining. Acked-by: Harry van Haaren <harry.van.haaren@intel.com> <snip> ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (6 preceding siblings ...) 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue test Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 2018-01-10 16:45 ` Van Haaren, Harry 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 10/12] app/eventdev: add pipeline atq test Pavan Nikhilesh ` (2 subsequent siblings) 10 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.h | 80 +++++++ app/test-eventdev/test_pipeline_queue.c | 367 ++++++++++++++++++++++++++++++- 2 files changed, 446 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 481cb133b..b50e20adc 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -51,6 +51,86 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +#define BURST_SIZE 16 + +static __rte_always_inline void +pipeline_fwd_event(struct rte_event *ev, uint8_t sched) +{ + ev->event_type = RTE_EVENT_TYPE_CPU; + ev->op = RTE_EVENT_OP_FORWARD; + ev->sched_type = sched; +} + +static __rte_always_inline void +pipeline_event_enqueue(const uint8_t dev, const uint8_t port, + struct rte_event *ev) +{ + while (rte_event_enqueue_burst(dev, port, ev, 1) != 1) + rte_pause(); +} + +static __rte_always_inline void +pipeline_event_enqueue_burst(const uint8_t dev, const uint8_t port, + struct rte_event *ev, const uint16_t nb_rx) +{ + uint16_t enq; + + enq = rte_event_enqueue_burst(dev, port, ev, nb_rx); + while (enq < nb_rx) { + enq += rte_event_enqueue_burst(dev, port, + ev + enq, nb_rx - enq); + } +} + +static __rte_always_inline void +pipeline_tx_pkt_safe(struct rte_mbuf *mbuf) +{ + while (rte_eth_tx_burst(mbuf->port, 0, &mbuf, 1) != 1) + rte_pause(); +} + +static __rte_always_inline void +pipeline_tx_pkt_unsafe(struct rte_mbuf *mbuf, struct test_pipeline *t) +{ + rte_spinlock_t *lk = &t->tx_lk[mbuf->port]; + + rte_spinlock_lock(lk); + pipeline_tx_pkt_safe(mbuf); + rte_spinlock_unlock(lk); +} + +static __rte_always_inline void +pipeline_tx_unsafe_burst(struct rte_mbuf *mbuf, struct test_pipeline *t) +{ + uint16_t port = mbuf->port; + rte_spinlock_t *lk = &t->tx_lk[port]; + + rte_spinlock_lock(lk); + rte_eth_tx_buffer(port, 0, t->tx_buf[port], mbuf); + rte_spinlock_unlock(lk); +} + +static __rte_always_inline void +pipeline_tx_flush(struct test_pipeline *t, const uint8_t nb_ports) +{ + int i; + rte_spinlock_t *lk; + + for (i = 0; i < nb_ports; i++) { + lk = &t->tx_lk[i]; + + rte_spinlock_lock(lk); + rte_eth_tx_buffer_flush(i, 0, t->tx_buf[i]); + rte_spinlock_unlock(lk); + } +} + +static inline int +pipeline_nb_event_ports(struct evt_options *opt) +{ + return evt_nr_active_lcores(opt->wlcores); +} + int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c index 4b50e7b54..bc3f3dc18 100644 --- a/app/test-eventdev/test_pipeline_queue.c +++ b/app/test-eventdev/test_pipeline_queue.c @@ -15,10 +15,375 @@ pipeline_queue_nb_event_queues(struct evt_options *opt) return (eth_count * opt->nb_stages) + eth_count; } +static int +pipeline_queue_worker_single_stage_safe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt_safe(ev.mbuf); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_unsafe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt_unsafe(ev.mbuf, t); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_safe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev[BURST_SIZE + 1]; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_safe(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_unsafe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev[BURST_SIZE + 1]; + const uint16_t nb_ports = rte_eth_dev_count(); + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + pipeline_tx_flush(t, nb_ports); + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_unsafe_burst(ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else { + + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + + +static int +pipeline_queue_worker_multi_stage_safe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages + 1; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + uint8_t cq_id; + struct rte_event ev; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_safe(ev.mbuf); + w->processed_pkts++; + continue; + } + ev.queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_unsafe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages + 1; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + uint8_t cq_id; + struct rte_event ev; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_unsafe(ev.mbuf, t); + w->processed_pkts++; + continue; + } + ev.queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_safe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages + 1; + uint8_t cq_id; + struct rte_event ev[BURST_SIZE + 1]; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_safe(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + ev[i].queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_unsafe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages + 1; + uint8_t cq_id; + struct rte_event ev[BURST_SIZE + 1]; + const uint16_t nb_ports = rte_eth_dev_count(); + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + pipeline_tx_flush(t, nb_ports); + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_unsafe_burst(ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + ev[i].queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + /* allow compiler to optimize */ + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_queue_worker_single_stage_safe(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_single_stage_unsafe( + arg); + else if (burst && mt_safe) + return pipeline_queue_worker_single_stage_burst_safe( + arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_single_stage_burst_unsafe( + arg); + } else { + if (!burst && mt_safe) + return pipeline_queue_worker_multi_stage_safe(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_multi_stage_unsafe(arg); + if (burst && mt_safe) + return pipeline_queue_worker_multi_stage_burst_safe( + arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_multi_stage_burst_unsafe( + arg); + + } rte_panic("invalid worker\n"); } -- 2.15.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh @ 2018-01-10 16:45 ` Van Haaren, Harry 2018-01-10 16:53 ` Van Haaren, Harry 0 siblings, 1 reply; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-10 16:45 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Wednesday, January 10, 2018 2:52 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker > functions > <snip> > +static __rte_always_inline void > +pipeline_tx_pkt_safe(struct rte_mbuf *mbuf) > +{ > + while (rte_eth_tx_burst(mbuf->port, 0, &mbuf, 1) != 1) > + rte_pause(); > +} re safe, see comment below > + > +static __rte_always_inline void > +pipeline_tx_pkt_unsafe(struct rte_mbuf *mbuf, struct test_pipeline *t) > +{ > + rte_spinlock_t *lk = &t->tx_lk[mbuf->port]; > + > + rte_spinlock_lock(lk); > + pipeline_tx_pkt_safe(mbuf); > + rte_spinlock_unlock(lk); > +} IIRC usually the "Safe" version of a function has extra locks/protection, while the "normal" version has better performance, but less-error-checking. Here, the "unsafe" function does the extra locking. If looking from the HW POV, that makes sense, but I think its inverted from most existing code... Happy to be proved wrong here .. ? <snip> > +static int > +pipeline_queue_worker_single_stage_safe(void *arg) > +{ > + struct worker_data *w = arg; > + struct test_pipeline *t = w->t; > + const uint8_t dev = w->dev_id; > + const uint8_t port = w->port_id; > + struct rte_event ev; > + > + while (t->done == false) { > + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); > + > + if (!event) { > + rte_pause(); > + continue; > + } > + > + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { > + pipeline_tx_pkt_safe(ev.mbuf); I guess that means that the functions where they're used are inverted in name too. <snip> ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions 2018-01-10 16:45 ` Van Haaren, Harry @ 2018-01-10 16:53 ` Van Haaren, Harry 2018-01-10 20:17 ` Pavan Nikhilesh 0 siblings, 1 reply; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-10 16:53 UTC (permalink / raw) To: Van Haaren, Harry, Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev Replying to self... > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Van Haaren, Harry > Sent: Wednesday, January 10, 2018 4:45 PM > To: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>; > jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Eads, > Gage <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue > worker functions > > > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > > Sent: Wednesday, January 10, 2018 2:52 PM > > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > > Liang J <liang.j.ma@intel.com> > > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > Subject: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue > worker > > functions > > > > <snip> > > > > +static __rte_always_inline void > > +pipeline_tx_pkt_safe(struct rte_mbuf *mbuf) > > +{ > > + while (rte_eth_tx_burst(mbuf->port, 0, &mbuf, 1) != 1) > > + rte_pause(); > > +} > > re safe, see comment below > > > + > > +static __rte_always_inline void > > +pipeline_tx_pkt_unsafe(struct rte_mbuf *mbuf, struct test_pipeline *t) > > +{ > > + rte_spinlock_t *lk = &t->tx_lk[mbuf->port]; > > + > > + rte_spinlock_lock(lk); > > + pipeline_tx_pkt_safe(mbuf); > > + rte_spinlock_unlock(lk); > > +} > > IIRC usually the "Safe" version of a function has extra locks/protection, > while the "normal" version has better performance, but less-error-checking. > > Here, the "unsafe" function does the extra locking. If looking from the HW > POV, that makes sense, but I think its inverted from most existing code... > > Happy to be proved wrong here .. ? > > <snip> Thinking a little more about this, also in light of patch 11/12 of this series. The code here has a "safe" and "unsafe" version of TX. This involves adding a spinlock inside the code, which is being locked/unlocked before doing the actual TX action. I don't understand why this is necessary? DPDK's general stance on locking for data-path is DPDK functions do not provide locks, and that application level must implement thread-synchronization if it is required. In this case, the app/eventdev can be considered an App, but I don't like the idea of providing a sample application and code that duplicates core functionality with safe/unsafe versions.. Hope I'm making some sense here.. > > > +static int > > +pipeline_queue_worker_single_stage_safe(void *arg) > > +{ > > + struct worker_data *w = arg; > > + struct test_pipeline *t = w->t; > > + const uint8_t dev = w->dev_id; > > + const uint8_t port = w->port_id; > > + struct rte_event ev; > > + > > + while (t->done == false) { > > + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); > > + > > + if (!event) { > > + rte_pause(); > > + continue; > > + } > > + > > + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { > > + pipeline_tx_pkt_safe(ev.mbuf); > > I guess that means that the functions where they're used are inverted in > name too. > > <snip> ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions 2018-01-10 16:53 ` Van Haaren, Harry @ 2018-01-10 20:17 ` Pavan Nikhilesh 2018-01-11 12:17 ` Van Haaren, Harry 0 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 20:17 UTC (permalink / raw) To: Van Haaren, Harry, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev On Wed, Jan 10, 2018 at 04:53:53PM +0000, Van Haaren, Harry wrote: > Replying to self... > > > -----Original Message----- > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Van Haaren, Harry > > Sent: Wednesday, January 10, 2018 4:45 PM > > To: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>; > > jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Eads, > > Gage <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > > Liang J <liang.j.ma@intel.com> > > Cc: dev@dpdk.org > > Subject: Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue > > worker functions > > > > > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > > > Sent: Wednesday, January 10, 2018 2:52 PM > > > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > > > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > > > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > > > Liang J <liang.j.ma@intel.com> > > > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > > Subject: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue > > worker > > > functions > > > > > > > <snip> > > > > > > > +static __rte_always_inline void > > > +pipeline_tx_pkt_safe(struct rte_mbuf *mbuf) > > > +{ > > > + while (rte_eth_tx_burst(mbuf->port, 0, &mbuf, 1) != 1) > > > + rte_pause(); > > > +} > > > > re safe, see comment below > > > > > + > > > +static __rte_always_inline void > > > +pipeline_tx_pkt_unsafe(struct rte_mbuf *mbuf, struct test_pipeline *t) > > > +{ > > > + rte_spinlock_t *lk = &t->tx_lk[mbuf->port]; > > > + > > > + rte_spinlock_lock(lk); > > > + pipeline_tx_pkt_safe(mbuf); > > > + rte_spinlock_unlock(lk); > > > +} > > > > IIRC usually the "Safe" version of a function has extra locks/protection, > > while the "normal" version has better performance, but less-error-checking. > > > > Here, the "unsafe" function does the extra locking. If looking from the HW > > POV, that makes sense, but I think its inverted from most existing code... > > > > Happy to be proved wrong here .. ? > > > > <snip> > > > Thinking a little more about this, also in light of patch 11/12 of this series. > > The code here has a "safe" and "unsafe" version of TX. This involves adding a spinlock inside the code, which is being locked/unlocked before doing the actual TX action. > > I don't understand why this is necessary? DPDK's general stance on locking for data-path is DPDK functions do not provide locks, and that application level must implement thread-synchronization if it is required. > > In this case, the app/eventdev can be considered an App, but I don't like the idea of providing a sample application and code that duplicates core functionality with safe/unsafe versions.. > Some PMD's (net/octeontx) have capability to do multi-thread safe Tx where no thread-synchronization is required. This is exposed via the offload flag 'DEV_TX_OFFLOAD_MT_LOCKFREE'. So, the _safe Tx functions are selected based on the above offload capability and when the capability is absent _unsafe Tx functions are selected i.e. synchronized Tx via spin locks based on the Egress port id. The patch 5/12 has the below check to see if the connected ethernet dev(s) have the capability to do thread safe Tx + for (i = 0; i < rte_eth_dev_count(); i++) { + struct rte_eth_dev_info dev_info; .... + rte_eth_dev_info_get(i, &dev_info); + mt_state = !(dev_info.tx_offload_capa & + DEV_TX_OFFLOAD_MT_LOCKFREE); .... + t->mt_unsafe |= mt_state; + } Based on the value of t->mt_unsafe the appropriate worker function is selected. > Hope I'm making some sense here.. > Hope this clears thing up. Cheers, Pavan. > > > > > > +static int > > > +pipeline_queue_worker_single_stage_safe(void *arg) > > > +{ > > > + struct worker_data *w = arg; > > > + struct test_pipeline *t = w->t; > > > + const uint8_t dev = w->dev_id; > > > + const uint8_t port = w->port_id; > > > + struct rte_event ev; > > > + > > > + while (t->done == false) { > > > + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); > > > + > > > + if (!event) { > > > + rte_pause(); > > > + continue; > > > + } > > > + > > > + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { > > > + pipeline_tx_pkt_safe(ev.mbuf); > > > > I guess that means that the functions where they're used are inverted in > > name too. > > > > <snip> ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions 2018-01-10 20:17 ` Pavan Nikhilesh @ 2018-01-11 12:17 ` Van Haaren, Harry 2018-01-11 13:52 ` Pavan Nikhilesh 0 siblings, 1 reply; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-11 12:17 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Wednesday, January 10, 2018 8:17 PM > To: Van Haaren, Harry <harry.van.haaren@intel.com>; > jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Eads, > Gage <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue > worker functions > > On Wed, Jan 10, 2018 at 04:53:53PM +0000, Van Haaren, Harry wrote: > > Replying to self... > > > > > -----Original Message----- > > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Van Haaren, Harry > > > Sent: Wednesday, January 10, 2018 4:45 PM > > > To: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>; > > > jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Eads, > > > Gage <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; > Ma, > > > Liang J <liang.j.ma@intel.com> > > > Cc: dev@dpdk.org > > > Subject: Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline > queue > > > worker functions > > > > > > > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > > > > Sent: Wednesday, January 10, 2018 2:52 PM > > > > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; > Van > > > > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > > > > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; > Ma, > > > > Liang J <liang.j.ma@intel.com> > > > > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > > > Subject: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue > > > worker > > > > functions > > > > > > > > > > <snip> > > > > > > > > > > +static __rte_always_inline void > > > > +pipeline_tx_pkt_safe(struct rte_mbuf *mbuf) > > > > +{ > > > > + while (rte_eth_tx_burst(mbuf->port, 0, &mbuf, 1) != 1) > > > > + rte_pause(); > > > > +} > > > > > > re safe, see comment below > > > > > > > + > > > > +static __rte_always_inline void > > > > +pipeline_tx_pkt_unsafe(struct rte_mbuf *mbuf, struct test_pipeline > *t) > > > > +{ > > > > + rte_spinlock_t *lk = &t->tx_lk[mbuf->port]; > > > > + > > > > + rte_spinlock_lock(lk); > > > > + pipeline_tx_pkt_safe(mbuf); > > > > + rte_spinlock_unlock(lk); > > > > +} > > > > > > IIRC usually the "Safe" version of a function has extra > locks/protection, > > > while the "normal" version has better performance, but less-error- > checking. > > > > > > Here, the "unsafe" function does the extra locking. If looking from the > HW > > > POV, that makes sense, but I think its inverted from most existing > code... > > > > > > Happy to be proved wrong here .. ? > > > > > > <snip> > > > > > > Thinking a little more about this, also in light of patch 11/12 of this > series. > > > > The code here has a "safe" and "unsafe" version of TX. This involves > adding a spinlock inside the code, which is being locked/unlocked before > doing the actual TX action. > > > > I don't understand why this is necessary? DPDK's general stance on locking > for data-path is DPDK functions do not provide locks, and that application > level must implement thread-synchronization if it is required. > > > > In this case, the app/eventdev can be considered an App, but I don't like > the idea of providing a sample application and code that duplicates core > functionality with safe/unsafe versions.. > > > > Some PMD's (net/octeontx) have capability to do multi-thread safe Tx where > no > thread-synchronization is required. This is exposed via the offload flag > 'DEV_TX_OFFLOAD_MT_LOCKFREE'. Yes understood. > So, the _safe Tx functions are selected based on the above offload > capability > and when the capability is absent _unsafe Tx functions are selected i.e. > synchronized Tx via spin locks based on the Egress port id. This part changes the current behavior of the sample app. Currently there is a (SINGLE_LINK | ATOMIC) stage at the end of the pipeline, which performs this "many-to-one" action, allowing a single core to dequeue all TX traffic, and perform the TX operation in a lock-free manner. Changing this to a locking mechanism is going to hurt performance on platforms that do not support TX_OFFLOAD_MT_LOCKFREE. In my opinion, the correct fix is to alter the overall pipeline, and always use lockless TX. Examples below; NO TX_OFFLOAD_MT_LOCKFREE: Eth RX adapter -> stage 1 -> stage 2...(N-1) -> stage N -> stage TX (Atomic | SINGLE_LINK) -> eth TX WITH TX_OFFLOAD_MT_LOCKFREE: Eth RX adapter -> stage 1 -> stage 2...(N-1) -> stage N -> eth TX MT Capable By configuring the pipeline based on MT_OFFLOAD_LOCKFREE capability flag, and adding the SINGLE_LINK at the end if required, we can support both models without resorting to locked TX functions. I think this will lead to a cleaner and more performant solution. <snip> ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions 2018-01-11 12:17 ` Van Haaren, Harry @ 2018-01-11 13:52 ` Pavan Nikhilesh 2018-01-11 15:47 ` Van Haaren, Harry 0 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-11 13:52 UTC (permalink / raw) To: Van Haaren, Harry, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev On Thu, Jan 11, 2018 at 12:17:38PM +0000, Van Haaren, Harry wrote: > > <snip> > > > Thinking a little more about this, also in light of patch 11/12 of this > > series. > > > > > > The code here has a "safe" and "unsafe" version of TX. This involves > > adding a spinlock inside the code, which is being locked/unlocked before > > doing the actual TX action. > > > > > > I don't understand why this is necessary? DPDK's general stance on locking > > for data-path is DPDK functions do not provide locks, and that application > > level must implement thread-synchronization if it is required. > > > > > > In this case, the app/eventdev can be considered an App, but I don't like > > the idea of providing a sample application and code that duplicates core > > functionality with safe/unsafe versions.. > > > > > > > Some PMD's (net/octeontx) have capability to do multi-thread safe Tx where > > no > > thread-synchronization is required. This is exposed via the offload flag > > 'DEV_TX_OFFLOAD_MT_LOCKFREE'. > > Yes understood. > > > > So, the _safe Tx functions are selected based on the above offload > > capability > > and when the capability is absent _unsafe Tx functions are selected i.e. > > synchronized Tx via spin locks based on the Egress port id. > > > This part changes the current behavior of the sample app. > > Currently there is a (SINGLE_LINK | ATOMIC) stage at the end of the pipeline, which performs this "many-to-one" action, allowing a single core to dequeue all TX traffic, and perform the TX operation in a lock-free manner. > > Changing this to a locking mechanism is going to hurt performance on platforms that do not support TX_OFFLOAD_MT_LOCKFREE. > > In my opinion, the correct fix is to alter the overall pipeline, and always use lockless TX. Examples below; > > NO TX_OFFLOAD_MT_LOCKFREE: > > Eth RX adapter -> stage 1 -> stage 2...(N-1) -> stage N -> stage TX (Atomic | SINGLE_LINK) -> eth TX Agreed, when we detect that tx is not lockfree the workers would just forward the events to (Atomic | SINGLE_LINK) event queue which would be dequeued by a service(mt_unsafe) and Tx them lockfree. > > > WITH TX_OFFLOAD_MT_LOCKFREE: > > Eth RX adapter -> stage 1 -> stage 2...(N-1) -> stage N -> eth TX MT Capable The current lockfree pipeline would remain the same. > > > By configuring the pipeline based on MT_OFFLOAD_LOCKFREE capability flag, and adding the SINGLE_LINK at the end if required, we can support both models without resorting to locked TX functions. > > I think this will lead to a cleaner and more performant solution. > Thoughts? Pavan. > <snip> ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions 2018-01-11 13:52 ` Pavan Nikhilesh @ 2018-01-11 15:47 ` Van Haaren, Harry 0 siblings, 0 replies; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-11 15:47 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Thursday, January 11, 2018 1:52 PM > To: Van Haaren, Harry <harry.van.haaren@intel.com>; > jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Eads, > Gage <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue > worker functions > > On Thu, Jan 11, 2018 at 12:17:38PM +0000, Van Haaren, Harry wrote: > > > > <snip> > > > > Thinking a little more about this, also in light of patch 11/12 of > this > > > series. > > > > > > > > The code here has a "safe" and "unsafe" version of TX. This involves > > > adding a spinlock inside the code, which is being locked/unlocked before > > > doing the actual TX action. > > > > > > > > I don't understand why this is necessary? DPDK's general stance on > locking > > > for data-path is DPDK functions do not provide locks, and that > application > > > level must implement thread-synchronization if it is required. > > > > > > > > In this case, the app/eventdev can be considered an App, but I don't > like > > > the idea of providing a sample application and code that duplicates core > > > functionality with safe/unsafe versions.. > > > > > > > > > > Some PMD's (net/octeontx) have capability to do multi-thread safe Tx > where > > > no > > > thread-synchronization is required. This is exposed via the offload flag > > > 'DEV_TX_OFFLOAD_MT_LOCKFREE'. > > > > Yes understood. > > > > > > > So, the _safe Tx functions are selected based on the above offload > > > capability > > > and when the capability is absent _unsafe Tx functions are selected i.e. > > > synchronized Tx via spin locks based on the Egress port id. > > > > > > This part changes the current behavior of the sample app. > > > > Currently there is a (SINGLE_LINK | ATOMIC) stage at the end of the > pipeline, which performs this "many-to-one" action, allowing a single core > to dequeue all TX traffic, and perform the TX operation in a lock-free > manner. > > > > Changing this to a locking mechanism is going to hurt performance on > platforms that do not support TX_OFFLOAD_MT_LOCKFREE. > > > > In my opinion, the correct fix is to alter the overall pipeline, and > always use lockless TX. Examples below; > > > > NO TX_OFFLOAD_MT_LOCKFREE: > > > > Eth RX adapter -> stage 1 -> stage 2...(N-1) -> stage N -> stage TX > (Atomic | SINGLE_LINK) -> eth TX > > Agreed, when we detect that tx is not lockfree the workers would just > forward > the events to (Atomic | SINGLE_LINK) event queue which would be dequeued by > a > service(mt_unsafe) and Tx them lockfree. > > > > > > > WITH TX_OFFLOAD_MT_LOCKFREE: > > > > Eth RX adapter -> stage 1 -> stage 2...(N-1) -> stage N -> eth TX MT > Capable > > The current lockfree pipeline would remain the same. > > > > > > By configuring the pipeline based on MT_OFFLOAD_LOCKFREE capability flag, > and adding the SINGLE_LINK at the end if required, we can support both > models without resorting to locked TX functions. > > > > I think this will lead to a cleaner and more performant solution. > > > > Thoughts? A quick summary of the issue here, and then an overview of my understanding of the proposed solution. === Issue === Ethdev hardware has a flag TX_OFFLOAD_MT_LOCKFREE, which when set means that multiple CPU threads can safely TX on a single ethdev-queue concurrently (aka; without locking). Not all hardware supports this, so applications must be able to gracefully handle hardware where this capability is not provided. === Solution === In eventdev pipelines with MT_LOCKFREE capability, the CPU running the last "worker" stage can also perform the ethdev-TX operation. In eventdev pipelines without MT_LOCKFREE caps, we use a (Single Link | Atomic) stage to "fan in" the traffic to a single point, and use a TX service in order to abstract away the difference in CPU core requirements. The above solution avoids placing locks in the datapath by modifying the pipeline design, and the difference in CPU requirements is abstracted by only registering the TX service if required. Note that the TX service doesn't need the infrastructure like the RX adapter, as it is much simpler (dequeue from eventdev port, tx on ethdev port). @Pavan, I believe this is the same solution as you - just making sure we're aligned! Cheers, -Harry ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 10/12] app/eventdev: add pipeline atq test 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (7 preceding siblings ...) 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 11/12] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 12/12] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline test case that aims at testing the following with ``all types queue`` eventdev scheme. 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The atq queue test functions as same as ``pipeline_queue`` test. The difference is, It uses, ``all type queue scheme`` instead of separate queues for each stage and thus reduces the number of queues required to realize the use case. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline atq test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- v3 Changes: - redo queue creation by changing the queue count to nb_ethdev - add SPDX licence tags app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_atq.c | 158 ++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_atq.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index 30bebfb2f..6e3e36fb8 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -53,5 +53,6 @@ SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c SRCS-y += test_pipeline_queue.c +SRCS-y += test_pipeline_atq.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c new file mode 100644 index 000000000..642ef0375 --- /dev/null +++ b/app/test-eventdev/test_pipeline_atq.c @@ -0,0 +1,158 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_atq_nb_event_queues(struct evt_options *opt) +{ + RTE_SET_USED(opt); + + return rte_eth_dev_count(); +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_atq_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + uint8_t queue; + struct rte_event_dev_info info; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count(); + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + q_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_ALL_TYPES; + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + ret = pipeline_event_port_setup(test, opt, nb_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_rx_adapter_setup(opt, 1, p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_atq_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_atq_nb_event_queues(opt)); +} + +static int +pipeline_atq_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_atq_nb_event_queues(opt)); +} + +static bool +pipeline_atq_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_atq_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_atq_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_atq = { + .cap_check = pipeline_atq_capability_check, + .opt_check = pipeline_atq_opt_check, + .opt_dump = pipeline_atq_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_atq_eventdev_setup, + .launch_lcores = pipeline_atq_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_atq); -- 2.15.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 11/12] app/eventdev: add pipeline atq worker functions 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (8 preceding siblings ...) 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 10/12] app/eventdev: add pipeline atq test Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 12/12] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_atq.c | 354 +++++++++++++++++++++++++++++++++- 1 file changed, 353 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c index 642ef0375..720cb96b5 100644 --- a/app/test-eventdev/test_pipeline_atq.c +++ b/app/test-eventdev/test_pipeline_atq.c @@ -15,10 +15,362 @@ pipeline_atq_nb_event_queues(struct evt_options *opt) return rte_eth_dev_count(); } +static int +pipeline_atq_worker_single_stage_safe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt_safe(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_unsafe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt_unsafe(ev.mbuf, t); + w->processed_pkts++; + } else { + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_safe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev[BURST_SIZE + 1]; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_safe(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_unsafe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + struct rte_event ev[BURST_SIZE + 1]; + const uint16_t nb_ports = rte_eth_dev_count(); + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + pipeline_tx_flush(t, nb_ports); + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_unsafe_burst(ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_multi_stage_safe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + uint8_t cq_id; + struct rte_event ev; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_safe(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_unsafe(void *arg) +{ + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + uint8_t cq_id; + struct rte_event ev; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt_unsafe(ev.mbuf, t); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_safe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages; + uint8_t cq_id; + struct rte_event ev[BURST_SIZE + 1]; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_unsafe_burst(ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_unsafe(void *arg) +{ + int i; + struct worker_data *w = arg; + struct test_pipeline *t = w->t; + const uint8_t dev = w->dev_id; + const uint8_t port = w->port_id; + uint8_t *const sched_type_list = &t->sched_type_list[0]; + const uint8_t last_queue = t->opt->nb_stages - 1; + const uint8_t nb_stages = t->opt->nb_stages; + uint8_t cq_id; + struct rte_event ev[BURST_SIZE + 1]; + const uint16_t nb_ports = rte_eth_dev_count(); + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + pipeline_tx_flush(t, nb_ports); + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_unsafe_burst(ev[i].mbuf, t); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + /* allow compiler to optimize */ + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_atq_worker_single_stage_safe(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_single_stage_unsafe( + arg); + else if (burst && mt_safe) + return pipeline_atq_worker_single_stage_burst_safe( + arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_single_stage_burst_unsafe( + arg); + } else { + if (!burst && mt_safe) + return pipeline_atq_worker_multi_stage_safe(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_multi_stage_unsafe(arg); + if (burst && mt_safe) + return pipeline_atq_worker_multi_stage_burst_safe( + arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_multi_stage_burst_unsafe( + arg); + + } rte_panic("invalid worker\n"); } -- 2.15.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v3 12/12] doc: add pipeline test in eventdev test guide 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (9 preceding siblings ...) 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 11/12] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh @ 2018-01-10 14:51 ` Pavan Nikhilesh 10 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-10 14:51 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- v3 Changes: - add SPDX licence tags .../tools/img/eventdev_pipeline_atq_test.svg | 3261 ++++++++++++++++++++ .../tools/img/eventdev_pipeline_queue_test.svg | 3261 ++++++++++++++++++++ doc/guides/tools/testeventdev.rst | 174 ++ 3 files changed, 6696 insertions(+) create mode 100644 doc/guides/tools/img/eventdev_pipeline_atq_test.svg create mode 100644 doc/guides/tools/img/eventdev_pipeline_queue_test.svg diff --git a/doc/guides/tools/img/eventdev_pipeline_atq_test.svg b/doc/guides/tools/img/eventdev_pipeline_atq_test.svg new file mode 100644 index 000000000..533bc11b9 --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_atq_test.svg @@ -0,0 +1,3261 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_atq_test.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="Arrow2Mstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Mstart" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2002" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.6) translate(0,0)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="EmptyTriangleOutM" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2141" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#358611;stroke-width:1pt;stroke-opacity:0.95703125" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-156,68)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-30,14)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(32,-46)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76424623,0,0,1,-92.508475,2)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,8.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,5.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-0" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-7-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-0-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-9-9-1-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-2-7-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-39.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58515,13.679547)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-49" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.91877242,0,0,1.0012876,401.69944,9.159662)" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-0-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-4-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-8-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-1-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.7519532" + inkscape:cx="476.06166" + inkscape:cy="257.16874" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.96962941;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.9696294, 1.9696294;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-0-2)" + d="m 571.04412,302.94327 c 0,-11.28285 0,-22.56711 0,-33.85278" + id="path2656-7-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-8-2" + inkscape:original-d="m 571.04412,302.94327 c 0.003,-11.28285 0.003,-22.56711 0,-33.85278" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="29.328003" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="29.328003" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="54.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="439.29071" + y="283.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="438.83691" + y="230.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="437.98169" + y="170.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="442.87885" + y="167.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="442.87885" + y="167.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="442.61511" + y="227.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="442.61511" + y="227.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="444.61511" + y="281.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="444.61511" + y="281.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="448.13348" + y="188.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="448.13348" + y="188.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="449.25244" + y="248.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="449.25244" + y="248.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="451.25244" + y="302.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="451.25244" + y="302.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.85571432;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.41464" + height="223.72733" + x="217.65247" + y="133.50191" + ry="5.6568542" + rx="6.9393806" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.2462,184.07275 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940" + inkscape:original-d="m 390.2462,184.07275 c 9.43699,-0.001 18.87298,-0.001 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM)" + d="m 417.84632,184.68305 c 0,8.01981 0,16.04062 0,24.06243" + id="path2656" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658" + inkscape:original-d="m 417.84632,184.68305 c 0.001,8.01981 0.001,16.04062 0,24.06243" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="452.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="452.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_atq</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.16081,240.12929 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-3" + inkscape:original-d="m 390.16081,240.12929 c 9.43699,-0.001 18.87298,-0.001 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-7)" + d="m 417.76093,240.73959 c 0,8.0198 0,16.04062 0,24.06242" + id="path2656-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-9" + inkscape:original-d="m 417.76093,240.73959 c 0.001,8.0198 0.001,16.04062 0,24.06242" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.16081,294.1293 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938-3-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-3-6" + inkscape:original-d="m 390.16081,294.1293 c 9.43699,-10e-4 18.87298,-10e-4 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-7-9)" + d="m 417.76093,294.7396 c 0,8.0198 0,16.04062 0,24.06242" + id="path2656-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-9-7" + inkscape:original-d="m 417.76093,294.7396 c 0.001,8.0198 0.001,16.04062 0,24.06242" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.77605528;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.77605523, 0.77605523;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236);marker-end:url(#marker3706)" + d="m 405.38162,226.06021 c 4.18328,1.14108 8.58277,1.48403 12.89235,1.005 8.24205,-0.91615 16.10405,-4.92166 21.69025,-11.0507 5.5862,-6.12904 8.84752,-14.32775 8.99757,-22.61921" + id="path14459" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461" + inkscape:original-d="m 405.38162,226.06021 c 2.85007,-12.15989 6.00401,4.45519 12.89235,1.005 41.63501,-20.85393 4.69471,-33.67123 30.68782,-33.66991" + sodipodi:nodetypes="csc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.64431453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.6443145, 0.6443145;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker27764);marker-end:url(#marker3706)" + d="m 384.00393,359.44156 c 5.47652,3.69065 12.00427,5.80227 18.60476,6.01835 4.34535,0.14225 8.72568,-0.5286 12.79431,-2.06112 8.17137,-3.07788 14.68764,-9.42627 20.14228,-16.24474 2.99856,-3.74829 5.75343,-7.68637 8.37907,-11.7047 3.45377,-5.28571 6.69104,-10.7217 9.46577,-16.3934 0.32776,-0.66995 0.64901,-1.34309 0.9637,-2.01928" + id="path14478" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14480" + inkscape:original-d="m 384.00393,359.44156 c 4.43549,3.57571 14.17063,2.44073 18.60476,6.01835 4.43412,3.57763 6.76344,0.19553 12.79431,-2.06112 6.03087,-2.25664 13.42887,-10.83078 20.14228,-16.24474 6.7134,-5.41397 5.58672,-7.8041 8.37907,-11.7047 2.79234,-3.90063 6.31119,-10.92989 9.46577,-16.3934 3.15458,-5.4635 0.64314,-1.34712 0.9637,-2.01928" + sodipodi:nodetypes="cssccsc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.66480464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.6648046, 0.6648046;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow2Mstart);marker-end:url(#marker3706)" + d="m 403.84316,273.42402 c 2.05111,2.93979 4.84929,5.35386 8.05799,6.95187 3.49017,1.73819 7.42944,2.50158 11.32771,2.42378 3.89827,-0.0778 7.75698,-0.98012 11.37892,-2.42378 8.08398,-3.22219 15.03284,-9.21717 19.40527,-16.74147" + id="path14482" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14484" + inkscape:original-d="m 403.84316,273.42402 c 2.68667,2.31628 5.37267,4.63356 8.05799,6.95187 2.68532,2.3183 15.13844,-0.001 22.70663,0 7.5682,10e-4 12.93753,-11.162 19.40527,-16.74147" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="105.35634" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="105.35634" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="256.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="256.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="365.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="365.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="172.32845" + y="123.36828" + id="text5219-26"><tspan + sodipodi:role="line" + x="172.32845" + y="123.36828" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = (number of stages * number of producers)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="407.66333" + y="349.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="407.66333" + y="349.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port a</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9);marker-end:url(#marker3706-2)" + d="m 385.01751,166.18935 c 6.55603,-7.21647 16.26555,-11.46121 26.01498,-11.37303 6.63484,0.06 13.24026,2.07203 18.7819,5.72098 5.54164,3.64896 9.99986,8.92192 12.67653,14.99317" + id="path14459-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7" + inkscape:original-d="m 385.01751,166.18935 c 5.92072,15.88628 28.91798,-63.08988 26.01498,-11.37303 -3.44145,61.30951 1.38145,44.83512 31.45843,20.71415" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.47793281;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.47793282, 1.47793282;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-9-9-1-1)" + d="m 491.5518,246.00386 c 17.51755,0 35.03729,0 52.55918,0" + id="path2656-8-6-3-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-2-3-9-4" + inkscape:original-d="m 491.5518,246.00386 c 17.51755,-9.9e-4 35.03729,-9.9e-4 52.55918,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2);marker-end:url(#marker3706-2-6)" + d="m 385.51243,248.87002 c 5.48696,-8.85344 15.60233,-14.65031 26.01498,-14.90856 7.15944,-0.17757 14.35645,2.1752 20.0285,6.54749 5.67206,4.3723 9.77927,10.73337 11.42993,17.70219" + id="path14459-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5" + inkscape:original-d="m 385.51243,248.87002 c 5.92072,15.88628 28.91798,-66.62541 26.01498,-14.90856 -3.44145,61.30951 1.38145,48.37065 31.45843,24.24968" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2-4);marker-end:url(#marker3706-2-6-6)" + d="m 367.00275,331.92384 c 3.89778,-7.26007 9.15112,-13.78948 15.40838,-19.1512 9.22443,-7.90423 20.64062,-13.22358 32.62613,-15.20209 11.98552,-1.97851 24.50563,-0.61044 35.78103,3.90977" + id="path14459-5-5-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5-6" + inkscape:original-d="m 367.00275,331.92384 c 5.92072,15.88628 18.31138,-70.86805 15.40838,-19.1512 -3.44145,61.30951 38.33018,12.82865 68.40716,-11.29232" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="307.3092" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894426)"><tspan + sodipodi:role="line" + id="tspan1220" + x="307.3092" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="509.31921" + y="201.97095" + id="text5219-2-4-3-3"><tspan + sodipodi:role="line" + x="509.31921" + y="201.97095" + id="tspan5223-0-7-7-7" + style="font-size:8.66666698px;line-height:1.25">Event type </tspan><tspan + sodipodi:role="line" + x="509.31921" + y="212.80428" + style="font-size:8.66666698px;line-height:1.25" + id="tspan1242"> Atomic</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="419.69006" + y="139.72652" + id="text5219-2-4-3-3-4"><tspan + sodipodi:role="line" + x="419.69006" + y="139.72652" + id="tspan5223-0-7-7-7-5" + style="font-size:8.66666667px;line-height:1.25">Event type </tspan><tspan + sodipodi:role="line" + x="419.69006" + y="152.22652" + style="font-size:8.66666667px;line-height:1.25" + id="tspan1265">Parallel/Ordered</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7" + width="51.714954" + height="32.587509" + x="610.41241" + y="175.56439" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8" + width="51.714954" + height="32.587509" + x="610.31189" + y="228.99942" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8-1" + width="51.714954" + height="32.587509" + x="610.31189" + y="284.99939" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-49);stroke-width:0.98503989;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8-0" + width="46.100037" + height="41.821865" + x="544.77686" + y="224.75677" + rx="23.050018" + ry="19.496723" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="550.90131" + y="243.5219" + id="text5219-2-4-3-3-6"><tspan + sodipodi:role="line" + x="550.90131" + y="243.5219" + style="font-size:8.66666698px;line-height:1.25" + id="tspan1242-9">mt safe </tspan><tspan + sodipodi:role="line" + x="550.90131" + y="254.35522" + style="font-size:8.66666698px;line-height:1.25" + id="tspan6969"> tx?</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.65842497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.65842498, 1.65842498;stroke-dashoffset:0;stroke-opacity:1" + d="m 490.36981,185.5008 c 26.02242,0 52.04208,0 64.72658,-0.12632 12.68451,-0.12632 12.0325,-0.38057 11.38255,-0.63402" + id="path1938-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-7" + inkscape:original-d="m 490.36981,185.5008 c 26.02242,-0.001 52.04208,-0.001 78.05897,0 -0.64718,-0.25444 -1.94984,-0.76034 -1.94984,-0.76034" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:2.04590178;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.04590175, 2.04590175;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-0)" + d="m 566.4769,186.10953 c 0,12.17361 0,24.34874 0,36.52539" + id="path2656-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-8" + inkscape:original-d="m 566.4769,186.10953 c 0.003,12.17361 0.003,24.34874 0,36.52539" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.65842497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.65842498, 1.65842498;stroke-dashoffset:0;stroke-opacity:1" + d="m 492.46012,302.18293 c 26.02242,0 52.04208,0 64.72658,0.12632 12.68451,0.12632 12.0325,0.38057 11.38255,0.63402" + id="path1938-1-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-7-2" + inkscape:original-d="m 492.46012,302.18293 c 26.02242,10e-4 52.04208,10e-4 78.05897,0 -0.64718,0.25444 -1.94984,0.76034 -1.94984,0.76034" + sodipodi:nodetypes="ccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="620.28857" + y="239.64172" + id="text5219-2-3-7-7" + transform="scale(0.98989581,1.0102073)"><tspan + sodipodi:role="line" + x="620.28857" + y="239.64172" + id="tspan5223-0-6-5-1" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port 1</tspan><tspan + sodipodi:role="line" + x="620.28857" + y="250.43735" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15"> Txq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="621.00293" + y="186.44463" + id="text5219-2-3-7-7-9" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="621.00293" + y="186.44463" + id="tspan5223-0-6-5-1-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port 0</tspan><tspan + sodipodi:role="line" + x="621.00293" + y="197.24025" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-7"> Txq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="621.71729" + y="294.93872" + id="text5219-2-3-7-7-6" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="621.71729" + y="294.93872" + id="tspan5223-0-6-5-1-73" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port a</tspan><tspan + sodipodi:role="line" + x="621.71729" + y="305.73434" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-6"> Txq 0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-5)" + d="m 590.89557,246.52582 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-39" + inkscape:original-d="m 590.89557,246.52582 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-8)" + d="m 584.8092,262.55454 c 11.8346,6.14848 23.66883,12.29676 35.50269,18.44485" + id="path5226-6-6-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-2" + inkscape:original-d="m 584.8092,262.55454 c 11.83522,6.14728 23.66945,12.29556 35.50269,18.44485" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-8-3)" + d="m 582.8092,227.97785 c 11.8346,-6.14848 23.66883,-12.29676 35.50269,-18.44485" + id="path5226-6-6-9-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-2-0" + inkscape:original-d="m 582.8092,227.97785 c 11.83522,-6.14728 23.66945,-12.29556 35.50269,-18.44485" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:0.81462836;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.81462827, 0.81462827;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-8);marker-end:url(#marker3706-2-0)" + d="m 545.54392,254.17939 c -3.62648,-0.66909 -7.50276,0.13346 -10.56544,2.18747 -3.06268,2.05402 -5.2763,5.33572 -6.03357,8.94481 -0.75727,3.60909 -0.0494,7.50379 1.92933,10.61562 1.97877,3.11183 5.20555,5.40477 8.79511,6.24977 2.39256,0.56322 4.9306,0.49598 7.28998,-0.19314 2.35938,-0.68913 4.53461,-1.99853 6.24789,-3.76098 1.71328,-1.76245 2.96063,-3.97385 3.58274,-6.35178 0.62211,-2.37792 0.61753,-4.91685 -0.0131,-7.29252" + id="path14459-5-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-63" + inkscape:original-d="m 545.54392,254.17939 c -4.42306,-11.93362 -8.04324,66.84688 -5.87457,27.99767 2.57092,-46.05513 49.47586,-15.91888 17.10747,-17.59842" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="521.71185" + y="285.83926" + id="text5219-2-3-7-7-5" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="521.71185" + y="285.83926" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-1">Spin lock</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr a</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/img/eventdev_pipeline_queue_test.svg b/doc/guides/tools/img/eventdev_pipeline_queue_test.svg new file mode 100644 index 000000000..d147bb633 --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_queue_test.svg @@ -0,0 +1,3261 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_queue_test.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="Arrow2Mstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Mstart" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2002" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.6) translate(0,0)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="EmptyTriangleOutM" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2141" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#358611;stroke-width:1pt;stroke-opacity:0.95703125" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-156,68)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-30,14)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(32,-46)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76424623,0,0,1,-92.508475,2)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,8.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,5.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-0" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-7-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-0-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-9-9-1-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-2-7-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-39.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58515,13.679547)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-49" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.91877242,0,0,1.0012876,401.69944,9.159662)" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0" + refX="0" + id="EmptyTriangleOutM-0-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2141-4-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ffffff;fill-rule:evenodd;stroke:#358611;stroke-width:1.00000003pt;stroke-opacity:0.95703125" + transform="matrix(0.4,0,0,0.4,-1.8,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-8-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-1-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4142136" + inkscape:cx="462.17434" + inkscape:cy="203.76375" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.96962941;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.9696294, 1.9696294;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-0-2)" + d="m 571.04412,302.94327 c 0,-11.28285 0,-22.56711 0,-33.85278" + id="path2656-7-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-8-2" + inkscape:original-d="m 571.04412,302.94327 c 0.003,-11.28285 0.003,-22.56711 0,-33.85278" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="29.328003" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="29.328003" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="54.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="439.29071" + y="283.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="438.83691" + y="230.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="437.98169" + y="170.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="442.87885" + y="167.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="442.87885" + y="167.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="442.61511" + y="227.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="442.61511" + y="227.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="444.61511" + y="281.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="444.61511" + y="281.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="448.13348" + y="188.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="448.13348" + y="188.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="449.25244" + y="248.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="449.25244" + y="248.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="451.25244" + y="302.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="451.25244" + y="302.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.85571432;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.41464" + height="223.72733" + x="217.65247" + y="133.50191" + ry="5.6568542" + rx="6.9393806" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.2462,184.07275 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940" + inkscape:original-d="m 390.2462,184.07275 c 9.43699,-0.001 18.87298,-0.001 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM)" + d="m 417.84632,184.68305 c 0,8.01981 0,16.04062 0,24.06243" + id="path2656" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658" + inkscape:original-d="m 417.84632,184.68305 c 0.001,8.01981 0.001,16.04062 0,24.06243" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="452.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="452.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_queue</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.16081,240.12929 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-3" + inkscape:original-d="m 390.16081,240.12929 c 9.43699,-0.001 18.87298,-0.001 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-7)" + d="m 417.76093,240.73959 c 0,8.0198 0,16.04062 0,24.06242" + id="path2656-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-9" + inkscape:original-d="m 417.76093,240.73959 c 0.001,8.0198 0.001,16.04062 0,24.06242" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" + d="m 390.16081,294.1293 c 9.43699,0 18.87298,0 23.47261,-0.12707 4.59962,-0.12707 4.36395,-0.38114 4.12825,-0.63524" + id="path1938-3-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-3-6" + inkscape:original-d="m 390.16081,294.1293 c 9.43699,-10e-4 18.87298,-10e-4 28.30797,0 -0.2347,-0.2551 -0.70711,-0.76231 -0.70711,-0.76231" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-7-9)" + d="m 417.76093,294.7396 c 0,8.0198 0,16.04062 0,24.06242" + id="path2656-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-9-7" + inkscape:original-d="m 417.76093,294.7396 c 0.001,8.0198 0.001,16.04062 0,24.06242" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.77605528;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.77605523, 0.77605523;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236);marker-end:url(#marker3706)" + d="m 405.38162,226.06021 c 4.18328,1.14108 8.58277,1.48403 12.89235,1.005 8.24205,-0.91615 16.10405,-4.92166 21.69025,-11.0507 5.5862,-6.12904 8.84752,-14.32775 8.99757,-22.61921" + id="path14459" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461" + inkscape:original-d="m 405.38162,226.06021 c 2.85007,-12.15989 6.00401,4.45519 12.89235,1.005 41.63501,-20.85393 4.69471,-33.67123 30.68782,-33.66991" + sodipodi:nodetypes="csc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.64431453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.6443145, 0.6443145;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker27764);marker-end:url(#marker3706)" + d="m 384.00393,359.44156 c 5.47652,3.69065 12.00427,5.80227 18.60476,6.01835 4.34535,0.14225 8.72568,-0.5286 12.79431,-2.06112 8.17137,-3.07788 14.68764,-9.42627 20.14228,-16.24474 2.99856,-3.74829 5.75343,-7.68637 8.37907,-11.7047 3.45377,-5.28571 6.69104,-10.7217 9.46577,-16.3934 0.32776,-0.66995 0.64901,-1.34309 0.9637,-2.01928" + id="path14478" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14480" + inkscape:original-d="m 384.00393,359.44156 c 4.43549,3.57571 14.17063,2.44073 18.60476,6.01835 4.43412,3.57763 6.76344,0.19553 12.79431,-2.06112 6.03087,-2.25664 13.42887,-10.83078 20.14228,-16.24474 6.7134,-5.41397 5.58672,-7.8041 8.37907,-11.7047 2.79234,-3.90063 6.31119,-10.92989 9.46577,-16.3934 3.15458,-5.4635 0.64314,-1.34712 0.9637,-2.01928" + sodipodi:nodetypes="cssccsc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.66480464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.6648046, 0.6648046;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow2Mstart);marker-end:url(#marker3706)" + d="m 403.84316,273.42402 c 2.05111,2.93979 4.84929,5.35386 8.05799,6.95187 3.49017,1.73819 7.42944,2.50158 11.32771,2.42378 3.89827,-0.0778 7.75698,-0.98012 11.37892,-2.42378 8.08398,-3.22219 15.03284,-9.21717 19.40527,-16.74147" + id="path14482" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14484" + inkscape:original-d="m 403.84316,273.42402 c 2.68667,2.31628 5.37267,4.63356 8.05799,6.95187 2.68532,2.3183 15.13844,-0.001 22.70663,0 7.5682,10e-4 12.93753,-11.162 19.40527,-16.74147" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="105.35634" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="105.35634" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="256.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="256.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="365.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="365.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="172.32845" + y="123.36828" + id="text5219-26"><tspan + sodipodi:role="line" + x="172.32845" + y="123.36828" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = (number of stages * number of producers) + number of producers</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="407.66333" + y="349.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="407.66333" + y="349.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port a</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9);marker-end:url(#marker3706-2)" + d="m 385.01751,166.18935 c 6.55603,-7.21647 16.26555,-11.46121 26.01498,-11.37303 6.63484,0.06 13.24026,2.07203 18.7819,5.72098 5.54164,3.64896 9.99986,8.92192 12.67653,14.99317" + id="path14459-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7" + inkscape:original-d="m 385.01751,166.18935 c 5.92072,15.88628 28.91798,-63.08988 26.01498,-11.37303 -3.44145,61.30951 1.38145,44.83512 31.45843,20.71415" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.47793281;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.47793282, 1.47793282;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-9-9-1-1)" + d="m 491.5518,246.00386 c 17.51755,0 35.03729,0 52.55918,0" + id="path2656-8-6-3-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-2-3-9-4" + inkscape:original-d="m 491.5518,246.00386 c 17.51755,-9.9e-4 35.03729,-9.9e-4 52.55918,0" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2);marker-end:url(#marker3706-2-6)" + d="m 385.51243,248.87002 c 5.48696,-8.85344 15.60233,-14.65031 26.01498,-14.90856 7.15944,-0.17757 14.35645,2.1752 20.0285,6.54749 5.67206,4.3723 9.77927,10.73337 11.42993,17.70219" + id="path14459-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5" + inkscape:original-d="m 385.51243,248.87002 c 5.92072,15.88628 28.91798,-66.62541 26.01498,-14.90856 -3.44145,61.30951 1.38145,48.37065 31.45843,24.24968" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2-4);marker-end:url(#marker3706-2-6-6)" + d="m 367.00275,331.92384 c 3.89778,-7.26007 9.15112,-13.78948 15.40838,-19.1512 9.22443,-7.90423 20.64062,-13.22358 32.62613,-15.20209 11.98552,-1.97851 24.50563,-0.61044 35.78103,3.90977" + id="path14459-5-5-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5-6" + inkscape:original-d="m 367.00275,331.92384 c 5.92072,15.88628 18.31138,-70.86805 15.40838,-19.1512 -3.44145,61.30951 38.33018,12.82865 68.40716,-11.29232" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="307.3092" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894426)"><tspan + sodipodi:role="line" + id="tspan1220" + x="307.3092" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="509.31921" + y="201.97095" + id="text5219-2-4-3-3"><tspan + sodipodi:role="line" + x="509.31921" + y="201.97095" + id="tspan5223-0-7-7-7" + style="font-size:8.66666698px;line-height:1.25">Event type </tspan><tspan + sodipodi:role="line" + x="509.31921" + y="212.80428" + style="font-size:8.66666698px;line-height:1.25" + id="tspan1242"> Atomic</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="419.69006" + y="139.72652" + id="text5219-2-4-3-3-4"><tspan + sodipodi:role="line" + x="419.69006" + y="139.72652" + id="tspan5223-0-7-7-7-5" + style="font-size:8.66666667px;line-height:1.25">Event type </tspan><tspan + sodipodi:role="line" + x="419.69006" + y="152.22652" + style="font-size:8.66666667px;line-height:1.25" + id="tspan1265">Parallel/Ordered</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7" + width="51.714954" + height="32.587509" + x="610.41241" + y="175.56439" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8" + width="51.714954" + height="32.587509" + x="610.31189" + y="228.99942" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8-1" + width="51.714954" + height="32.587509" + x="610.31189" + y="284.99939" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-49);stroke-width:0.98503989;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-7-8-0" + width="46.100037" + height="41.821865" + x="544.77686" + y="224.75677" + rx="23.050018" + ry="19.496723" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="550.90131" + y="243.5219" + id="text5219-2-4-3-3-6"><tspan + sodipodi:role="line" + x="550.90131" + y="243.5219" + style="font-size:8.66666698px;line-height:1.25" + id="tspan1242-9">mt safe </tspan><tspan + sodipodi:role="line" + x="550.90131" + y="254.35522" + style="font-size:8.66666698px;line-height:1.25" + id="tspan6969"> tx?</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.65842497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.65842498, 1.65842498;stroke-dashoffset:0;stroke-opacity:1" + d="m 490.36981,185.5008 c 26.02242,0 52.04208,0 64.72658,-0.12632 12.68451,-0.12632 12.0325,-0.38057 11.38255,-0.63402" + id="path1938-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-7" + inkscape:original-d="m 490.36981,185.5008 c 26.02242,-0.001 52.04208,-0.001 78.05897,0 -0.64718,-0.25444 -1.94984,-0.76034 -1.94984,-0.76034" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:2.04590178;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.04590175, 2.04590175;stroke-dashoffset:0;stroke-opacity:0.95703125;marker-end:url(#EmptyTriangleOutM-0)" + d="m 566.4769,186.10953 c 0,12.17361 0,24.34874 0,36.52539" + id="path2656-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect2658-8" + inkscape:original-d="m 566.4769,186.10953 c 0.003,12.17361 0.003,24.34874 0,36.52539" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#358611;stroke-width:1.65842497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.65842498, 1.65842498;stroke-dashoffset:0;stroke-opacity:1" + d="m 492.46012,302.18293 c 26.02242,0 52.04208,0 64.72658,0.12632 12.68451,0.12632 12.0325,0.38057 11.38255,0.63402" + id="path1938-1-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1940-7-2" + inkscape:original-d="m 492.46012,302.18293 c 26.02242,10e-4 52.04208,10e-4 78.05897,0 -0.64718,0.25444 -1.94984,0.76034 -1.94984,0.76034" + sodipodi:nodetypes="ccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="620.28857" + y="239.64172" + id="text5219-2-3-7-7" + transform="scale(0.98989581,1.0102073)"><tspan + sodipodi:role="line" + x="620.28857" + y="239.64172" + id="tspan5223-0-6-5-1" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port 1</tspan><tspan + sodipodi:role="line" + x="620.28857" + y="250.43735" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15"> Txq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="621.00293" + y="186.44463" + id="text5219-2-3-7-7-9" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="621.00293" + y="186.44463" + id="tspan5223-0-6-5-1-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port 0</tspan><tspan + sodipodi:role="line" + x="621.00293" + y="197.24025" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-7"> Txq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="621.71729" + y="294.93872" + id="text5219-2-3-7-7-6" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="621.71729" + y="294.93872" + id="tspan5223-0-6-5-1-73" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499">eth port a</tspan><tspan + sodipodi:role="line" + x="621.71729" + y="305.73434" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-6"> Txq 0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-5)" + d="m 590.89557,246.52582 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-39" + inkscape:original-d="m 590.89557,246.52582 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-8)" + d="m 584.8092,262.55454 c 11.8346,6.14848 23.66883,12.29676 35.50269,18.44485" + id="path5226-6-6-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-2" + inkscape:original-d="m 584.8092,262.55454 c 11.83522,6.14728 23.66945,12.29556 35.50269,18.44485" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-8-3)" + d="m 582.8092,227.97785 c 11.8346,-6.14848 23.66883,-12.29676 35.50269,-18.44485" + id="path5226-6-6-9-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-2-0" + inkscape:original-d="m 582.8092,227.97785 c 11.83522,-6.14728 23.66945,-12.29556 35.50269,-18.44485" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:0.81462836;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.81462827, 0.81462827;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-8);marker-end:url(#marker3706-2-0)" + d="m 545.54392,254.17939 c -3.62648,-0.66909 -7.50276,0.13346 -10.56544,2.18747 -3.06268,2.05402 -5.2763,5.33572 -6.03357,8.94481 -0.75727,3.60909 -0.0494,7.50379 1.92933,10.61562 1.97877,3.11183 5.20555,5.40477 8.79511,6.24977 2.39256,0.56322 4.9306,0.49598 7.28998,-0.19314 2.35938,-0.68913 4.53461,-1.99853 6.24789,-3.76098 1.71328,-1.76245 2.96063,-3.97385 3.58274,-6.35178 0.62211,-2.37792 0.61753,-4.91685 -0.0131,-7.29252" + id="path14459-5-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-63" + inkscape:original-d="m 545.54392,254.17939 c -4.42306,-11.93362 -8.04324,66.84688 -5.87457,27.99767 2.57092,-46.05513 49.47586,-15.91888 17.10747,-17.59842" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + x="521.71185" + y="285.83926" + id="text5219-2-3-7-7-5" + transform="scale(0.98989583,1.0102073)"><tspan + sodipodi:role="line" + x="521.71185" + y="285.83926" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan883-15-1">Spin lock</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr a</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/testeventdev.rst b/doc/guides/tools/testeventdev.rst index 11e608b74..527798b3d 100644 --- a/doc/guides/tools/testeventdev.rst +++ b/doc/guides/tools/testeventdev.rst @@ -468,3 +468,177 @@ Example command to run perf ``all types queue`` test: sudo build/app/dpdk-test-eventdev --vdev=event_octeontx -- \ --test=perf_atq --plcores=2 --wlcore=3 --stlist=p --nb_pkts=0 + + +PIPELINE_QUEUE Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following: + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_queue_test: + +.. table:: Pipeline queue test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | (nb_producers | Queues will be configured based on the | + | | | * nb_stages) + | user requested sched type list(--stlist)| + | | | nb_producers | | + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_queue_test: + +.. figure:: img/eventdev_pipeline_queue_test.* + + pipeline queue test operation. + +The pipeline queue test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_queue_test`. + +The user can choose the number of workers and number of stages through the +``--wlcores`` and the ``--stlist`` application command line arguments +respectively. + +The number of producers depends on the number of ethernet devices detected and +each ethernet device is configured as a event_eth_rx_adapter that acts as a +producer. + +The producer(s) injects the events to eventdev based the first stage sched type +list requested by the user through ``--stlist`` the command line argument. + +Based on the number of stages to process(selected through ``--stlist``), +The application forwards the event to next upstream queue and when it reaches +the last stage in the pipeline if the event type is ``atomic`` it is enqueued +onto ethdev Tx queue else to maintain ordering the event type is set to +``atomic`` and enqueued onto the last stage queue. +On packet Tx, application increments the number events processed and print +periodically in one second to get the number of events processed in one +second. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=a + + +PIPELINE_ATQ Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following with +``all types queue`` eventdev scheme. + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_atq_test: + +.. table:: Pipeline atq test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | (nb_producers | Queues will be configured based on the | + | | | * nb_stages) | user requested sched type list(--stlist)| + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_atq_test: + +.. figure:: img/eventdev_pipeline_atq_test.* + + pipeline atq test operation. + +The pipeline atq test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_atq_test`. + +The atq queue test functions as same as ``pipeline_queue`` test. The difference +is, It uses, ``all type queue scheme`` instead of separate queues for each +stage and thus reduces the number of queues required to realize the use case. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=a -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs 2017-11-30 7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh ` (4 preceding siblings ...) 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 02/13] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh ` (11 more replies) 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (3 subsequent siblings) 9 siblings, 12 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add logs for packet distribution across worker cores to be printed along with the test results. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- v4 Changes: - remove Tx queue locking by using Tx service ml discussion : http://dpdk.org/ml/archives/dev/2018-January/086730.html v3 Changes: - Add SPDX licence tags - Redo atq test app/test-eventdev/evt_main.c | 3 +++ app/test-eventdev/test_perf_common.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c index 3c27f3216..57bb94570 100644 --- a/app/test-eventdev/evt_main.c +++ b/app/test-eventdev/evt_main.c @@ -29,6 +29,9 @@ signal_handler(int signum) rte_eal_mp_wait_lcore(); + if (test->ops.test_result) + test->ops.test_result(test, &opt); + if (test->ops.eventdev_destroy) test->ops.eventdev_destroy(test, &opt); diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c index e82cc9301..e279d81a5 100644 --- a/app/test-eventdev/test_perf_common.c +++ b/app/test-eventdev/test_perf_common.c @@ -8,8 +8,20 @@ int perf_test_result(struct evt_test *test, struct evt_options *opt) { RTE_SET_USED(opt); + int i; + uint64_t total = 0; struct test_perf *t = evt_test_priv(test); + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 02/13] app/eventdev: add pipeline test setup and destroy 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 03/13] app/eventdev: add mempool " Pavan Nikhilesh ` (10 subsequent siblings) 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Pipeline test has the queue and all types queue variants. Introduce test_pipeline_common* to share the common code between those tests. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-eventdev/Makefile | 2 ++ app/test-eventdev/test_pipeline_common.c | 44 ++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 57 ++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_common.c create mode 100644 app/test-eventdev/test_pipeline_common.h diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index cfe567a6d..1707318f2 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -25,4 +25,6 @@ SRCS-y += test_perf_common.c SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c +SRCS-y += test_pipeline_common.c + include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c new file mode 100644 index 000000000..aa3481247 --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.c @@ -0,0 +1,44 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +int +pipeline_test_setup(struct evt_test *test, struct evt_options *opt) +{ + void *test_pipeline; + + test_pipeline = rte_zmalloc_socket(test->name, + sizeof(struct test_pipeline), RTE_CACHE_LINE_SIZE, + opt->socket_id); + if (test_pipeline == NULL) { + evt_err("failed to allocate test_pipeline memory"); + goto nomem; + } + test->test_priv = test_pipeline; + + struct test_pipeline *t = evt_test_priv(test); + + t->nb_workers = evt_nr_active_lcores(opt->wlcores); + t->outstand_pkts = opt->nb_pkts * evt_nr_active_lcores(opt->wlcores); + t->done = false; + t->nb_flows = opt->nb_flows; + t->result = EVT_TEST_FAILED; + t->opt = opt; + opt->prod_type = EVT_PROD_TYPE_ETH_RX_ADPTR; + memcpy(t->sched_type_list, opt->sched_type_list, + sizeof(opt->sched_type_list)); + return 0; +nomem: + return -ENOMEM; +} + +void +pipeline_test_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + + rte_free(test->test_priv); +} diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h new file mode 100644 index 000000000..645571cf5 --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.h @@ -0,0 +1,57 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#ifndef _TEST_PIPELINE_COMMON_ +#define _TEST_PIPELINE_COMMON_ + +#include <stdio.h> +#include <stdbool.h> +#include <unistd.h> + +#include <rte_cycles.h> +#include <rte_ethdev.h> +#include <rte_eventdev.h> +#include <rte_event_eth_rx_adapter.h> +#include <rte_lcore.h> +#include <rte_malloc.h> +#include <rte_mempool.h> +#include <rte_prefetch.h> +#include <rte_spinlock.h> + +#include "evt_common.h" +#include "evt_options.h" +#include "evt_test.h" + +struct test_pipeline; + +struct worker_data { + uint64_t processed_pkts; + uint8_t dev_id; + uint8_t port_id; + struct test_pipeline *t; +} __rte_cache_aligned; + +struct test_pipeline { + /* Don't change the offset of "done". Signal handler use this memory + * to terminate all lcores work. + */ + int done; + uint8_t nb_workers; + uint8_t mt_unsafe; + enum evt_test_result result; + uint32_t nb_flows; + uint64_t outstand_pkts; + struct rte_mempool *pool; + struct worker_data worker[EVT_MAX_PORTS]; + struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; + rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS]; + struct evt_options *opt; + uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; +} __rte_cache_aligned; + +int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); + +#endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 03/13] app/eventdev: add mempool setup and destroy 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 02/13] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 04/13] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh ` (9 subsequent siblings) 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 29 +++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index aa3481247..ff60fc36c 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,35 @@ #include "test_pipeline_common.h" +int +pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + t->pool = rte_pktmbuf_pool_create(test->name, /* mempool name */ + opt->pool_sz, /* number of elements*/ + 512, /* cache size*/ + 0, + RTE_MBUF_DEFAULT_BUF_SIZE, + opt->socket_id); /* flags */ + + if (t->pool == NULL) { + evt_err("failed to create mempool"); + return -ENOMEM; + } + + return 0; +} + +void +pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + struct test_pipeline *t = evt_test_priv(test); + + rte_mempool_free(t->pool); +} + int pipeline_test_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 645571cf5..569db1de5 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -52,6 +52,8 @@ struct test_pipeline { } __rte_cache_aligned; int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 04/13] app/eventdev: add pipeline opt dump and check functions 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 02/13] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 03/13] app/eventdev: add mempool " Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-16 11:54 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 05/13] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh ` (8 subsequent siblings) 11 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 84 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 ++ 2 files changed, 87 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index ff60fc36c..45e0652b8 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,90 @@ #include "test_pipeline_common.h" +int +pipeline_test_result(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + int i; + uint64_t total = 0; + struct test_pipeline *t = evt_test_priv(test); + + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; +} + +void +pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) +{ + evt_dump("nb_worker_lcores", "%d", evt_nr_active_lcores(opt->wlcores)); + evt_dump_worker_lcores(opt); + evt_dump_nb_stages(opt); + evt_dump("nb_evdev_ports", "%d", pipeline_nb_event_ports(opt)); + evt_dump("nb_evdev_queues", "%d", nb_queues); + evt_dump_queue_priority(opt); + evt_dump_sched_type_list(opt); + evt_dump_producer_type(opt); +} + +int +pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) +{ + unsigned int lcores; + /* + * N worker + 1 master + */ + lcores = 2; + + if (!rte_eth_dev_count()) { + evt_err("test needs minimum 1 ethernet dev"); + return -1; + } + + if (rte_lcore_count() < lcores) { + evt_err("test need minimum %d lcores", lcores); + return -1; + } + + /* Validate worker lcores */ + if (evt_lcores_has_overlap(opt->wlcores, rte_get_master_lcore())) { + evt_err("worker lcores overlaps with master lcore"); + return -1; + } + if (evt_has_disabled_lcore(opt->wlcores)) { + evt_err("one or more workers lcores are not enabled"); + return -1; + } + if (!evt_has_active_lcore(opt->wlcores)) { + evt_err("minimum one worker is required"); + return -1; + } + + if (nb_queues > EVT_MAX_QUEUES) { + evt_err("number of queues exceeds %d", EVT_MAX_QUEUES); + return -1; + } + if (pipeline_nb_event_ports(opt) > EVT_MAX_PORTS) { + evt_err("number of ports exceeds %d", EVT_MAX_PORTS); + return -1; + } + + if (evt_has_invalid_stage(opt)) + return -1; + + if (evt_has_invalid_sched_type(opt)) + return -1; + + return 0; +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 569db1de5..6e43eea2b 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -51,8 +51,11 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +int pipeline_test_result(struct evt_test *test, struct evt_options *opt); +int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 04/13] app/eventdev: add pipeline opt dump and check functions 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 04/13] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh @ 2018-01-16 11:54 ` Van Haaren, Harry 2018-01-17 17:19 ` Jerin Jacob 0 siblings, 1 reply; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-16 11:54 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Friday, January 12, 2018 4:44 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v4 04/13] app/eventdev: add pipeline opt dump and > check functions > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 04/13] app/eventdev: add pipeline opt dump and check functions 2018-01-16 11:54 ` Van Haaren, Harry @ 2018-01-17 17:19 ` Jerin Jacob 0 siblings, 0 replies; 122+ messages in thread From: Jerin Jacob @ 2018-01-17 17:19 UTC (permalink / raw) To: Van Haaren, Harry Cc: Pavan Nikhilesh, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J, dev -----Original Message----- > Date: Tue, 16 Jan 2018 11:54:18 +0000 > From: "Van Haaren, Harry" <harry.van.haaren@intel.com> > To: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>, > "jerin.jacob@caviumnetworks.com" <jerin.jacob@caviumnetworks.com>, > "santosh.shukla@caviumnetworks.com" <santosh.shukla@caviumnetworks.com>, > "Eads, Gage" <gage.eads@intel.com>, "hemant.agrawal@nxp.com" > <hemant.agrawal@nxp.com>, "nipun.gupta@nxp.com" <nipun.gupta@nxp.com>, > "Ma, Liang J" <liang.j.ma@intel.com> > CC: "dev@dpdk.org" <dev@dpdk.org> > Subject: RE: [dpdk-dev] [PATCH v4 04/13] app/eventdev: add pipeline opt > dump and check functions > > > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > > Sent: Friday, January 12, 2018 4:44 PM > > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > > Liang J <liang.j.ma@intel.com> > > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > Subject: [dpdk-dev] [PATCH v4 04/13] app/eventdev: add pipeline opt dump and > > check functions > > > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > Acked-by: Harry van Haaren <harry.van.haaren@intel.com> Applied v7 series to dpdk-next-eventdev/master. Thanks. ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 05/13] app/eventdev: add pipeline ethport setup and destroy 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (2 preceding siblings ...) 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 04/13] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-16 11:54 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 06/13] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh ` (7 subsequent siblings) 11 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add common ethdev port setup and destroy along with event dev destroy. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 91 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 ++ 2 files changed, 94 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 45e0652b8..c20815c25 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -89,6 +89,97 @@ pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) return 0; } +#define NB_RX_DESC 128 +#define NB_TX_DESC 512 +int +pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int i; + uint8_t nb_queues = 1; + uint8_t mt_state = 0; + struct test_pipeline *t = evt_test_priv(test); + struct rte_eth_rxconf rx_conf; + struct rte_eth_conf port_conf = { + .rxmode = { + .mq_mode = ETH_MQ_RX_RSS, + .max_rx_pkt_len = ETHER_MAX_LEN, + .offloads = DEV_RX_OFFLOAD_CRC_STRIP, + .ignore_offload_bitfield = 1, + }, + .rx_adv_conf = { + .rss_conf = { + .rss_key = NULL, + .rss_hf = ETH_RSS_IP, + }, + }, + }; + + RTE_SET_USED(opt); + if (!rte_eth_dev_count()) { + evt_err("No ethernet ports found.\n"); + return -ENODEV; + } + + for (i = 0; i < rte_eth_dev_count(); i++) { + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(struct rte_eth_dev_info)); + rte_eth_dev_info_get(i, &dev_info); + mt_state = !(dev_info.tx_offload_capa & + DEV_TX_OFFLOAD_MT_LOCKFREE); + rx_conf = dev_info.default_rxconf; + rx_conf.offloads = port_conf.rxmode.offloads; + + if (rte_eth_dev_configure(i, nb_queues, nb_queues, + &port_conf) + < 0) { + evt_err("Failed to configure eth port [%d]\n", i); + return -EINVAL; + } + + if (rte_eth_rx_queue_setup(i, 0, NB_RX_DESC, + rte_socket_id(), &rx_conf, t->pool) < 0) { + evt_err("Failed to setup eth port [%d] rx_queue: %d.\n", + i, 0); + return -EINVAL; + } + if (rte_eth_tx_queue_setup(i, 0, NB_TX_DESC, + rte_socket_id(), NULL) < 0) { + evt_err("Failed to setup eth port [%d] tx_queue: %d.\n", + i, 0); + return -EINVAL; + } + + t->mt_unsafe |= mt_state; + rte_eth_promiscuous_enable(i); + } + + return 0; +} + +void +pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + int i; + RTE_SET_USED(test); + RTE_SET_USED(opt); + + for (i = 0; i < rte_eth_dev_count(); i++) { + rte_event_eth_rx_adapter_stop(i); + rte_eth_dev_stop(i); + rte_eth_dev_close(i); + } +} + +void +pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(test); + + rte_event_dev_stop(opt->dev_id); + rte_event_dev_close(opt->dev_id); +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 6e43eea2b..d8ab797bb 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -54,9 +54,12 @@ struct test_pipeline { int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 05/13] app/eventdev: add pipeline ethport setup and destroy 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 05/13] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh @ 2018-01-16 11:54 ` Van Haaren, Harry 0 siblings, 0 replies; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-16 11:54 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Friday, January 12, 2018 4:44 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v4 05/13] app/eventdev: add pipeline ethport > setup and destroy > > Add common ethdev port setup and destroy along with event dev destroy. > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 06/13] app/eventdev: add event port setup and Rx adapter setup 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (3 preceding siblings ...) 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 05/13] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-16 11:54 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 07/13] app/eventdev: add Tx service setup Pavan Nikhilesh ` (6 subsequent siblings) 11 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Setup one port per worker and link to all queues and setup producer port based on Rx adapter capabilities. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 114 +++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 5 ++ 2 files changed, 119 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index c20815c25..63f54daef 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -157,6 +157,120 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) return 0; } +int +pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint8_t *queue_arr, uint8_t nb_queues, + const struct rte_event_port_conf p_conf) +{ + int i; + int ret; + uint8_t port; + struct test_pipeline *t = evt_test_priv(test); + + + /* setup one port per worker, linking to all queues */ + for (port = 0; port < evt_nr_active_lcores(opt->wlcores); port++) { + struct worker_data *w = &t->worker[port]; + + w->dev_id = opt->dev_id; + w->port_id = port; + w->t = t; + w->processed_pkts = 0; + + ret = rte_event_port_setup(opt->dev_id, port, &p_conf); + if (ret) { + evt_err("failed to setup port %d", port); + return ret; + } + + if (queue_arr == NULL) { + if (rte_event_port_link(opt->dev_id, port, NULL, NULL, + 0) != nb_queues) + goto link_fail; + } else { + for (i = 0; i < nb_queues; i++) { + if (rte_event_port_link(opt->dev_id, port, + &queue_arr[i], NULL, 1) != 1) + goto link_fail; + } + } + } + + return 0; + +link_fail: + evt_err("failed to link all queues to port %d", port); + return -EINVAL; +} + +int +pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf) +{ + int ret = 0; + uint16_t prod; + struct rte_event_eth_rx_adapter_queue_conf queue_conf; + + memset(&queue_conf, 0, + sizeof(struct rte_event_eth_rx_adapter_queue_conf)); + queue_conf.ev.sched_type = opt->sched_type_list[0]; + for (prod = 0; prod < rte_eth_dev_count(); prod++) { + uint32_t cap; + + ret = rte_event_eth_rx_adapter_caps_get(opt->dev_id, + prod, &cap); + if (ret) { + evt_err("failed to get event rx adapter[%d]" + " capabilities", + opt->dev_id); + return ret; + } + queue_conf.ev.queue_id = prod * stride; + ret = rte_event_eth_rx_adapter_create(prod, opt->dev_id, + &prod_conf); + if (ret) { + evt_err("failed to create rx adapter[%d]", prod); + return ret; + } + ret = rte_event_eth_rx_adapter_queue_add(prod, prod, -1, + &queue_conf); + if (ret) { + evt_err("failed to add rx queues to adapter[%d]", prod); + return ret; + } + + if (!(cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT)) { + uint32_t service_id; + + rte_event_eth_rx_adapter_service_id_get(prod, + &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("Failed to setup service core" + " for Rx adapter\n"); + return ret; + } + } + + ret = rte_eth_dev_start(prod); + if (ret) { + evt_err("Ethernet dev [%d] failed to start." + " Using synthetic producer", prod); + return ret; + } + + ret = rte_event_eth_rx_adapter_start(prod); + if (ret) { + evt_err("Rx adapter[%d] start failed", prod); + return ret; + } + printf("%s: Port[%d] using Rx adapter[%d] started\n", __func__, + prod, prod); + } + + return ret; +} + void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index d8ab797bb..f8c46c0d7 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -55,7 +55,12 @@ int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint8_t *queue_arr, uint8_t nb_queues, + const struct rte_event_port_conf p_conf); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 06/13] app/eventdev: add event port setup and Rx adapter setup 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 06/13] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh @ 2018-01-16 11:54 ` Van Haaren, Harry 0 siblings, 0 replies; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-16 11:54 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Friday, January 12, 2018 4:44 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v4 06/13] app/eventdev: add event port setup and > Rx adapter setup > > Setup one port per worker and link to all queues and setup producer port > based on Rx adapter capabilities. > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 07/13] app/eventdev: add Tx service setup 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (4 preceding siblings ...) 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 06/13] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-16 11:57 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 08/13] app/eventdev: launch pipeline lcores Pavan Nikhilesh ` (5 subsequent siblings) 11 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Setup one port event port for Tx and link the respective event queue. Register the Tx function as a service to be called from a service core. The Tx function dequeues the events from the event queue and transmits the packet to its respective ethernet port. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 119 +++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 19 ++++- 2 files changed, 136 insertions(+), 2 deletions(-) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 63f54daef..98df423ae 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,58 @@ #include "test_pipeline_common.h" +static int32_t +pipeline_event_tx_burst_service_func(void *args) +{ + + int i; + struct tx_service_data *tx = args; + const uint8_t dev = tx->dev_id; + const uint8_t port = tx->port_id; + struct rte_event ev[BURST_SIZE + 1]; + + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, BURST_SIZE, 0); + + if (!nb_rx) { + for (i = 0; i < tx->nb_ethports; i++) + rte_eth_tx_buffer_flush(i, 0, tx->tx_buf[i]); + return 0; + } + + for (i = 0; i < nb_rx; i++) { + struct rte_mbuf *m = ev[i].mbuf; + rte_eth_tx_buffer(m->port, 0, tx->tx_buf[m->port], m); + } + tx->processed_pkts += nb_rx; + + return 0; +} + +static int32_t +pipeline_event_tx_service_func(void *args) +{ + + int i; + struct tx_service_data *tx = args; + const uint8_t dev = tx->dev_id; + const uint8_t port = tx->port_id; + struct rte_event ev; + + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!nb_rx) { + for (i = 0; i < tx->nb_ethports; i++) + rte_eth_tx_buffer_flush(i, 0, tx->tx_buf[i]); + return 0; + } + + struct rte_mbuf *m = ev.mbuf; + rte_eth_tx_buffer(m->port, 0, tx->tx_buf[m->port], m); + tx->processed_pkts++; + + return 0; +} + int pipeline_test_result(struct evt_test *test, struct evt_options *opt) { @@ -151,6 +203,10 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) } t->mt_unsafe |= mt_state; + t->tx_service.tx_buf[i] = + rte_malloc(NULL, RTE_ETH_TX_BUFFER_SIZE(BURST_SIZE), 0); + if (t->tx_service.tx_buf[i] == NULL) + rte_panic("Unable to allocate Tx buffer memory."); rte_eth_promiscuous_enable(i); } @@ -271,12 +327,75 @@ pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, return ret; } +int +pipeline_event_tx_service_setup(struct evt_test *test, struct evt_options *opt, + uint8_t tx_queue_id, uint8_t tx_port_id, + const struct rte_event_port_conf p_conf) +{ + int ret; + struct rte_service_spec serv; + struct test_pipeline *t = evt_test_priv(test); + struct tx_service_data *tx = &t->tx_service; + + ret = rte_event_port_setup(opt->dev_id, tx_port_id, &p_conf); + if (ret) { + evt_err("failed to setup port %d", tx_port_id); + return ret; + } + + if (rte_event_port_link(opt->dev_id, tx_port_id, &tx_queue_id, + NULL, 1) != 1) { + evt_err("failed to link queues to port %d", tx_port_id); + return -EINVAL; + } + + tx->dev_id = opt->dev_id; + tx->queue_id = tx_queue_id; + tx->port_id = tx_port_id; + tx->nb_ethports = rte_eth_dev_count(); + tx->t = t; + + /* Register Tx service */ + memset(&serv, 0, sizeof(struct rte_service_spec)); + snprintf(serv.name, sizeof(serv.name), "Tx_service"); + + if (evt_has_burst_mode(opt->dev_id)) + serv.callback = pipeline_event_tx_burst_service_func; + else + serv.callback = pipeline_event_tx_service_func; + + serv.callback_userdata = (void *)tx; + ret = rte_service_component_register(&serv, &tx->service_id); + if (ret) { + evt_err("failed to register Tx service"); + return ret; + } + + ret = evt_service_setup(tx->service_id); + if (ret) { + evt_err("Failed to setup service core for Tx service\n"); + return ret; + } + + rte_service_runstate_set(tx->service_id, 1); + + return 0; +} + + void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) { int i; RTE_SET_USED(test); RTE_SET_USED(opt); + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) { + rte_service_component_runstate_set(t->tx_service.service_id, 0); + rte_service_runstate_set(t->tx_service.service_id, 0); + rte_service_component_unregister(t->tx_service.service_id); + } for (i = 0; i < rte_eth_dev_count(); i++) { rte_event_eth_rx_adapter_stop(i); diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index f8c46c0d7..acbf688fb 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -19,6 +19,8 @@ #include <rte_mempool.h> #include <rte_prefetch.h> #include <rte_spinlock.h> +#include <rte_service.h> +#include <rte_service_component.h> #include "evt_common.h" #include "evt_options.h" @@ -33,6 +35,17 @@ struct worker_data { struct test_pipeline *t; } __rte_cache_aligned; +struct tx_service_data { + uint8_t dev_id; + uint8_t queue_id; + uint8_t port_id; + uint32_t service_id; + uint64_t processed_pkts; + uint16_t nb_ethports; + struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; + struct test_pipeline *t; +} __rte_cache_aligned; + struct test_pipeline { /* Don't change the offset of "done". Signal handler use this memory * to terminate all lcores work. @@ -45,8 +58,7 @@ struct test_pipeline { uint64_t outstand_pkts; struct rte_mempool *pool; struct worker_data worker[EVT_MAX_PORTS]; - struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; - rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS]; + struct tx_service_data tx_service; struct evt_options *opt; uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; @@ -57,6 +69,9 @@ int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, struct rte_event_port_conf prod_conf); +int pipeline_event_tx_service_setup(struct evt_test *test, + struct evt_options *opt, uint8_t tx_queue_id, + uint8_t tx_port_id, const struct rte_event_port_conf p_conf); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, uint8_t *queue_arr, uint8_t nb_queues, -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 07/13] app/eventdev: add Tx service setup 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 07/13] app/eventdev: add Tx service setup Pavan Nikhilesh @ 2018-01-16 11:57 ` Van Haaren, Harry 0 siblings, 0 replies; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-16 11:57 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Friday, January 12, 2018 4:44 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v4 07/13] app/eventdev: add Tx service setup > > Setup one port event port for Tx and link the respective event queue. > Register the Tx function as a service to be called from a service core. > The Tx function dequeues the events from the event queue and transmits > the packet to its respective ethernet port. > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Just a comment below - no changes required. Acked-by: Harry van Haaren <harry.van.haaren@intel.com> > +int > +pipeline_event_tx_service_setup(struct evt_test *test, struct evt_options > *opt, > + uint8_t tx_queue_id, uint8_t tx_port_id, > + const struct rte_event_port_conf p_conf) > +{ <snip ... > > + /* Register Tx service */ > + memset(&serv, 0, sizeof(struct rte_service_spec)); > + snprintf(serv.name, sizeof(serv.name), "Tx_service"); > + > + if (evt_has_burst_mode(opt->dev_id)) > + serv.callback = pipeline_event_tx_burst_service_func; > + else > + serv.callback = pipeline_event_tx_service_func; > + > + serv.callback_userdata = (void *)tx; > + ret = rte_service_component_register(&serv, &tx->service_id); > + if (ret) { > + evt_err("failed to register Tx service"); > + return ret; > + } > + > + ret = evt_service_setup(tx->service_id); > + if (ret) { > + evt_err("Failed to setup service core for Tx service\n"); > + return ret; > + } > + > + rte_service_runstate_set(tx->service_id, 1); It looks like the code above never sets the "component runstate" to indicate that the TX service itself is in a runnable state. This setting of the runstate is performed later in the setup process, when launching cores. ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 08/13] app/eventdev: launch pipeline lcores 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (5 preceding siblings ...) 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 07/13] app/eventdev: add Tx service setup Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-16 11:57 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 09/13] app/eventdev: add pipeline queue test Pavan Nikhilesh ` (4 subsequent siblings) 11 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh The event master lcore's test termination and the logic to print the mpps are common for the queue and all types queue test. Move them as the common function. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 67 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 + 2 files changed, 69 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 98df423ae..6cad9357b 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -90,6 +90,73 @@ pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) evt_dump_producer_type(opt); } +static inline uint64_t +processed_pkts(struct test_pipeline *t) +{ + uint8_t i; + uint64_t total = 0; + + rte_smp_rmb(); + if (t->mt_unsafe) + total = t->tx_service.processed_pkts; + else + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + + return total; +} + +int +pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)) +{ + int ret, lcore_id; + struct test_pipeline *t = evt_test_priv(test); + + int port_idx = 0; + /* launch workers */ + RTE_LCORE_FOREACH_SLAVE(lcore_id) { + if (!(opt->wlcores[lcore_id])) + continue; + + ret = rte_eal_remote_launch(worker, + &t->worker[port_idx], lcore_id); + if (ret) { + evt_err("failed to launch worker %d", lcore_id); + return ret; + } + port_idx++; + } + + uint64_t perf_cycles = rte_get_timer_cycles(); + const uint64_t perf_sample = rte_get_timer_hz(); + + static float total_mpps; + static uint64_t samples; + + uint64_t prev_pkts = 0; + + while (t->done == false) { + const uint64_t new_cycles = rte_get_timer_cycles(); + + if ((new_cycles - perf_cycles) > perf_sample) { + const uint64_t curr_pkts = processed_pkts(t); + + float mpps = (float)(curr_pkts - prev_pkts)/1000000; + + prev_pkts = curr_pkts; + perf_cycles = new_cycles; + total_mpps += mpps; + ++samples; + printf(CLGRN"\r%.3f mpps avg %.3f mpps"CLNRM, + mpps, total_mpps/samples); + fflush(stdout); + } + } + printf("\n"); + return 0; +} + int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index acbf688fb..db2517baf 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -76,6 +76,8 @@ int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, uint8_t *queue_arr, uint8_t nb_queues, const struct rte_event_port_conf p_conf); +int pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 08/13] app/eventdev: launch pipeline lcores 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 08/13] app/eventdev: launch pipeline lcores Pavan Nikhilesh @ 2018-01-16 11:57 ` Van Haaren, Harry 0 siblings, 0 replies; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-16 11:57 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Friday, January 12, 2018 4:44 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v4 08/13] app/eventdev: launch pipeline lcores > > The event master lcore's test termination and the logic to print the mpps > are common for the queue and all types queue test. > > Move them as the common function. > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 09/13] app/eventdev: add pipeline queue test 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (6 preceding siblings ...) 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 08/13] app/eventdev: launch pipeline lcores Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-16 11:58 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 10/13] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh ` (3 subsequent siblings) 11 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline queue test case that aims at testing the following: 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The pipeline queue test configures the eventdev with Q queues and P ports, where Q is (nb_ethdev * nb_stages) + nb_ethdev and P is nb_workers. The user can choose the number of workers and number of stages through the --wlcores and the --stlist application command line arguments respectively. The probed ethernet devices act as producer(s) for this application. The ethdevs are configured as event Rx adapters that enables them to injects events to eventdev based the first stage schedule type list requested by the user through --stlist the command line argument. Based on the number of stages to process(selected through --stlist), the application forwards the event to next upstream queue and when it reaches last stage in the pipeline if the event type is ATOMIC it is enqueued onto ethdev Tx queue else to maintain ordering the event type is set to ATOMIC and enqueued onto the last stage queue. On packet Tx, application increments the number events processed and print periodically in one second to get the number of events processed in one second. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline queue test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_queue.c | 237 ++++++++++++++++++++++++++++++++ 2 files changed, 238 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_queue.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index 1707318f2..94b489f41 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -26,5 +26,6 @@ SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c +SRCS-y += test_pipeline_queue.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c new file mode 100644 index 000000000..773c3ecaa --- /dev/null +++ b/app/test-eventdev/test_pipeline_queue.c @@ -0,0 +1,237 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_queue_nb_event_queues(struct evt_options *opt) +{ + uint16_t eth_count = rte_eth_dev_count(); + + return (eth_count * opt->nb_stages) + eth_count; +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_queue_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) + rte_service_component_runstate_set(t->tx_service.service_id, 1); + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + int nb_stages = opt->nb_stages; + uint8_t queue; + struct rte_event_dev_info info; + struct test_pipeline *t = evt_test_priv(test); + uint8_t tx_evqueue_id = 0; + uint8_t queue_arr[RTE_EVENT_MAX_QUEUES_PER_DEV]; + uint8_t nb_worker_queues = 0; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count() * (nb_stages); + + /* Extra port for Tx service. */ + if (t->mt_unsafe) { + tx_evqueue_id = nb_queues; + nb_ports++; + nb_queues++; + } else + nb_queues += rte_eth_dev_count(); + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + uint8_t slot; + + if (!t->mt_unsafe) { + slot = queue % (nb_stages + 1); + q_conf.schedule_type = slot == nb_stages ? + RTE_SCHED_TYPE_ATOMIC : + opt->sched_type_list[slot]; + } else { + slot = queue % nb_stages; + + if (queue == tx_evqueue_id) { + q_conf.schedule_type = RTE_SCHED_TYPE_ATOMIC; + q_conf.event_queue_cfg = + RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + } else { + q_conf.schedule_type = + opt->sched_type_list[slot]; + queue_arr[nb_worker_queues] = queue; + nb_worker_queues++; + } + } + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + /* + * If tx is multi thread safe then allow workers to do Tx else use Tx + * service to Tx packets. + */ + if (t->mt_unsafe) { + ret = pipeline_event_port_setup(test, opt, queue_arr, + nb_worker_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_tx_service_setup(test, opt, tx_evqueue_id, + nb_ports - 1, p_conf); + + } else + ret = pipeline_event_port_setup(test, opt, NULL, nb_queues, + p_conf); + + if (ret) + return ret; + /* + * The pipelines are setup in the following manner: + * + * eth_dev_count = 2, nb_stages = 2. + * + * Multi thread safe : + * queues = 6 + * stride = 3 + * + * event queue pipelines: + * eth0 -> q0 -> q1 -> (q2->tx) + * eth1 -> q3 -> q4 -> (q5->tx) + * + * q2, q5 configured as ATOMIC + * + * Multi thread unsafe : + * queues = 5 + * stride = 2 + * + * event queue pipelines: + * eth0 -> q0 -> q1 + * } (q4->tx) Tx service + * eth1 -> q2 -> q3 + * + * q4 configured as SINGLE_LINK|ATOMIC + */ + ret = pipeline_event_rx_adapter_setup(opt, + t->mt_unsafe ? nb_stages : nb_stages + 1, p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_queue_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_queue_nb_event_queues(opt)); +} + +static int +pipeline_queue_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_queue_nb_event_queues(opt)); +} + +static bool +pipeline_queue_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_queue_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_queue_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_queue = { + .cap_check = pipeline_queue_capability_check, + .opt_check = pipeline_queue_opt_check, + .opt_dump = pipeline_queue_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_queue_eventdev_setup, + .launch_lcores = pipeline_queue_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_queue); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 09/13] app/eventdev: add pipeline queue test 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 09/13] app/eventdev: add pipeline queue test Pavan Nikhilesh @ 2018-01-16 11:58 ` Van Haaren, Harry 0 siblings, 0 replies; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-16 11:58 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Friday, January 12, 2018 4:44 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v4 09/13] app/eventdev: add pipeline queue test > > This is a pipeline queue test case that aims at testing the following: > 1. Measure the end-to-end performance of an event dev with a ethernet dev. > 2. Maintain packet ordering from Rx to Tx. > > The pipeline queue test configures the eventdev with Q queues and P ports, > where Q is (nb_ethdev * nb_stages) + nb_ethdev and P is nb_workers. > > The user can choose the number of workers and number of stages through the > --wlcores and the --stlist application command line arguments respectively. > The probed ethernet devices act as producer(s) for this application. > > The ethdevs are configured as event Rx adapters that enables them to > injects events to eventdev based the first stage schedule type list > requested by the user through --stlist the command line argument. > > Based on the number of stages to process(selected through --stlist), > the application forwards the event to next upstream queue and when it > reaches last stage in the pipeline if the event type is ATOMIC it is > enqueued onto ethdev Tx queue else to maintain ordering the event type is > set to ATOMIC and enqueued onto the last stage queue. > On packet Tx, application increments the number events processed and print > periodically in one second to get the number of events processed in one > second. > > Note: The --prod_type_ethdev is mandatory for running the application. > > Example command to run pipeline queue test: > sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ > --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=ao > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 10/13] app/eventdev: add pipeline queue worker functions 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (7 preceding siblings ...) 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 09/13] app/eventdev: add pipeline queue test Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-16 12:05 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 11/13] app/eventdev: add pipeline atq test Pavan Nikhilesh ` (2 subsequent siblings) 11 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.h | 80 +++++++++ app/test-eventdev/test_pipeline_queue.c | 289 ++++++++++++++++++++++++++++++- 2 files changed, 368 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index db2517baf..5fb91607d 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -63,6 +63,86 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +#define BURST_SIZE 16 + +#define PIPELINE_WROKER_SINGLE_STAGE_INIT \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + struct rte_event ev + +#define PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT \ + int i; \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + struct rte_event ev[BURST_SIZE + 1] + +#define PIPELINE_WROKER_MULTI_STAGE_INIT \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + uint8_t cq_id; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + const uint8_t last_queue = t->opt->nb_stages - 1; \ + uint8_t *const sched_type_list = &t->sched_type_list[0]; \ + struct rte_event ev + +#define PIPELINE_WROKER_MULTI_STAGE_BURST_INIT \ + int i; \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + uint8_t cq_id; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + const uint8_t last_queue = t->opt->nb_stages - 1; \ + uint8_t *const sched_type_list = &t->sched_type_list[0]; \ + struct rte_event ev[BURST_SIZE + 1] + +static __rte_always_inline void +pipeline_fwd_event(struct rte_event *ev, uint8_t sched) +{ + ev->event_type = RTE_EVENT_TYPE_CPU; + ev->op = RTE_EVENT_OP_FORWARD; + ev->sched_type = sched; +} + +static __rte_always_inline void +pipeline_event_enqueue(const uint8_t dev, const uint8_t port, + struct rte_event *ev) +{ + while (rte_event_enqueue_burst(dev, port, ev, 1) != 1) + rte_pause(); +} + +static __rte_always_inline void +pipeline_event_enqueue_burst(const uint8_t dev, const uint8_t port, + struct rte_event *ev, const uint16_t nb_rx) +{ + uint16_t enq; + + enq = rte_event_enqueue_burst(dev, port, ev, nb_rx); + while (enq < nb_rx) { + enq += rte_event_enqueue_burst(dev, port, + ev + enq, nb_rx - enq); + } +} + +static __rte_always_inline void +pipeline_tx_pkt(struct rte_mbuf *mbuf) +{ + while (rte_eth_tx_burst(mbuf->port, 0, &mbuf, 1) != 1) + rte_pause(); +} + +static inline int +pipeline_nb_event_ports(struct evt_options *opt) +{ + return evt_nr_active_lcores(opt->wlcores); +} + int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c index 773c3ecaa..ea784d2c6 100644 --- a/app/test-eventdev/test_pipeline_queue.c +++ b/app/test-eventdev/test_pipeline_queue.c @@ -15,10 +15,297 @@ pipeline_queue_nb_event_queues(struct evt_options *opt) return (eth_count * opt->nb_stages) + eth_count; } +static int +pipeline_queue_worker_single_stage_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + w->processed_pkts++; + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + + +static int +pipeline_queue_worker_multi_stage_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + ev.queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id == last_queue) { + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + ev[i].queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id == last_queue) { + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + /* allow compiler to optimize */ + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_queue_worker_single_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_single_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_queue_worker_single_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_single_stage_burst_fwd( + arg); + } else { + if (!burst && mt_safe) + return pipeline_queue_worker_multi_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_multi_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_queue_worker_multi_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_multi_stage_burst_fwd(arg); + + } rte_panic("invalid worker\n"); } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 10/13] app/eventdev: add pipeline queue worker functions 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 10/13] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh @ 2018-01-16 12:05 ` Van Haaren, Harry 2018-01-16 12:31 ` Pavan Nikhilesh 0 siblings, 1 reply; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-16 12:05 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Friday, January 12, 2018 4:44 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v4 10/13] app/eventdev: add pipeline queue worker > functions > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Some of the code feels like duplication - but there are differences in each implementation as far as I can see. The common initialization parts are "macro-ed" to ensure minimal duplication. In short, I'm not aware of a better solution/implementation. Please see note on branch-optimization in the code below. Acked-by: Harry van Haaren <harry.van.haaren@intel.com> > static int > worker_wrapper(void *arg) > { > - RTE_SET_USED(arg); > + struct worker_data *w = arg; > + struct evt_options *opt = w->t->opt; > + const bool burst = evt_has_burst_mode(w->dev_id); > + const bool mt_safe = !w->t->mt_unsafe; > + const uint8_t nb_stages = opt->nb_stages; > + RTE_SET_USED(opt); > + > + /* allow compiler to optimize */ > + if (nb_stages == 1) { > + if (!burst && mt_safe) > + return pipeline_queue_worker_single_stage_tx(arg); > + else if (!burst && !mt_safe) > + return pipeline_queue_worker_single_stage_fwd(arg); > + else if (burst && mt_safe) > + return pipeline_queue_worker_single_stage_burst_tx(arg); > + else if (burst && !mt_safe) > + return pipeline_queue_worker_single_stage_burst_fwd( > + arg); > + } else { > + if (!burst && mt_safe) > + return pipeline_queue_worker_multi_stage_tx(arg); > + else if (!burst && !mt_safe) > + return pipeline_queue_worker_multi_stage_fwd(arg); > + else if (burst && mt_safe) > + return pipeline_queue_worker_multi_stage_burst_tx(arg); > + else if (burst && !mt_safe) > + return pipeline_queue_worker_multi_stage_burst_fwd(arg); > + > + } I don't think the compiler will optimize the below, as the nb_stages value comes from opt, which is a uint8 originating from a pointer-dereference... As far as I know, an optimizing compiler will do "constant propagation" through function calls, but I would be amazed if it found a pointer initialized to a specific value, and optimized the branches away here based on the contents of that pointer deref. So I see 2 options; 1) accept as is - I'll ack this patch here 2) Rework so that the worker_wrapper() accepts nb_stages, burst and mt_safe as function arguments, allowing constant propagation for optimizing away the branches. @Pavan, I'll leave that choice up to you! ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 10/13] app/eventdev: add pipeline queue worker functions 2018-01-16 12:05 ` Van Haaren, Harry @ 2018-01-16 12:31 ` Pavan Nikhilesh 0 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 12:31 UTC (permalink / raw) To: Van Haaren, Harry, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev Hi Harry, Thanks for the review. On Tue, Jan 16, 2018 at 12:05:48PM +0000, Van Haaren, Harry wrote: > > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > > Sent: Friday, January 12, 2018 4:44 PM > > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > > Liang J <liang.j.ma@intel.com> > > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > Subject: [dpdk-dev] [PATCH v4 10/13] app/eventdev: add pipeline queue worker > > functions > > > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > Some of the code feels like duplication - but there are differences in each implementation as far as I can see. The common initialization parts are "macro-ed" to ensure minimal duplication. In short, I'm not aware of a better solution/implementation. > > Please see note on branch-optimization in the code below. > > Acked-by: Harry van Haaren <harry.van.haaren@intel.com> > > > > static int > > worker_wrapper(void *arg) > > { > > - RTE_SET_USED(arg); > > + struct worker_data *w = arg; > > + struct evt_options *opt = w->t->opt; > > + const bool burst = evt_has_burst_mode(w->dev_id); > > + const bool mt_safe = !w->t->mt_unsafe; > > + const uint8_t nb_stages = opt->nb_stages; > > + RTE_SET_USED(opt); > > + > > + /* allow compiler to optimize */ > > + if (nb_stages == 1) { > > + if (!burst && mt_safe) > > + return pipeline_queue_worker_single_stage_tx(arg); > > + else if (!burst && !mt_safe) > > + return pipeline_queue_worker_single_stage_fwd(arg); > > + else if (burst && mt_safe) > > + return pipeline_queue_worker_single_stage_burst_tx(arg); > > + else if (burst && !mt_safe) > > + return pipeline_queue_worker_single_stage_burst_fwd( > > + arg); > > + } else { > > + if (!burst && mt_safe) > > + return pipeline_queue_worker_multi_stage_tx(arg); > > + else if (!burst && !mt_safe) > > + return pipeline_queue_worker_multi_stage_fwd(arg); > > + else if (burst && mt_safe) > > + return pipeline_queue_worker_multi_stage_burst_tx(arg); > > + else if (burst && !mt_safe) > > + return pipeline_queue_worker_multi_stage_burst_fwd(arg); > > + > > + } > > > I don't think the compiler will optimize the below, as the nb_stages value comes from opt, which is a uint8 originating from a pointer-dereference... > > As far as I know, an optimizing compiler will do "constant propagation" through function calls, but I would be amazed if it found a pointer initialized to a specific value, and optimized the branches away here based on the contents of that pointer deref. > > So I see 2 options; > 1) accept as is - I'll ack this patch here > 2) Rework so that the worker_wrapper() accepts nb_stages, burst and mt_safe as function arguments, allowing constant propagation for optimizing away the branches. > > @Pavan, I'll leave that choice up to you! As the worker functions are not affected, I will keep the conditions as is and remove the comment for now. Cheers, Pavan. > ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 11/13] app/eventdev: add pipeline atq test 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (8 preceding siblings ...) 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 10/13] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-16 12:06 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 12/13] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 13/13] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 11 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline test case that aims at testing the following with ``all types queue`` eventdev scheme. 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The atq queue test functions as same as ``pipeline_queue`` test. The difference is, It uses, ``all type queue scheme`` instead of separate queues for each stage and thus reduces the number of queues required to realize the use case. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline atq test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_atq.c | 223 ++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_atq.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index 94b489f41..e600e21c4 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -27,5 +27,6 @@ SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c SRCS-y += test_pipeline_queue.c +SRCS-y += test_pipeline_atq.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c new file mode 100644 index 000000000..6c9ac6119 --- /dev/null +++ b/app/test-eventdev/test_pipeline_atq.c @@ -0,0 +1,223 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_atq_nb_event_queues(struct evt_options *opt) +{ + RTE_SET_USED(opt); + + return rte_eth_dev_count(); +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_atq_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) + rte_service_component_runstate_set(t->tx_service.service_id, 1); + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + uint8_t queue; + struct rte_event_dev_info info; + struct test_pipeline *t = evt_test_priv(test); + uint8_t tx_evqueue_id = 0; + uint8_t queue_arr[RTE_EVENT_MAX_QUEUES_PER_DEV]; + uint8_t nb_worker_queues = 0; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count(); + + /* One extra port and queueu for Tx service */ + if (t->mt_unsafe) { + tx_evqueue_id = nb_queues; + nb_ports++; + nb_queues++; + } + + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + q_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_ALL_TYPES; + + if (t->mt_unsafe) { + if (queue == tx_evqueue_id) { + q_conf.event_queue_cfg = + RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + } else { + queue_arr[nb_worker_queues] = queue; + nb_worker_queues++; + } + } + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + if (t->mt_unsafe) { + ret = pipeline_event_port_setup(test, opt, queue_arr, + nb_worker_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_tx_service_setup(test, opt, tx_evqueue_id, + nb_ports - 1, p_conf); + } else + ret = pipeline_event_port_setup(test, opt, NULL, nb_queues, + p_conf); + + if (ret) + return ret; + + /* + * The pipelines are setup in the following manner: + * + * eth_dev_count = 2, nb_stages = 2, atq mode + * + * Multi thread safe : + * queues = 2 + * stride = 1 + * + * event queue pipelines: + * eth0 -> q0 ->tx + * eth1 -> q1 ->tx + * + * q0, q1 are configured as ATQ so, all the different stages can + * be enqueued on the same queue. + * + * Multi thread unsafe : + * queues = 3 + * stride = 1 + * + * event queue pipelines: + * eth0 -> q0 + * } (q3->tx) Tx service + * eth1 -> q1 + * + * q0,q1 are configured as stated above. + * q3 configured as SINGLE_LINK|ATOMIC. + */ + ret = pipeline_event_rx_adapter_setup(opt, 1, p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_atq_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_atq_nb_event_queues(opt)); +} + +static int +pipeline_atq_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_atq_nb_event_queues(opt)); +} + +static bool +pipeline_atq_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_atq_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_atq_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_atq = { + .cap_check = pipeline_atq_capability_check, + .opt_check = pipeline_atq_opt_check, + .opt_dump = pipeline_atq_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_atq_eventdev_setup, + .launch_lcores = pipeline_atq_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_atq); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 11/13] app/eventdev: add pipeline atq test 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 11/13] app/eventdev: add pipeline atq test Pavan Nikhilesh @ 2018-01-16 12:06 ` Van Haaren, Harry 0 siblings, 0 replies; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-16 12:06 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Friday, January 12, 2018 4:44 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v4 11/13] app/eventdev: add pipeline atq test > > This is a pipeline test case that aims at testing the following with > ``all types queue`` eventdev scheme. > 1. Measure the end-to-end performance of an event dev with a ethernet dev. > 2. Maintain packet ordering from Rx to Tx. > > The atq queue test functions as same as ``pipeline_queue`` test. > The difference is, It uses, ``all type queue scheme`` instead of separate > queues for each stage and thus reduces the number of queues required to > realize the use case. > > Note: The --prod_type_ethdev is mandatory for running the application. > > Example command to run pipeline atq test: > sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ > --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=ao > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 12/13] app/eventdev: add pipeline atq worker functions 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (9 preceding siblings ...) 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 11/13] app/eventdev: add pipeline atq test Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-16 12:06 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 13/13] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 11 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_atq.c | 281 +++++++++++++++++++++++++++++++++- 1 file changed, 280 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c index 6c9ac6119..f4cfd3cc7 100644 --- a/app/test-eventdev/test_pipeline_atq.c +++ b/app/test-eventdev/test_pipeline_atq.c @@ -15,10 +15,289 @@ pipeline_atq_nb_event_queues(struct evt_options *opt) return rte_eth_dev_count(); } +static int +pipeline_atq_worker_single_stage_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + w->processed_pkts++; + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_multi_stage_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + w->processed_pkts++; + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + w->processed_pkts++; + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + /* allow compiler to optimize */ + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_atq_worker_single_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_single_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_atq_worker_single_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_single_stage_burst_fwd(arg); + } else { + if (!burst && mt_safe) + return pipeline_atq_worker_multi_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_multi_stage_fwd(arg); + if (burst && mt_safe) + return pipeline_atq_worker_multi_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_multi_stage_burst_fwd(arg); + } rte_panic("invalid worker\n"); } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 12/13] app/eventdev: add pipeline atq worker functions 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 12/13] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh @ 2018-01-16 12:06 ` Van Haaren, Harry 0 siblings, 0 replies; 122+ messages in thread From: Van Haaren, Harry @ 2018-01-16 12:06 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com] > Sent: Friday, January 12, 2018 4:44 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v4 12/13] app/eventdev: add pipeline atq worker > functions > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Same comments about duplication as 2 patches previous, and this re-uses the previous defines. Acked-by: Harry van Haaren <harry.van.haaren@intel.com> > --- > app/test-eventdev/test_pipeline_atq.c | 281 > +++++++++++++++++++++++++++++++++- > 1 file changed, 280 insertions(+), 1 deletion(-) > > diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test- > eventdev/test_pipeline_atq.c > index 6c9ac6119..f4cfd3cc7 100644 > --- a/app/test-eventdev/test_pipeline_atq.c > +++ b/app/test-eventdev/test_pipeline_atq.c > @@ -15,10 +15,289 @@ pipeline_atq_nb_event_queues(struct evt_options *opt) > return rte_eth_dev_count(); > } > > +static int > +pipeline_atq_worker_single_stage_tx(void *arg) > +{ > + PIPELINE_WROKER_SINGLE_STAGE_INIT; > + > + while (t->done == false) { > + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); > + > + if (!event) { > + rte_pause(); > + continue; > + } > + > + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { > + pipeline_tx_pkt(ev.mbuf); > + w->processed_pkts++; > + continue; > + } > + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); > + pipeline_event_enqueue(dev, port, &ev); > + } > + > + return 0; > +} > + > +static int > +pipeline_atq_worker_single_stage_fwd(void *arg) > +{ > + PIPELINE_WROKER_SINGLE_STAGE_INIT; > + const uint8_t tx_queue = t->tx_service.queue_id; > + > + while (t->done == false) { > + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); > + > + if (!event) { > + rte_pause(); > + continue; > + } > + > + w->processed_pkts++; > + ev.queue_id = tx_queue; > + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); > + pipeline_event_enqueue(dev, port, &ev); > + } > + > + return 0; > +} > + > +static int > +pipeline_atq_worker_single_stage_burst_tx(void *arg) > +{ > + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; > + > + while (t->done == false) { > + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, > + BURST_SIZE, 0); > + > + if (!nb_rx) { > + rte_pause(); > + continue; > + } > + > + for (i = 0; i < nb_rx; i++) { > + rte_prefetch0(ev[i + 1].mbuf); > + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { > + > + pipeline_tx_pkt(ev[i].mbuf); > + ev[i].op = RTE_EVENT_OP_RELEASE; > + w->processed_pkts++; > + } else > + pipeline_fwd_event(&ev[i], > + RTE_SCHED_TYPE_ATOMIC); > + } > + > + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); > + } > + > + return 0; > +} > + > +static int > +pipeline_atq_worker_single_stage_burst_fwd(void *arg) > +{ > + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; > + const uint8_t tx_queue = t->tx_service.queue_id; > + > + while (t->done == false) { > + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, > + BURST_SIZE, 0); > + > + if (!nb_rx) { > + rte_pause(); > + continue; > + } > + > + for (i = 0; i < nb_rx; i++) { > + rte_prefetch0(ev[i + 1].mbuf); > + ev[i].queue_id = tx_queue; > + pipeline_fwd_event(&ev[i], RTE_SCHED_TYPE_ATOMIC); > + w->processed_pkts++; > + } > + > + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); > + } > + > + return 0; > +} > + > +static int > +pipeline_atq_worker_multi_stage_tx(void *arg) > +{ > + PIPELINE_WROKER_MULTI_STAGE_INIT; > + const uint8_t nb_stages = t->opt->nb_stages; > + > + > + while (t->done == false) { > + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); > + > + if (!event) { > + rte_pause(); > + continue; > + } > + > + cq_id = ev.sub_event_type % nb_stages; > + > + if (cq_id == last_queue) { > + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { > + > + pipeline_tx_pkt(ev.mbuf); > + w->processed_pkts++; > + continue; > + } > + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); > + } else { > + ev.sub_event_type++; > + pipeline_fwd_event(&ev, sched_type_list[cq_id]); > + } > + > + pipeline_event_enqueue(dev, port, &ev); > + } > + return 0; > +} > + > +static int > +pipeline_atq_worker_multi_stage_fwd(void *arg) > +{ > + PIPELINE_WROKER_MULTI_STAGE_INIT; > + const uint8_t nb_stages = t->opt->nb_stages; > + const uint8_t tx_queue = t->tx_service.queue_id; > + > + while (t->done == false) { > + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); > + > + if (!event) { > + rte_pause(); > + continue; > + } > + > + cq_id = ev.sub_event_type % nb_stages; > + > + if (cq_id == last_queue) { > + w->processed_pkts++; > + ev.queue_id = tx_queue; > + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); > + } else { > + ev.sub_event_type++; > + pipeline_fwd_event(&ev, sched_type_list[cq_id]); > + } > + > + pipeline_event_enqueue(dev, port, &ev); > + } > + return 0; > +} > + > +static int > +pipeline_atq_worker_multi_stage_burst_tx(void *arg) > +{ > + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; > + const uint8_t nb_stages = t->opt->nb_stages; > + > + while (t->done == false) { > + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, > + BURST_SIZE, 0); > + > + if (!nb_rx) { > + rte_pause(); > + continue; > + } > + > + for (i = 0; i < nb_rx; i++) { > + rte_prefetch0(ev[i + 1].mbuf); > + cq_id = ev[i].sub_event_type % nb_stages; > + > + if (cq_id == last_queue) { > + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { > + > + pipeline_tx_pkt(ev[i].mbuf); > + ev[i].op = RTE_EVENT_OP_RELEASE; > + w->processed_pkts++; > + continue; > + } > + > + pipeline_fwd_event(&ev[i], > + RTE_SCHED_TYPE_ATOMIC); > + } else { > + ev[i].sub_event_type++; > + pipeline_fwd_event(&ev[i], > + sched_type_list[cq_id]); > + } > + } > + > + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); > + } > + return 0; > +} > + > +static int > +pipeline_atq_worker_multi_stage_burst_fwd(void *arg) > +{ > + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; > + const uint8_t nb_stages = t->opt->nb_stages; > + const uint8_t tx_queue = t->tx_service.queue_id; > + > + while (t->done == false) { > + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, > + BURST_SIZE, 0); > + > + if (!nb_rx) { > + rte_pause(); > + continue; > + } > + > + for (i = 0; i < nb_rx; i++) { > + rte_prefetch0(ev[i + 1].mbuf); > + cq_id = ev[i].sub_event_type % nb_stages; > + > + if (cq_id == last_queue) { > + w->processed_pkts++; > + ev[i].queue_id = tx_queue; > + pipeline_fwd_event(&ev[i], > + RTE_SCHED_TYPE_ATOMIC); > + } else { > + ev[i].sub_event_type++; > + pipeline_fwd_event(&ev[i], > + sched_type_list[cq_id]); > + } > + } > + > + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); > + } > + return 0; > +} > + > static int > worker_wrapper(void *arg) > { > - RTE_SET_USED(arg); > + struct worker_data *w = arg; > + struct evt_options *opt = w->t->opt; > + const bool burst = evt_has_burst_mode(w->dev_id); > + const bool mt_safe = !w->t->mt_unsafe; > + const uint8_t nb_stages = opt->nb_stages; > + RTE_SET_USED(opt); > + > + /* allow compiler to optimize */ > + if (nb_stages == 1) { > + if (!burst && mt_safe) > + return pipeline_atq_worker_single_stage_tx(arg); > + else if (!burst && !mt_safe) > + return pipeline_atq_worker_single_stage_fwd(arg); > + else if (burst && mt_safe) > + return pipeline_atq_worker_single_stage_burst_tx(arg); > + else if (burst && !mt_safe) > + return pipeline_atq_worker_single_stage_burst_fwd(arg); > + } else { > + if (!burst && mt_safe) > + return pipeline_atq_worker_multi_stage_tx(arg); > + else if (!burst && !mt_safe) > + return pipeline_atq_worker_multi_stage_fwd(arg); > + if (burst && mt_safe) > + return pipeline_atq_worker_multi_stage_burst_tx(arg); > + else if (burst && !mt_safe) > + return pipeline_atq_worker_multi_stage_burst_fwd(arg); > + } > rte_panic("invalid worker\n"); > } > > -- > 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v4 13/13] doc: add pipeline test in eventdev test guide 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (10 preceding siblings ...) 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 12/13] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh @ 2018-01-12 16:44 ` Pavan Nikhilesh 2018-01-15 11:16 ` Kovacevic, Marko 2018-01-15 16:16 ` Jerin Jacob 11 siblings, 2 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-12 16:44 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- .../tools/img/eventdev_pipeline_atq_test.svg | 3340 ++++++++++++++++++ .../tools/img/eventdev_pipeline_queue_test.svg | 3541 ++++++++++++++++++++ doc/guides/tools/testeventdev.rst | 181 + 3 files changed, 7062 insertions(+) create mode 100644 doc/guides/tools/img/eventdev_pipeline_atq_test.svg create mode 100644 doc/guides/tools/img/eventdev_pipeline_queue_test.svg diff --git a/doc/guides/tools/img/eventdev_pipeline_atq_test.svg b/doc/guides/tools/img/eventdev_pipeline_atq_test.svg new file mode 100644 index 000000000..b166bae3e --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_atq_test.svg @@ -0,0 +1,3340 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 5c3e80d, 2017-08-06" + sodipodi:docname="eventdev_pipeline_atq_test.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker39727" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#0059ff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path39725" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#3550fd;stroke-width:1pt;stroke-opacity:1;fill:#004eff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32611" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32603" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#3550fd;stroke-width:1pt;stroke-opacity:1;fill:#00ffff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32601" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32341" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3507fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32339" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient12130" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop12128" /> + </linearGradient> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(42,-46)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,68)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-62,14)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-46)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.29498181,0,0,0.88423137,181.75943,19.045895)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158,30)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78263355,0,0,0.98605918,90.06838,5.0013749)" /> + <linearGradient + gradientTransform="matrix(0.78674479,0,0,1.0000825,87.83543,1.2279738)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,86.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(39.91461,10.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(41.91461,64.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,140.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient12132" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient16362" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#26fde9;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#26fde9;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#26fde9;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-0" + style="overflow:visible"> + <path + id="path3704-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-6" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#26fde9;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-1" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.6515192,0,0,1.0041442,189.20967,67.917365)" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.477636" + inkscape:cx="274.67022" + inkscape:cy="151.8676" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.87847757;stroke-opacity:1" + id="rect3697" + width="493.61813" + height="283.13986" + x="126.96397" + y="104.52792" + rx="0" + ry="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="-2.6719971" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="-2.6719971" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="407.29071" + y="283.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="406.83691" + y="230.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="405.98169" + y="170.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.87885" + y="167.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="410.87885" + y="167.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.61511" + y="227.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="410.61511" + y="227.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="412.61511" + y="281.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="412.61511" + y="281.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="416.13348" + y="188.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="416.13348" + y="188.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="417.25244" + y="248.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="417.25244" + y="248.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="419.25244" + y="302.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="419.25244" + y="302.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="197.72678" + y="169.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.03741" + y="212.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="199.03741" + y="212.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.49991107;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="72.33783" + height="197.82672" + x="301.47455" + y="135.32401" + ry="5.0019679" + rx="2.6784446" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.09811" + y="170.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="330.09811" + y="170.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 248.59877,185.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 248.59877,185.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.44385" + y="188.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="199.44385" + y="188.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="317.5372" + y="174.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="420.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="420.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_atq</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="195.64139" + y="225.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="196.95203" + y="268.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="196.95203" + y="268.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="330.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 248.51338,241.5091 H 313.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 248.51338,241.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="244.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="199.35846" + y="244.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="317.45184" + y="230.86047" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="197.64139" + y="279.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="198.95203" + y="322.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="198.95203" + y="322.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="326.01276" + y="280.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="326.01276" + y="280.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 248.51338,295.50911 H 313.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 248.51338,295.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="298.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="199.35846" + y="298.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="317.45184" + y="284.86047" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.77600002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.776, 1.552;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker3706)" + d="m 357.34033,197.14632 c 8.17509,8.31774 20.17351,12.71645 31.7876,11.65356 10.86812,-0.99462 21.2197,-6.72367 27.83386,-15.40458" + id="path14459" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461" + inkscape:original-d="m 357.34033,197.14632 c 2.85007,-12.15989 24.89926,15.10375 31.7876,11.65356 41.63501,-20.85393 1.84075,-15.4059 27.83386,-15.40458" + sodipodi:nodetypes="csc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.77600002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.776, 1.552;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker3706)" + d="m 358.5174,253.20796 c 11.69276,11.79241 28.05834,18.81955 44.66117,19.17685 0.57072,0.0123 1.14177,0.017 1.71237,0 6.62073,-0.19757 13.08346,-3.5004 17.12211,-8.75039" + id="path14482" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14484" + inkscape:original-d="m 358.5174,253.20796 c 2.68667,2.31628 41.97585,16.85854 44.66117,19.17685 2.68532,2.3183 -5.85582,-0.001 1.71237,0 7.5682,10e-4 10.65437,-3.17092 17.12211,-8.75039" + sodipodi:nodetypes="ccsc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="73.356339" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="73.356339" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="224.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="224.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="333.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="333.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="140.32845" + y="123.36828" + id="text5219-26"><tspan + sodipodi:role="line" + x="140.32845" + y="123.36828" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = number of producers</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="375.66333" + y="349.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="375.66333" + y="349.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="152.30008" + y="228.73854" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="152.30008" + y="228.73854" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="152.30008" + y="240.32199" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="279.86127" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="279.86127" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port a</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="291.44473" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="177.92682" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="177.92682" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="189.51027" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#fc0000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9)" + d="m 357.34033,172.79883 c 8.36428,-5.93621 18.90653,-8.72754 29.11245,-7.70826 8.8335,0.88221 17.3635,4.58684 24.03814,10.4399" + id="path14459-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7" + inkscape:original-d="m 357.34033,172.79883 c 5.92072,15.88628 32.01545,-59.42511 29.11245,-7.70826 -3.44145,61.30951 -6.03884,34.56087 24.03814,10.4399" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#fc0000;stroke-width:1.17756593;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.17756579, 1.17756579;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2)" + d="m 358.5174,228.86047 c 7.66446,-6.67009 18.1625,-9.96947 28.26468,-8.88316 6.36698,0.68465 12.54487,3.05637 17.73433,6.80828 5.18945,3.7519 9.37809,8.87505 12.02396,14.70657" + id="path14459-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5" + inkscape:original-d="m 358.5174,228.86047 c 5.49331,20.07759 30.95812,-74.24456 28.26468,-8.88316 -3.19301,77.48491 1.85253,51.9997 29.75829,21.51485" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#fc0000;stroke-width:1.18700004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.18700004, 1.18700004;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2-4)" + d="m 358.5174,282.86047 c 8.37048,-6.20024 19.2831,-8.85376 29.56597,-7.18928 6.93274,1.1222 13.54696,4.15154 18.92519,8.66782 5.37823,4.51628 9.50565,10.50705 11.80973,17.14131" + id="path14459-5-5-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5-6" + inkscape:original-d="m 358.5174,282.86047 c 5.92072,15.88628 32.46897,-58.90613 29.56597,-7.18928 -3.44145,61.30951 0.65794,49.9301 30.73492,25.80913" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="285.26294" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894427)"><tspan + sodipodi:role="line" + id="tspan1220" + x="285.26294" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="443.6615" + y="107.15425" + id="text5219-2-4-3-3-4" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="443.6615" + y="107.15425" + id="tspan5223-0-7-7-7-5" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849">Event type </tspan><tspan + sodipodi:role="line" + x="443.6615" + y="116.12022" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265">Parallel/Ordered</tspan></text> + <g + id="g20550" + transform="translate(25.709043,-190.70754)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13899" + transform="translate(-54.904385,-3.0966742)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13911" + transform="translate(-54.904385,-1.0966741)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port a</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="259.86884" + y="164.78368" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="259.86884" + y="164.78368" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="259.86884" + y="174.78368" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="217.84813" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="217.84813" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="227.84813" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="271.71359" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="271.71359" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="281.71359" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr a</tspan></text> + <g + id="g16360" + transform="translate(-49.154961,-28.548494)"> + <ellipse + ry="24.258638" + rx="22.831659" + cy="161.21605" + cx="559.68445" + id="path8843" + style="fill:#ffffff;fill-opacity:0.98039216;stroke:url(#linearGradient16362);stroke-opacity:1" /> + <text + transform="scale(0.8701608,1.1492129)" + id="text5219-2-4-3-3-4-5" + y="143.44661" + x="622.46747" + style="font-style:normal;font-weight:normal;font-size:10.44192982px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.87016082" + xml:space="preserve"><tspan + id="tspan1265-5" + style="font-size:7.54139376px;line-height:1.25;stroke-width:0.87016082" + y="143.44661" + x="622.46747" + sodipodi:role="line">Tx Service</tspan></text> + </g> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:0.77600002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.776, 1.552;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker3706-61)" + d="m 355.18005,307.14998 c 11.69276,11.79241 28.05834,18.81955 44.66117,19.17685 0.57072,0.0123 1.14177,0.017 1.71237,0 6.62073,-0.19757 13.08346,-3.5004 17.12211,-8.75039" + id="path14482-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14484-7" + inkscape:original-d="m 355.18005,307.14998 c 2.68667,2.31628 41.97585,16.85854 44.66117,19.17685 2.68532,2.3183 -5.85582,-10e-4 1.71237,0 7.5682,0.001 10.65437,-3.17092 17.12211,-8.75039" + sodipodi:nodetypes="ccsc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#fc0000;stroke-width:0.88700002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.887, 0.887;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-20)" + d="m 371.47765,118.2091 v 0 l 28.03368,0.16566" + id="path14459-5-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-3" + inkscape:original-d="m 371.47765,118.2091 c 5.92072,15.88628 2.903,-51.71685 0,0 -3.44145,61.30951 -2.0433,24.28663 28.03368,0.16566" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:#00ffff;stroke:#26fde9;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.17114835, 3.51344505;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5)" + d="m 457.99431,185.46823 c 31.4907,-0.0452 62.9756,-0.0905 94.45466,-0.1357" + id="path5226-6-2-1-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2" + inkscape:original-d="m 457.99431,185.46823 c 31.4907,-0.0462 62.9756,-0.0915 94.45466,-0.1357" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#00ffff;stroke:#26fde9;stroke-width:1.17235398;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.17235403, 3.51706209;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8)" + d="m 459.05911,246.13209 c 30.70709,0.002 61.40849,0.005 92.10417,0.007" + id="path5226-6-2-1-2-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7" + inkscape:original-d="m 459.05911,246.13209 c 30.70709,0.002 61.40849,0.004 92.10417,0.007" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#00ffff;stroke:#26fde9;stroke-width:1.16870522;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.16870526, 3.50611579;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6)" + d="m 459.54824,301.10401 c 30.65551,0.002 61.30536,0.005 91.94951,0.007" + id="path5226-6-2-1-2-3-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2" + inkscape:original-d="m 459.54824,301.10401 c 30.65551,10e-4 61.30536,0.004 91.94951,0.007" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#004eff;fill-opacity:1;stroke:#3550fd;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:19.36799955, 0.80699998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker32613)" + d="m 511.70299,212.50867 c 0.0289,-17.72498 0.0578,-35.44649 0.0867,-53.16447" + id="path5226-6-2-1-2-4-5-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6" + inkscape:original-d="m 511.70299,212.50867 c 0.0299,-17.72498 0.0588,-35.44649 0.0867,-53.16447" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#800000;stroke:#800000;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935)" + d="m 518.07859,156.22298 c 11.94017,8.682 23.87849,17.36266 35.81493,26.04195" + id="path5226-6-2-1-2-4-5-1-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1" + inkscape:original-d="m 518.07859,156.22298 c 11.94099,8.68087 23.87931,17.36153 35.81493,26.04195" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#800000;fill-opacity:1;stroke:#800000;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-5)" + d="m 518.07859,156.22298 c 11.71937,29.00049 23.43733,57.99747 35.15381,86.9908" + id="path5226-6-2-1-2-4-5-1-5-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-7" + inkscape:original-d="m 518.07859,156.22298 c 11.72058,29 23.43853,57.99698 35.15381,86.9908" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#800000;fill-opacity:1;stroke:#800000;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-5-5)" + d="m 518.07859,156.22298 c 11.97362,47.2317 23.94577,94.45755 35.91637,141.67733" + id="path5226-6-2-1-2-4-5-1-5-6-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-7-9" + inkscape:original-d="m 518.07859,156.22298 c 11.9748,47.2314 23.94694,94.45725 35.91637,141.67733" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#00ffff;stroke:#26fde9;stroke-width:0.71152061;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.71152061, 2.13456184;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-7)" + d="m 544.97507,120.62617 c 5.32831,-0.0987 10.6556,-0.19737 15.98186,-0.29603" + id="path5226-6-2-1-2-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-5" + inkscape:original-d="m 544.97507,120.62617 c 5.32827,-0.10079 10.65556,-0.19961 15.98186,-0.29603" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="619.95911" + y="112.13598" + id="text5219-2-4-3-3-4-54" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="619.95911" + y="112.13598" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4">Tx Lock free</tspan></text> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.58040088;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.32160349, 0.58040087;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1)" + d="m 457.99431,185.46823 c 13.07561,8.94945 26.1492,17.89751 39.22072,26.84415" + id="path5226-6-2-1-2-4-5-1-5-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2" + inkscape:original-d="m 457.99431,185.46823 c 13.0764,8.9483 26.14999,17.89636 39.22072,26.84415" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6)" + d="m 459.47717,245.71809 c 12.28232,-4.96638 24.56173,-9.93159 36.83817,-14.89559" + id="path5226-6-2-1-2-4-5-1-5-0-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9" + inkscape:original-d="m 459.47717,245.71809 c 12.28211,-4.96689 24.56152,-9.9321 36.83817,-14.89559" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.80700000000000005;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6-6)" + d="m 459.54824,301.10401 c 12.64219,-20.37548 25.28189,-40.74696 37.91905,-61.11434" + id="path5226-6-2-1-2-4-5-1-5-0-2-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + inkscape:original-d="M 459.54824,301.10401 C 472.1907,280.7287 484.8304,260.35722 497.46729,239.98967" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="595.27808" + y="136.64076" + id="text5219-2-4-3-3-4-54-8-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="595.27808" + y="139.22064" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-7" /></text> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.22799993, 0.80699998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker32613-8-5)" + d="m 545.42779,131.09773 c 4.9322,-0.10475 9.86269,-0.20947 14.79145,-0.31415" + id="path5226-6-2-1-2-4-5-1-3-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-4-4" + inkscape:original-d="m 545.42779,131.09773 c 4.93218,-0.10573 9.86267,-0.21045 14.79145,-0.31415" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="619.03357" + y="122.30099" + id="text5219-2-4-3-3-4-54-8-7" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="619.03357" + y="122.30099" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2">Tx Generic</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-1);stroke-width:0.86395979;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-9" + width="25.451954" + height="24.448395" + x="499.03128" + y="213.32141" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="548.03668" + y="204.31348" + id="text5219-2-4-3-3-4-54-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="548.03668" + y="204.31348" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6">Single </tspan><tspan + sodipodi:role="line" + x="548.03668" + y="213.27945" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan57836">Link Q</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/img/eventdev_pipeline_queue_test.svg b/doc/guides/tools/img/eventdev_pipeline_queue_test.svg new file mode 100644 index 000000000..51867f667 --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_queue_test.svg @@ -0,0 +1,3541 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 5c3e80d, 2017-08-06" + sodipodi:docname="eventdev_pipeline_queue_test.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76424623,0,0,1,-92.508475,2)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,8.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,5.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6-6" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-1" + style="overflow:visible"> + <path + id="path3704-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-156.30743,67.79201)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-30.30743,13.792007)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(31.692568,-46.20799)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14db;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14e4;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#26fde9;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#26fde9;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#26fde9;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#26fde9;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient16362" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-4" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker55720" + style="overflow:visible"> + <path + id="path55718" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-9" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-3" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78531244,0,0,1,60.143534,68.69878)" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.0000001" + inkscape:cx="307.55887" + inkscape:cy="172.49592" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="54.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.85571432;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.41464" + height="223.72733" + x="217.65247" + y="133.50191" + ry="5.6568542" + rx="6.9393806" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="452.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="452.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_queue</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.83277988px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.90273178" + x="88.339828" + y="111.36845" + id="text5219-26" + transform="scale(0.90273172,1.1077488)"><tspan + sodipodi:role="line" + x="88.339828" + y="111.36845" + id="tspan5223-10" + style="font-size:9.02731705px;line-height:1.25;stroke-width:0.90273178">total queues = (number of stages * number of producers) + number of producers</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="407.66333" + y="349.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="407.66333" + y="349.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port a</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr a</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="438.98328" + y="283.69067" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="438.52948" + y="229.81598" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="437.67426" + y="169.85918" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="442.57141" + y="167.14041" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="442.57141" + y="167.14041" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="442.30768" + y="227.46143" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="442.30768" + y="227.46143" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="444.30768" + y="281.46143" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="444.30768" + y="281.46143" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="447.82605" + y="188.68941" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="447.82605" + y="188.68941" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="448.94501" + y="248.64697" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="448.94501" + y="248.64697" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="450.94501" + y="302.64697" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="450.94501" + y="302.64697" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:0.77600002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.776, 1.552;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker3706-1)" + d="m 389.03289,196.93833 c 8.17509,8.31774 20.17351,12.71645 31.7876,11.65356 10.86812,-0.99462 21.2197,-6.72367 27.83387,-15.40458" + id="path14459" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-9" + inkscape:original-d="m 389.03289,196.93833 c 2.85007,-12.15989 24.89926,15.10375 31.7876,11.65356 41.63502,-20.85393 1.84075,-15.4059 27.83387,-15.40458" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:0.77600002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.776, 1.552;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker3706-1)" + d="m 390.20996,252.99997 c 11.69275,11.79241 28.05834,18.81955 44.66117,19.17685 0.57072,0.0123 1.14177,0.017 1.71237,0 6.62073,-0.19757 13.08347,-3.5004 17.12212,-8.75039" + id="path14482" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14484-6" + inkscape:original-d="m 390.20996,252.99997 c 2.68667,2.31628 41.97585,16.85854 44.66117,19.17685 2.68532,2.3183 -5.85582,-0.001 1.71237,0 7.56821,10e-4 10.65438,-3.17092 17.12212,-8.75039" + sodipodi:nodetypes="ccsc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#fc0000;stroke-width:1.0874536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.08745346, 1.08745346;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-5)" + d="m 389.03289,172.59084 c 8.36428,-5.93621 18.90653,-8.72754 29.11245,-7.70826 8.83351,0.88221 17.36351,4.58684 24.03815,10.4399" + id="path14459-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-4" + inkscape:original-d="m 389.03289,172.59084 c 5.92072,15.88628 32.01545,-59.42511 29.11245,-7.70826 -3.44145,61.30951 -6.03884,34.56087 24.03815,10.4399" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#fc0000;stroke-width:1.17756593;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.17756579, 1.17756579;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2-0)" + d="m 390.20996,228.65248 c 7.66446,-6.67009 18.1625,-9.96947 28.26468,-8.88316 6.36699,0.68465 12.54488,3.05637 17.73433,6.80828 5.18946,3.7519 9.3781,8.87505 12.02397,14.70657" + id="path14459-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5-1" + inkscape:original-d="m 390.20996,228.65248 c 5.49331,20.07759 30.95812,-74.24456 28.26468,-8.88316 -3.19301,77.48491 1.85253,51.9997 29.7583,21.51485" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#fc0000;stroke-width:1.18700004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.18700004, 1.18700004;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-2-4-2)" + d="m 390.20996,282.65248 c 8.37048,-6.20024 19.2831,-8.85376 29.56597,-7.18928 6.93274,1.1222 13.54696,4.15154 18.9252,8.66782 5.37823,4.51628 9.50565,10.50705 11.80973,17.14131" + id="path14459-5-5-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-5-6-6" + inkscape:original-d="m 390.20996,282.65248 c 5.92072,15.88628 32.46897,-58.90613 29.56597,-7.18928 -3.44145,61.30951 0.65794,49.9301 30.73493,25.80913" + sodipodi:nodetypes="csc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="493.60568" + y="117.9426" + id="text5219-2-4-3-3-4" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="493.60568" + y="117.9426" + id="tspan5223-0-7-7-7-5" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849">Event type </tspan><tspan + sodipodi:role="line" + x="493.60568" + y="126.90857" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265">Parallel/Ordered</tspan></text> + <g + style="display:inline;opacity:1" + id="g20550" + transform="translate(57.401608,-190.91553)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13899" + transform="translate(-23.21182,-3.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13911" + transform="translate(-23.21182,-1.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port a</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g16360" + transform="translate(-17.46239,-28.756482)"> + <ellipse + ry="24.258638" + rx="22.831659" + cy="161.21605" + cx="559.68445" + id="path8843" + style="fill:#ffffff;fill-opacity:0.98039216;stroke:url(#linearGradient16362);stroke-opacity:1" /> + <text + transform="scale(0.8701608,1.1492129)" + id="text5219-2-4-3-3-4-5" + y="143.44661" + x="622.46747" + style="font-style:normal;font-weight:normal;font-size:10.44192982px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.87016082" + xml:space="preserve"><tspan + id="tspan1265-5" + style="font-size:7.54139376px;line-height:1.25;stroke-width:0.87016082" + y="143.44661" + x="622.46747" + sodipodi:role="line">Tx Service</tspan></text> + </g> + <path + style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:0.77600002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.776, 1.552;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker3706-61)" + d="m 386.87261,306.94199 c 11.69275,11.79241 28.05834,18.81955 44.66117,19.17685 0.57072,0.0123 1.14177,0.017 1.71237,0 6.62073,-0.19757 13.08347,-3.5004 17.12212,-8.75039" + id="path14482-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14484-7" + inkscape:original-d="m 386.87261,306.94199 c 2.68667,2.31628 41.97585,16.85854 44.66117,19.17685 2.68532,2.3183 -5.85582,-10e-4 1.71237,0 7.56821,0.001 10.65438,-3.17092 17.12212,-8.75039" + sodipodi:nodetypes="ccsc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#fc0000;stroke-width:0.88700002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.887, 0.887;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker28236-9-20)" + d="m 418.14077,132.26457 v 0 l 28.03368,0.16566" + id="path14459-5-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect14461-7-3" + inkscape:original-d="m 418.14077,132.26457 c 5.92072,15.88628 2.903,-51.716854 0,0 -3.44145,61.30951 -2.0433,24.28663 28.03368,0.16566" + sodipodi:nodetypes="csc" /> + <path + style="display:inline;opacity:1;fill:#00ffff;stroke:#26fde9;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.17114835, 3.51344505;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5)" + d="m 489.68688,185.26024 c 31.4907,-0.0452 62.9756,-0.0905 94.45466,-0.1357" + id="path5226-6-2-1-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2" + inkscape:original-d="m 489.68688,185.26024 c 31.4907,-0.0462 62.9756,-0.0915 94.45466,-0.1357" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#00ffff;stroke:#26fde9;stroke-width:1.17235398;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.17235403, 3.51706209;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8)" + d="m 490.75168,245.9241 c 30.70709,0.002 61.40849,0.005 92.10417,0.007" + id="path5226-6-2-1-2-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7" + inkscape:original-d="m 490.75168,245.9241 c 30.70709,0.002 61.40849,0.004 92.10417,0.007" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#00ffff;stroke:#26fde9;stroke-width:1.16870522;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.16870526, 3.50611579;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6)" + d="m 491.24081,300.89602 c 30.65551,0.002 61.30536,0.005 91.94951,0.007" + id="path5226-6-2-1-2-3-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2" + inkscape:original-d="m 491.24081,300.89602 c 30.65551,10e-4 61.30536,0.004 91.94951,0.007" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#004eff;fill-opacity:1;stroke:#3550fd;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:19.36799955, 0.80699998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker32613)" + d="m 543.58485,212.71434 c -0.0342,-17.86289 -0.0684,-35.72228 -0.10259,-53.57813" + id="path5226-6-2-1-2-4-5-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6" + inkscape:original-d="m 543.58485,212.71434 c -0.0332,-17.86289 -0.0674,-35.72228 -0.10259,-53.57813" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#800000;stroke:#800000;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935)" + d="m 549.77116,156.01499 c 11.94017,8.682 23.87849,17.36266 35.81493,26.04195" + id="path5226-6-2-1-2-4-5-1-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1" + inkscape:original-d="m 549.77116,156.01499 c 11.94099,8.68087 23.87931,17.36153 35.81493,26.04195" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#800000;fill-opacity:1;stroke:#800000;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-5)" + d="m 549.77116,156.01499 c 11.71937,29.00049 23.43733,57.99747 35.15381,86.9908" + id="path5226-6-2-1-2-4-5-1-5-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-7" + inkscape:original-d="m 549.77116,156.01499 c 11.72058,29 23.43853,57.99698 35.15381,86.9908" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#800000;fill-opacity:1;stroke:#800000;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-5-5)" + d="m 549.77116,156.01499 c 11.97362,47.2317 23.94577,94.45755 35.91637,141.67733" + id="path5226-6-2-1-2-4-5-1-5-6-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-7-9" + inkscape:original-d="m 549.77116,156.01499 c 11.9748,47.2314 23.94694,94.45725 35.91637,141.67733" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#00ffff;stroke:#26fde9;stroke-width:0.67273664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.67273666, 2.01820998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-7)" + d="m 578.36245,120.41818 c 4.76327,-0.0987 9.52563,-0.19737 14.28705,-0.29603" + id="path5226-6-2-1-2-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-5" + inkscape:original-d="m 578.36245,120.41818 c 4.76323,-0.10079 9.52558,-0.19961 14.28705,-0.29603" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="654.60101" + y="111.94576" + id="text5219-2-4-3-3-4-54" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="654.60101" + y="111.94576" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4">Tx Lock free</tspan></text> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1)" + d="m 489.68688,185.26024 c 12.48783,9.35904 24.97375,18.71666 37.45774,28.07282" + id="path5226-6-2-1-2-4-5-1-5-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2" + inkscape:original-d="m 489.68688,185.26024 c 12.48867,9.35792 24.97459,18.71554 37.45774,28.07282" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14db;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.80700000000000005;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6)" + d="m 491.16974,245.5101 c 12.05344,-5.95413 24.10401,-11.90685 36.15165,-17.85812" + id="path5226-6-2-1-2-4-5-1-5-0-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9" + inkscape:original-d="m 491.16974,245.5101 c 12.05324,-5.95454 24.10381,-11.90726 36.15165,-17.85812" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14e4;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.80700000000000005;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6-6)" + d="m 491.24081,300.89602 c 13.91523,-20.11709 27.82772,-40.23022 41.73744,-60.33935" + id="path5226-6-2-1-2-4-5-1-5-0-2-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + inkscape:original-d="m 491.24081,300.89602 c 13.91544,-20.11694 27.82793,-40.23008 41.73744,-60.33935" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.22799993, 0.80699998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker32613-8-5)" + d="m 577.99341,128.80135 c 4.9322,-0.10475 9.86269,-0.20947 14.79145,-0.31415" + id="path5226-6-2-1-2-4-5-1-3-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-4-4" + inkscape:original-d="m 577.99341,128.80135 c 4.93218,-0.10573 9.86267,-0.21045 14.79145,-0.31415" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="653.67548" + y="120.28098" + id="text5219-2-4-3-3-4-54-8-7" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="653.67548" + y="120.28098" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2">Tx Generic</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-3);stroke-width:0.94657081;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-7" + width="30.678661" + height="24.347494" + x="529.39697" + y="213.50273" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="582.62744" + y="205.25244" + id="text5219-2-4-3-3-4-54-8-7-5" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="582.62744" + y="205.25244" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2-3">Single</tspan><tspan + sodipodi:role="line" + x="582.62744" + y="214.21841" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan6344">Link Q</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/testeventdev.rst b/doc/guides/tools/testeventdev.rst index 9785e8431..46467436a 100644 --- a/doc/guides/tools/testeventdev.rst +++ b/doc/guides/tools/testeventdev.rst @@ -441,3 +441,184 @@ Example command to run perf ``all types queue`` test: sudo build/app/dpdk-test-eventdev --vdev=event_octeontx -- \ --test=perf_atq --plcores=2 --wlcore=3 --stlist=p --nb_pkts=0 + + +PIPELINE_QUEUE Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following: + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_queue_test: + +.. table:: Pipeline queue test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | (nb_producers | Queues will be configured based on the | + | | | * nb_stages) + | user requested sched type list(--stlist)| + | | | x | Here value of x depends on ethernet dev | + | | | | Tx capability (MT_LOCKFREE). | + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_queue_test: + +.. figure:: img/eventdev_pipeline_queue_test.* + + pipeline queue test operation. + +The pipeline queue test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_queue_test`. + +The user can choose the number of workers and number of stages through the +``--wlcores`` and the ``--stlist`` application command line arguments +respectively. + +The number of producers depends on the number of ethernet devices detected and +each ethernet device is configured as a event_eth_rx_adapter that acts as a +producer. + +The producer(s) injects the events to eventdev based the first stage sched type +list requested by the user through ``--stlist`` the command line argument. + +Based on the number of stages to process(selected through ``--stlist``), +The application forwards the event to next upstream queue and when it reaches +the last stage in the pipeline if the event type is ``atomic`` it is enqueued +onto ethdev Tx queue else to maintain ordering the event type is set to +``atomic`` and enqueued onto the last stage queue. + +If the ethernet has ``DEV_TX_OFFLOAD_MT_LOCKFREE`` capability then the worker +cores transmit the packets directly. Else the worker cores enqueue the packet +onto the ``SINGLE_LINK_QUEUE`` that is managed by a Tx service. The Tx service +dequeues the packet and transmits it. + +On packet Tx, application increments the number events processed and print +periodically in one second to get the number of events processed in one +second. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=a + + +PIPELINE_ATQ Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following with +``all types queue`` eventdev scheme. + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_atq_test: + +.. table:: Pipeline atq test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | nb_producers | Queues will be configured based on the | + | | | | user requested sched type list(--stlist)| + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_atq_test: + +.. figure:: img/eventdev_pipeline_atq_test.* + + pipeline atq test operation. + +The pipeline atq test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_atq_test`. + +The atq queue test functions as same as ``pipeline_queue`` test. The difference +is, It uses, ``all type queue scheme`` instead of separate queues for each +stage and thus reduces the number of queues required to realize the use case. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=a -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 13/13] doc: add pipeline test in eventdev test guide 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 13/13] doc: add pipeline test in eventdev test guide Pavan Nikhilesh @ 2018-01-15 11:16 ` Kovacevic, Marko 2018-01-15 16:16 ` Jerin Jacob 1 sibling, 0 replies; 122+ messages in thread From: Kovacevic, Marko @ 2018-01-15 11:16 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Van Haaren, Harry, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > .../tools/img/eventdev_pipeline_atq_test.svg | 3340 ++++++++++++++++++ > .../tools/img/eventdev_pipeline_queue_test.svg | 3541 > ++++++++++++++++++++ > doc/guides/tools/testeventdev.rst | 181 + > 3 files changed, 7062 insertions(+) <...> Acked-by: Marko Kovacevic <marko.kovacevic@intel.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v4 13/13] doc: add pipeline test in eventdev test guide 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 13/13] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 2018-01-15 11:16 ` Kovacevic, Marko @ 2018-01-15 16:16 ` Jerin Jacob 1 sibling, 0 replies; 122+ messages in thread From: Jerin Jacob @ 2018-01-15 16:16 UTC (permalink / raw) To: Pavan Nikhilesh Cc: santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma, dev -----Original Message----- > Date: Fri, 12 Jan 2018 22:14:16 +0530 > From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > To: jerin.jacob@caviumnetworks.com, santosh.shukla@caviumnetworks.com, > harry.van.haaren@intel.com, gage.eads@intel.com, hemant.agrawal@nxp.com, > nipun.gupta@nxp.com, liang.j.ma@intel.com > Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v4 13/13] doc: add pipeline test in eventdev > test guide > X-Mailer: git-send-email 2.14.1 > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > --- > .../tools/img/eventdev_pipeline_atq_test.svg | 3340 ++++++++++++++++++ > .../tools/img/eventdev_pipeline_queue_test.svg | 3541 ++++++++++++++++++++ > doc/guides/tools/testeventdev.rst | 181 + > 3 files changed, 7062 insertions(+) > create mode 100644 doc/guides/tools/img/eventdev_pipeline_atq_test.svg > create mode 100644 doc/guides/tools/img/eventdev_pipeline_queue_test.svg Some suggestions in the diagram, 1) In total_queues = equation, Please add some mean full info on the last "number of producers" 2) Have separate diagram for "Tx generic" and "Tx lockfree" case to understand the follow easily. 3) IMO, The backward arrow towards queue from port(The red one) is may not depicting the actual flow from the application perspective. 4) Same comments apply for PIPELINE_ATQ diagram > sudo build/app/dpdk-test-eventdev --vdev=event_octeontx -- \ > --test=perf_atq --plcores=2 --wlcore=3 --stlist=p --nb_pkts=0 > + > + > +PIPELINE_QUEUE Test > +~~~~~~~~~~~~~~~~~~~ > + > +This is a pipeline test case that aims at testing the following: > + > +#. Measure the end-to-end performance of an event dev with a ethernet dev. > +#. Maintain packet ordering from Rx to Tx. > + > +.. _table_eventdev_pipeline_queue_test: > + > +.. table:: Pipeline queue test eventdev configuration. > + > + +---+--------------+----------------+-----------------------------------------+ > + | # | Items | Value | Comments | > + | | | | | > + +===+==============+================+=========================================+ > + | 1 | nb_queues | (nb_producers | Queues will be configured based on the | > + | | | * nb_stages) + | user requested sched type list(--stlist)| > + | | | x | Here value of x depends on ethernet dev | > + | | | | Tx capability (MT_LOCKFREE). | I think, it will be good to say the value of _x_ for MT_LOCKFREE vs non MT_LOCKFREE case Another than above comments, It looks good to me. > + +---+--------------+----------------+-----------------------------------------+ > + | 2 | nb_producers | >= 1 | Producers will be configured based on | > + | | | | the number of detected ethernet devices.| > + | | | | Each ethdev will be configured as an Rx | > + | | | | adapter. | > + +---+--------------+----------------+-----------------------------------------+ > + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | > + | | | | argument | > + +---+--------------+----------------+-----------------------------------------+ > + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | > + | | | nb_producers | Producers use port n+1 to port n+m, | > + | | | | depending on the Rx adapter capability. | > + +---+--------------+----------------+-----------------------------------------+ > + > +.. _figure_eventdev_pipeline_queue_test: > + > +.. figure:: img/eventdev_pipeline_queue_test.* ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs 2017-11-30 7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh ` (5 preceding siblings ...) 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh ` (11 more replies) 2018-01-16 15:20 ` [dpdk-dev] [PATCH v5 14/14] doc: update 18.02 release notes Pavan Nikhilesh ` (2 subsequent siblings) 9 siblings, 12 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add logs for packet distribution across worker cores to be printed along with the test results. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- v5 Changes: - Split generic and lockfree diagrams for pipeline queue and atq in documentation. - Update release notes. v4 Changes: - remove Tx queue locking by using Tx service ml discussion : http://dpdk.org/ml/archives/dev/2018-January/086730.html v3 Changes: - Add SPDX licence tags - Redo atq test app/test-eventdev/evt_main.c | 3 +++ app/test-eventdev/test_perf_common.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c index 3c27f3216..57bb94570 100644 --- a/app/test-eventdev/evt_main.c +++ b/app/test-eventdev/evt_main.c @@ -29,6 +29,9 @@ signal_handler(int signum) rte_eal_mp_wait_lcore(); + if (test->ops.test_result) + test->ops.test_result(test, &opt); + if (test->ops.eventdev_destroy) test->ops.eventdev_destroy(test, &opt); diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c index e82cc9301..e279d81a5 100644 --- a/app/test-eventdev/test_perf_common.c +++ b/app/test-eventdev/test_perf_common.c @@ -8,8 +8,20 @@ int perf_test_result(struct evt_test *test, struct evt_options *opt) { RTE_SET_USED(opt); + int i; + uint64_t total = 0; struct test_perf *t = evt_test_priv(test); + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 02/14] app/eventdev: add pipeline test setup and destroy 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 03/14] app/eventdev: add mempool " Pavan Nikhilesh ` (10 subsequent siblings) 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Pipeline test has the queue and all types queue variants. Introduce test_pipeline_common* to share the common code between those tests. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-eventdev/Makefile | 2 ++ app/test-eventdev/test_pipeline_common.c | 44 ++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 57 ++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_common.c create mode 100644 app/test-eventdev/test_pipeline_common.h diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index cfe567a6d..1707318f2 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -25,4 +25,6 @@ SRCS-y += test_perf_common.c SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c +SRCS-y += test_pipeline_common.c + include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c new file mode 100644 index 000000000..aa3481247 --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.c @@ -0,0 +1,44 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +int +pipeline_test_setup(struct evt_test *test, struct evt_options *opt) +{ + void *test_pipeline; + + test_pipeline = rte_zmalloc_socket(test->name, + sizeof(struct test_pipeline), RTE_CACHE_LINE_SIZE, + opt->socket_id); + if (test_pipeline == NULL) { + evt_err("failed to allocate test_pipeline memory"); + goto nomem; + } + test->test_priv = test_pipeline; + + struct test_pipeline *t = evt_test_priv(test); + + t->nb_workers = evt_nr_active_lcores(opt->wlcores); + t->outstand_pkts = opt->nb_pkts * evt_nr_active_lcores(opt->wlcores); + t->done = false; + t->nb_flows = opt->nb_flows; + t->result = EVT_TEST_FAILED; + t->opt = opt; + opt->prod_type = EVT_PROD_TYPE_ETH_RX_ADPTR; + memcpy(t->sched_type_list, opt->sched_type_list, + sizeof(opt->sched_type_list)); + return 0; +nomem: + return -ENOMEM; +} + +void +pipeline_test_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + + rte_free(test->test_priv); +} diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h new file mode 100644 index 000000000..645571cf5 --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.h @@ -0,0 +1,57 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#ifndef _TEST_PIPELINE_COMMON_ +#define _TEST_PIPELINE_COMMON_ + +#include <stdio.h> +#include <stdbool.h> +#include <unistd.h> + +#include <rte_cycles.h> +#include <rte_ethdev.h> +#include <rte_eventdev.h> +#include <rte_event_eth_rx_adapter.h> +#include <rte_lcore.h> +#include <rte_malloc.h> +#include <rte_mempool.h> +#include <rte_prefetch.h> +#include <rte_spinlock.h> + +#include "evt_common.h" +#include "evt_options.h" +#include "evt_test.h" + +struct test_pipeline; + +struct worker_data { + uint64_t processed_pkts; + uint8_t dev_id; + uint8_t port_id; + struct test_pipeline *t; +} __rte_cache_aligned; + +struct test_pipeline { + /* Don't change the offset of "done". Signal handler use this memory + * to terminate all lcores work. + */ + int done; + uint8_t nb_workers; + uint8_t mt_unsafe; + enum evt_test_result result; + uint32_t nb_flows; + uint64_t outstand_pkts; + struct rte_mempool *pool; + struct worker_data worker[EVT_MAX_PORTS]; + struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; + rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS]; + struct evt_options *opt; + uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; +} __rte_cache_aligned; + +int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); + +#endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 03/14] app/eventdev: add mempool setup and destroy 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 04/14] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh ` (9 subsequent siblings) 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 29 +++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index aa3481247..ff60fc36c 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,35 @@ #include "test_pipeline_common.h" +int +pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + t->pool = rte_pktmbuf_pool_create(test->name, /* mempool name */ + opt->pool_sz, /* number of elements*/ + 512, /* cache size*/ + 0, + RTE_MBUF_DEFAULT_BUF_SIZE, + opt->socket_id); /* flags */ + + if (t->pool == NULL) { + evt_err("failed to create mempool"); + return -ENOMEM; + } + + return 0; +} + +void +pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + struct test_pipeline *t = evt_test_priv(test); + + rte_mempool_free(t->pool); +} + int pipeline_test_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 645571cf5..569db1de5 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -52,6 +52,8 @@ struct test_pipeline { } __rte_cache_aligned; int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 04/14] app/eventdev: add pipeline opt dump and check functions 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 03/14] app/eventdev: add mempool " Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 05/14] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh ` (8 subsequent siblings) 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 84 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 ++ 2 files changed, 87 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index ff60fc36c..45e0652b8 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,90 @@ #include "test_pipeline_common.h" +int +pipeline_test_result(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + int i; + uint64_t total = 0; + struct test_pipeline *t = evt_test_priv(test); + + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; +} + +void +pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) +{ + evt_dump("nb_worker_lcores", "%d", evt_nr_active_lcores(opt->wlcores)); + evt_dump_worker_lcores(opt); + evt_dump_nb_stages(opt); + evt_dump("nb_evdev_ports", "%d", pipeline_nb_event_ports(opt)); + evt_dump("nb_evdev_queues", "%d", nb_queues); + evt_dump_queue_priority(opt); + evt_dump_sched_type_list(opt); + evt_dump_producer_type(opt); +} + +int +pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) +{ + unsigned int lcores; + /* + * N worker + 1 master + */ + lcores = 2; + + if (!rte_eth_dev_count()) { + evt_err("test needs minimum 1 ethernet dev"); + return -1; + } + + if (rte_lcore_count() < lcores) { + evt_err("test need minimum %d lcores", lcores); + return -1; + } + + /* Validate worker lcores */ + if (evt_lcores_has_overlap(opt->wlcores, rte_get_master_lcore())) { + evt_err("worker lcores overlaps with master lcore"); + return -1; + } + if (evt_has_disabled_lcore(opt->wlcores)) { + evt_err("one or more workers lcores are not enabled"); + return -1; + } + if (!evt_has_active_lcore(opt->wlcores)) { + evt_err("minimum one worker is required"); + return -1; + } + + if (nb_queues > EVT_MAX_QUEUES) { + evt_err("number of queues exceeds %d", EVT_MAX_QUEUES); + return -1; + } + if (pipeline_nb_event_ports(opt) > EVT_MAX_PORTS) { + evt_err("number of ports exceeds %d", EVT_MAX_PORTS); + return -1; + } + + if (evt_has_invalid_stage(opt)) + return -1; + + if (evt_has_invalid_sched_type(opt)) + return -1; + + return 0; +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 569db1de5..6e43eea2b 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -51,8 +51,11 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +int pipeline_test_result(struct evt_test *test, struct evt_options *opt); +int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 05/14] app/eventdev: add pipeline ethport setup and destroy 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (2 preceding siblings ...) 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 04/14] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 06/14] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh ` (7 subsequent siblings) 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add common ethdev port setup and destroy along with event dev destroy. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 91 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 ++ 2 files changed, 94 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 45e0652b8..c20815c25 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -89,6 +89,97 @@ pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) return 0; } +#define NB_RX_DESC 128 +#define NB_TX_DESC 512 +int +pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int i; + uint8_t nb_queues = 1; + uint8_t mt_state = 0; + struct test_pipeline *t = evt_test_priv(test); + struct rte_eth_rxconf rx_conf; + struct rte_eth_conf port_conf = { + .rxmode = { + .mq_mode = ETH_MQ_RX_RSS, + .max_rx_pkt_len = ETHER_MAX_LEN, + .offloads = DEV_RX_OFFLOAD_CRC_STRIP, + .ignore_offload_bitfield = 1, + }, + .rx_adv_conf = { + .rss_conf = { + .rss_key = NULL, + .rss_hf = ETH_RSS_IP, + }, + }, + }; + + RTE_SET_USED(opt); + if (!rte_eth_dev_count()) { + evt_err("No ethernet ports found.\n"); + return -ENODEV; + } + + for (i = 0; i < rte_eth_dev_count(); i++) { + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(struct rte_eth_dev_info)); + rte_eth_dev_info_get(i, &dev_info); + mt_state = !(dev_info.tx_offload_capa & + DEV_TX_OFFLOAD_MT_LOCKFREE); + rx_conf = dev_info.default_rxconf; + rx_conf.offloads = port_conf.rxmode.offloads; + + if (rte_eth_dev_configure(i, nb_queues, nb_queues, + &port_conf) + < 0) { + evt_err("Failed to configure eth port [%d]\n", i); + return -EINVAL; + } + + if (rte_eth_rx_queue_setup(i, 0, NB_RX_DESC, + rte_socket_id(), &rx_conf, t->pool) < 0) { + evt_err("Failed to setup eth port [%d] rx_queue: %d.\n", + i, 0); + return -EINVAL; + } + if (rte_eth_tx_queue_setup(i, 0, NB_TX_DESC, + rte_socket_id(), NULL) < 0) { + evt_err("Failed to setup eth port [%d] tx_queue: %d.\n", + i, 0); + return -EINVAL; + } + + t->mt_unsafe |= mt_state; + rte_eth_promiscuous_enable(i); + } + + return 0; +} + +void +pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + int i; + RTE_SET_USED(test); + RTE_SET_USED(opt); + + for (i = 0; i < rte_eth_dev_count(); i++) { + rte_event_eth_rx_adapter_stop(i); + rte_eth_dev_stop(i); + rte_eth_dev_close(i); + } +} + +void +pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(test); + + rte_event_dev_stop(opt->dev_id); + rte_event_dev_close(opt->dev_id); +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 6e43eea2b..d8ab797bb 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -54,9 +54,12 @@ struct test_pipeline { int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 06/14] app/eventdev: add event port setup and Rx adapter setup 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (3 preceding siblings ...) 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 05/14] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 07/14] app/eventdev: add Tx service setup Pavan Nikhilesh ` (6 subsequent siblings) 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Setup one port per worker and link to all queues and setup producer port based on Rx adapter capabilities. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 114 +++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 5 ++ 2 files changed, 119 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index c20815c25..63f54daef 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -157,6 +157,120 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) return 0; } +int +pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint8_t *queue_arr, uint8_t nb_queues, + const struct rte_event_port_conf p_conf) +{ + int i; + int ret; + uint8_t port; + struct test_pipeline *t = evt_test_priv(test); + + + /* setup one port per worker, linking to all queues */ + for (port = 0; port < evt_nr_active_lcores(opt->wlcores); port++) { + struct worker_data *w = &t->worker[port]; + + w->dev_id = opt->dev_id; + w->port_id = port; + w->t = t; + w->processed_pkts = 0; + + ret = rte_event_port_setup(opt->dev_id, port, &p_conf); + if (ret) { + evt_err("failed to setup port %d", port); + return ret; + } + + if (queue_arr == NULL) { + if (rte_event_port_link(opt->dev_id, port, NULL, NULL, + 0) != nb_queues) + goto link_fail; + } else { + for (i = 0; i < nb_queues; i++) { + if (rte_event_port_link(opt->dev_id, port, + &queue_arr[i], NULL, 1) != 1) + goto link_fail; + } + } + } + + return 0; + +link_fail: + evt_err("failed to link all queues to port %d", port); + return -EINVAL; +} + +int +pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf) +{ + int ret = 0; + uint16_t prod; + struct rte_event_eth_rx_adapter_queue_conf queue_conf; + + memset(&queue_conf, 0, + sizeof(struct rte_event_eth_rx_adapter_queue_conf)); + queue_conf.ev.sched_type = opt->sched_type_list[0]; + for (prod = 0; prod < rte_eth_dev_count(); prod++) { + uint32_t cap; + + ret = rte_event_eth_rx_adapter_caps_get(opt->dev_id, + prod, &cap); + if (ret) { + evt_err("failed to get event rx adapter[%d]" + " capabilities", + opt->dev_id); + return ret; + } + queue_conf.ev.queue_id = prod * stride; + ret = rte_event_eth_rx_adapter_create(prod, opt->dev_id, + &prod_conf); + if (ret) { + evt_err("failed to create rx adapter[%d]", prod); + return ret; + } + ret = rte_event_eth_rx_adapter_queue_add(prod, prod, -1, + &queue_conf); + if (ret) { + evt_err("failed to add rx queues to adapter[%d]", prod); + return ret; + } + + if (!(cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT)) { + uint32_t service_id; + + rte_event_eth_rx_adapter_service_id_get(prod, + &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("Failed to setup service core" + " for Rx adapter\n"); + return ret; + } + } + + ret = rte_eth_dev_start(prod); + if (ret) { + evt_err("Ethernet dev [%d] failed to start." + " Using synthetic producer", prod); + return ret; + } + + ret = rte_event_eth_rx_adapter_start(prod); + if (ret) { + evt_err("Rx adapter[%d] start failed", prod); + return ret; + } + printf("%s: Port[%d] using Rx adapter[%d] started\n", __func__, + prod, prod); + } + + return ret; +} + void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index d8ab797bb..f8c46c0d7 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -55,7 +55,12 @@ int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint8_t *queue_arr, uint8_t nb_queues, + const struct rte_event_port_conf p_conf); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 07/14] app/eventdev: add Tx service setup 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (4 preceding siblings ...) 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 06/14] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 08/14] app/eventdev: launch pipeline lcores Pavan Nikhilesh ` (5 subsequent siblings) 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Setup one port event port for Tx and link the respective event queue. Register the Tx function as a service to be called from a service core. The Tx function dequeues the events from the event queue and transmits the packet to its respective ethernet port. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 119 +++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 19 ++++- 2 files changed, 136 insertions(+), 2 deletions(-) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 63f54daef..98df423ae 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,58 @@ #include "test_pipeline_common.h" +static int32_t +pipeline_event_tx_burst_service_func(void *args) +{ + + int i; + struct tx_service_data *tx = args; + const uint8_t dev = tx->dev_id; + const uint8_t port = tx->port_id; + struct rte_event ev[BURST_SIZE + 1]; + + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, BURST_SIZE, 0); + + if (!nb_rx) { + for (i = 0; i < tx->nb_ethports; i++) + rte_eth_tx_buffer_flush(i, 0, tx->tx_buf[i]); + return 0; + } + + for (i = 0; i < nb_rx; i++) { + struct rte_mbuf *m = ev[i].mbuf; + rte_eth_tx_buffer(m->port, 0, tx->tx_buf[m->port], m); + } + tx->processed_pkts += nb_rx; + + return 0; +} + +static int32_t +pipeline_event_tx_service_func(void *args) +{ + + int i; + struct tx_service_data *tx = args; + const uint8_t dev = tx->dev_id; + const uint8_t port = tx->port_id; + struct rte_event ev; + + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!nb_rx) { + for (i = 0; i < tx->nb_ethports; i++) + rte_eth_tx_buffer_flush(i, 0, tx->tx_buf[i]); + return 0; + } + + struct rte_mbuf *m = ev.mbuf; + rte_eth_tx_buffer(m->port, 0, tx->tx_buf[m->port], m); + tx->processed_pkts++; + + return 0; +} + int pipeline_test_result(struct evt_test *test, struct evt_options *opt) { @@ -151,6 +203,10 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) } t->mt_unsafe |= mt_state; + t->tx_service.tx_buf[i] = + rte_malloc(NULL, RTE_ETH_TX_BUFFER_SIZE(BURST_SIZE), 0); + if (t->tx_service.tx_buf[i] == NULL) + rte_panic("Unable to allocate Tx buffer memory."); rte_eth_promiscuous_enable(i); } @@ -271,12 +327,75 @@ pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, return ret; } +int +pipeline_event_tx_service_setup(struct evt_test *test, struct evt_options *opt, + uint8_t tx_queue_id, uint8_t tx_port_id, + const struct rte_event_port_conf p_conf) +{ + int ret; + struct rte_service_spec serv; + struct test_pipeline *t = evt_test_priv(test); + struct tx_service_data *tx = &t->tx_service; + + ret = rte_event_port_setup(opt->dev_id, tx_port_id, &p_conf); + if (ret) { + evt_err("failed to setup port %d", tx_port_id); + return ret; + } + + if (rte_event_port_link(opt->dev_id, tx_port_id, &tx_queue_id, + NULL, 1) != 1) { + evt_err("failed to link queues to port %d", tx_port_id); + return -EINVAL; + } + + tx->dev_id = opt->dev_id; + tx->queue_id = tx_queue_id; + tx->port_id = tx_port_id; + tx->nb_ethports = rte_eth_dev_count(); + tx->t = t; + + /* Register Tx service */ + memset(&serv, 0, sizeof(struct rte_service_spec)); + snprintf(serv.name, sizeof(serv.name), "Tx_service"); + + if (evt_has_burst_mode(opt->dev_id)) + serv.callback = pipeline_event_tx_burst_service_func; + else + serv.callback = pipeline_event_tx_service_func; + + serv.callback_userdata = (void *)tx; + ret = rte_service_component_register(&serv, &tx->service_id); + if (ret) { + evt_err("failed to register Tx service"); + return ret; + } + + ret = evt_service_setup(tx->service_id); + if (ret) { + evt_err("Failed to setup service core for Tx service\n"); + return ret; + } + + rte_service_runstate_set(tx->service_id, 1); + + return 0; +} + + void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) { int i; RTE_SET_USED(test); RTE_SET_USED(opt); + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) { + rte_service_component_runstate_set(t->tx_service.service_id, 0); + rte_service_runstate_set(t->tx_service.service_id, 0); + rte_service_component_unregister(t->tx_service.service_id); + } for (i = 0; i < rte_eth_dev_count(); i++) { rte_event_eth_rx_adapter_stop(i); diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index f8c46c0d7..acbf688fb 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -19,6 +19,8 @@ #include <rte_mempool.h> #include <rte_prefetch.h> #include <rte_spinlock.h> +#include <rte_service.h> +#include <rte_service_component.h> #include "evt_common.h" #include "evt_options.h" @@ -33,6 +35,17 @@ struct worker_data { struct test_pipeline *t; } __rte_cache_aligned; +struct tx_service_data { + uint8_t dev_id; + uint8_t queue_id; + uint8_t port_id; + uint32_t service_id; + uint64_t processed_pkts; + uint16_t nb_ethports; + struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; + struct test_pipeline *t; +} __rte_cache_aligned; + struct test_pipeline { /* Don't change the offset of "done". Signal handler use this memory * to terminate all lcores work. @@ -45,8 +58,7 @@ struct test_pipeline { uint64_t outstand_pkts; struct rte_mempool *pool; struct worker_data worker[EVT_MAX_PORTS]; - struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; - rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS]; + struct tx_service_data tx_service; struct evt_options *opt; uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; @@ -57,6 +69,9 @@ int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, struct rte_event_port_conf prod_conf); +int pipeline_event_tx_service_setup(struct evt_test *test, + struct evt_options *opt, uint8_t tx_queue_id, + uint8_t tx_port_id, const struct rte_event_port_conf p_conf); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, uint8_t *queue_arr, uint8_t nb_queues, -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 08/14] app/eventdev: launch pipeline lcores 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (5 preceding siblings ...) 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 07/14] app/eventdev: add Tx service setup Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 09/14] app/eventdev: add pipeline queue test Pavan Nikhilesh ` (4 subsequent siblings) 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh The event master lcore's test termination and the logic to print the mpps are common for the queue and all types queue test. Move them as the common function. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 67 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 + 2 files changed, 69 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 98df423ae..6cad9357b 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -90,6 +90,73 @@ pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) evt_dump_producer_type(opt); } +static inline uint64_t +processed_pkts(struct test_pipeline *t) +{ + uint8_t i; + uint64_t total = 0; + + rte_smp_rmb(); + if (t->mt_unsafe) + total = t->tx_service.processed_pkts; + else + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + + return total; +} + +int +pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)) +{ + int ret, lcore_id; + struct test_pipeline *t = evt_test_priv(test); + + int port_idx = 0; + /* launch workers */ + RTE_LCORE_FOREACH_SLAVE(lcore_id) { + if (!(opt->wlcores[lcore_id])) + continue; + + ret = rte_eal_remote_launch(worker, + &t->worker[port_idx], lcore_id); + if (ret) { + evt_err("failed to launch worker %d", lcore_id); + return ret; + } + port_idx++; + } + + uint64_t perf_cycles = rte_get_timer_cycles(); + const uint64_t perf_sample = rte_get_timer_hz(); + + static float total_mpps; + static uint64_t samples; + + uint64_t prev_pkts = 0; + + while (t->done == false) { + const uint64_t new_cycles = rte_get_timer_cycles(); + + if ((new_cycles - perf_cycles) > perf_sample) { + const uint64_t curr_pkts = processed_pkts(t); + + float mpps = (float)(curr_pkts - prev_pkts)/1000000; + + prev_pkts = curr_pkts; + perf_cycles = new_cycles; + total_mpps += mpps; + ++samples; + printf(CLGRN"\r%.3f mpps avg %.3f mpps"CLNRM, + mpps, total_mpps/samples); + fflush(stdout); + } + } + printf("\n"); + return 0; +} + int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index acbf688fb..db2517baf 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -76,6 +76,8 @@ int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, uint8_t *queue_arr, uint8_t nb_queues, const struct rte_event_port_conf p_conf); +int pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 09/14] app/eventdev: add pipeline queue test 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (6 preceding siblings ...) 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 08/14] app/eventdev: launch pipeline lcores Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 10/14] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh ` (3 subsequent siblings) 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline queue test case that aims at testing the following: 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The pipeline queue test configures the eventdev with Q queues and P ports, where Q is (nb_ethdev * nb_stages) + nb_ethdev and P is nb_workers. The user can choose the number of workers and number of stages through the --wlcores and the --stlist application command line arguments respectively. The probed ethernet devices act as producer(s) for this application. The ethdevs are configured as event Rx adapters that enables them to injects events to eventdev based the first stage schedule type list requested by the user through --stlist the command line argument. Based on the number of stages to process(selected through --stlist), the application forwards the event to next upstream queue and when it reaches last stage in the pipeline if the event type is ATOMIC it is enqueued onto ethdev Tx queue else to maintain ordering the event type is set to ATOMIC and enqueued onto the last stage queue. On packet Tx, application increments the number events processed and print periodically in one second to get the number of events processed in one second. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline queue test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_queue.c | 237 ++++++++++++++++++++++++++++++++ 2 files changed, 238 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_queue.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index 1707318f2..94b489f41 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -26,5 +26,6 @@ SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c +SRCS-y += test_pipeline_queue.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c new file mode 100644 index 000000000..773c3ecaa --- /dev/null +++ b/app/test-eventdev/test_pipeline_queue.c @@ -0,0 +1,237 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_queue_nb_event_queues(struct evt_options *opt) +{ + uint16_t eth_count = rte_eth_dev_count(); + + return (eth_count * opt->nb_stages) + eth_count; +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_queue_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) + rte_service_component_runstate_set(t->tx_service.service_id, 1); + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + int nb_stages = opt->nb_stages; + uint8_t queue; + struct rte_event_dev_info info; + struct test_pipeline *t = evt_test_priv(test); + uint8_t tx_evqueue_id = 0; + uint8_t queue_arr[RTE_EVENT_MAX_QUEUES_PER_DEV]; + uint8_t nb_worker_queues = 0; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count() * (nb_stages); + + /* Extra port for Tx service. */ + if (t->mt_unsafe) { + tx_evqueue_id = nb_queues; + nb_ports++; + nb_queues++; + } else + nb_queues += rte_eth_dev_count(); + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + uint8_t slot; + + if (!t->mt_unsafe) { + slot = queue % (nb_stages + 1); + q_conf.schedule_type = slot == nb_stages ? + RTE_SCHED_TYPE_ATOMIC : + opt->sched_type_list[slot]; + } else { + slot = queue % nb_stages; + + if (queue == tx_evqueue_id) { + q_conf.schedule_type = RTE_SCHED_TYPE_ATOMIC; + q_conf.event_queue_cfg = + RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + } else { + q_conf.schedule_type = + opt->sched_type_list[slot]; + queue_arr[nb_worker_queues] = queue; + nb_worker_queues++; + } + } + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + /* + * If tx is multi thread safe then allow workers to do Tx else use Tx + * service to Tx packets. + */ + if (t->mt_unsafe) { + ret = pipeline_event_port_setup(test, opt, queue_arr, + nb_worker_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_tx_service_setup(test, opt, tx_evqueue_id, + nb_ports - 1, p_conf); + + } else + ret = pipeline_event_port_setup(test, opt, NULL, nb_queues, + p_conf); + + if (ret) + return ret; + /* + * The pipelines are setup in the following manner: + * + * eth_dev_count = 2, nb_stages = 2. + * + * Multi thread safe : + * queues = 6 + * stride = 3 + * + * event queue pipelines: + * eth0 -> q0 -> q1 -> (q2->tx) + * eth1 -> q3 -> q4 -> (q5->tx) + * + * q2, q5 configured as ATOMIC + * + * Multi thread unsafe : + * queues = 5 + * stride = 2 + * + * event queue pipelines: + * eth0 -> q0 -> q1 + * } (q4->tx) Tx service + * eth1 -> q2 -> q3 + * + * q4 configured as SINGLE_LINK|ATOMIC + */ + ret = pipeline_event_rx_adapter_setup(opt, + t->mt_unsafe ? nb_stages : nb_stages + 1, p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_queue_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_queue_nb_event_queues(opt)); +} + +static int +pipeline_queue_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_queue_nb_event_queues(opt)); +} + +static bool +pipeline_queue_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_queue_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_queue_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_queue = { + .cap_check = pipeline_queue_capability_check, + .opt_check = pipeline_queue_opt_check, + .opt_dump = pipeline_queue_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_queue_eventdev_setup, + .launch_lcores = pipeline_queue_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_queue); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 10/14] app/eventdev: add pipeline queue worker functions 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (7 preceding siblings ...) 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 09/14] app/eventdev: add pipeline queue test Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 11/14] app/eventdev: add pipeline atq test Pavan Nikhilesh ` (2 subsequent siblings) 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.h | 80 +++++++++ app/test-eventdev/test_pipeline_queue.c | 288 ++++++++++++++++++++++++++++++- 2 files changed, 367 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index db2517baf..5fb91607d 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -63,6 +63,86 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +#define BURST_SIZE 16 + +#define PIPELINE_WROKER_SINGLE_STAGE_INIT \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + struct rte_event ev + +#define PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT \ + int i; \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + struct rte_event ev[BURST_SIZE + 1] + +#define PIPELINE_WROKER_MULTI_STAGE_INIT \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + uint8_t cq_id; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + const uint8_t last_queue = t->opt->nb_stages - 1; \ + uint8_t *const sched_type_list = &t->sched_type_list[0]; \ + struct rte_event ev + +#define PIPELINE_WROKER_MULTI_STAGE_BURST_INIT \ + int i; \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + uint8_t cq_id; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + const uint8_t last_queue = t->opt->nb_stages - 1; \ + uint8_t *const sched_type_list = &t->sched_type_list[0]; \ + struct rte_event ev[BURST_SIZE + 1] + +static __rte_always_inline void +pipeline_fwd_event(struct rte_event *ev, uint8_t sched) +{ + ev->event_type = RTE_EVENT_TYPE_CPU; + ev->op = RTE_EVENT_OP_FORWARD; + ev->sched_type = sched; +} + +static __rte_always_inline void +pipeline_event_enqueue(const uint8_t dev, const uint8_t port, + struct rte_event *ev) +{ + while (rte_event_enqueue_burst(dev, port, ev, 1) != 1) + rte_pause(); +} + +static __rte_always_inline void +pipeline_event_enqueue_burst(const uint8_t dev, const uint8_t port, + struct rte_event *ev, const uint16_t nb_rx) +{ + uint16_t enq; + + enq = rte_event_enqueue_burst(dev, port, ev, nb_rx); + while (enq < nb_rx) { + enq += rte_event_enqueue_burst(dev, port, + ev + enq, nb_rx - enq); + } +} + +static __rte_always_inline void +pipeline_tx_pkt(struct rte_mbuf *mbuf) +{ + while (rte_eth_tx_burst(mbuf->port, 0, &mbuf, 1) != 1) + rte_pause(); +} + +static inline int +pipeline_nb_event_ports(struct evt_options *opt) +{ + return evt_nr_active_lcores(opt->wlcores); +} + int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c index 773c3ecaa..835fe0782 100644 --- a/app/test-eventdev/test_pipeline_queue.c +++ b/app/test-eventdev/test_pipeline_queue.c @@ -15,10 +15,296 @@ pipeline_queue_nb_event_queues(struct evt_options *opt) return (eth_count * opt->nb_stages) + eth_count; } +static int +pipeline_queue_worker_single_stage_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + w->processed_pkts++; + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + + +static int +pipeline_queue_worker_multi_stage_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + ev.queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id == last_queue) { + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + ev[i].queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id == last_queue) { + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_queue_worker_single_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_single_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_queue_worker_single_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_single_stage_burst_fwd( + arg); + } else { + if (!burst && mt_safe) + return pipeline_queue_worker_multi_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_multi_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_queue_worker_multi_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_multi_stage_burst_fwd(arg); + + } rte_panic("invalid worker\n"); } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 11/14] app/eventdev: add pipeline atq test 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (8 preceding siblings ...) 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 10/14] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 12/14] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 13/14] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline test case that aims at testing the following with ``all types queue`` eventdev scheme. 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The atq queue test functions as same as ``pipeline_queue`` test. The difference is, It uses, ``all type queue scheme`` instead of separate queues for each stage and thus reduces the number of queues required to realize the use case. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline atq test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_atq.c | 223 ++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_atq.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index 94b489f41..e600e21c4 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -27,5 +27,6 @@ SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c SRCS-y += test_pipeline_queue.c +SRCS-y += test_pipeline_atq.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c new file mode 100644 index 000000000..6c9ac6119 --- /dev/null +++ b/app/test-eventdev/test_pipeline_atq.c @@ -0,0 +1,223 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_atq_nb_event_queues(struct evt_options *opt) +{ + RTE_SET_USED(opt); + + return rte_eth_dev_count(); +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_atq_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) + rte_service_component_runstate_set(t->tx_service.service_id, 1); + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + uint8_t queue; + struct rte_event_dev_info info; + struct test_pipeline *t = evt_test_priv(test); + uint8_t tx_evqueue_id = 0; + uint8_t queue_arr[RTE_EVENT_MAX_QUEUES_PER_DEV]; + uint8_t nb_worker_queues = 0; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count(); + + /* One extra port and queueu for Tx service */ + if (t->mt_unsafe) { + tx_evqueue_id = nb_queues; + nb_ports++; + nb_queues++; + } + + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + q_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_ALL_TYPES; + + if (t->mt_unsafe) { + if (queue == tx_evqueue_id) { + q_conf.event_queue_cfg = + RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + } else { + queue_arr[nb_worker_queues] = queue; + nb_worker_queues++; + } + } + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + if (t->mt_unsafe) { + ret = pipeline_event_port_setup(test, opt, queue_arr, + nb_worker_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_tx_service_setup(test, opt, tx_evqueue_id, + nb_ports - 1, p_conf); + } else + ret = pipeline_event_port_setup(test, opt, NULL, nb_queues, + p_conf); + + if (ret) + return ret; + + /* + * The pipelines are setup in the following manner: + * + * eth_dev_count = 2, nb_stages = 2, atq mode + * + * Multi thread safe : + * queues = 2 + * stride = 1 + * + * event queue pipelines: + * eth0 -> q0 ->tx + * eth1 -> q1 ->tx + * + * q0, q1 are configured as ATQ so, all the different stages can + * be enqueued on the same queue. + * + * Multi thread unsafe : + * queues = 3 + * stride = 1 + * + * event queue pipelines: + * eth0 -> q0 + * } (q3->tx) Tx service + * eth1 -> q1 + * + * q0,q1 are configured as stated above. + * q3 configured as SINGLE_LINK|ATOMIC. + */ + ret = pipeline_event_rx_adapter_setup(opt, 1, p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_atq_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_atq_nb_event_queues(opt)); +} + +static int +pipeline_atq_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_atq_nb_event_queues(opt)); +} + +static bool +pipeline_atq_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_atq_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_atq_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_atq = { + .cap_check = pipeline_atq_capability_check, + .opt_check = pipeline_atq_opt_check, + .opt_dump = pipeline_atq_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_atq_eventdev_setup, + .launch_lcores = pipeline_atq_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_atq); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 12/14] app/eventdev: add pipeline atq worker functions 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (9 preceding siblings ...) 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 11/14] app/eventdev: add pipeline atq test Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 13/14] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- app/test-eventdev/test_pipeline_atq.c | 280 +++++++++++++++++++++++++++++++++- 1 file changed, 279 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c index 6c9ac6119..36abbddda 100644 --- a/app/test-eventdev/test_pipeline_atq.c +++ b/app/test-eventdev/test_pipeline_atq.c @@ -15,10 +15,288 @@ pipeline_atq_nb_event_queues(struct evt_options *opt) return rte_eth_dev_count(); } +static int +pipeline_atq_worker_single_stage_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + w->processed_pkts++; + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_multi_stage_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + w->processed_pkts++; + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + w->processed_pkts++; + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_atq_worker_single_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_single_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_atq_worker_single_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_single_stage_burst_fwd(arg); + } else { + if (!burst && mt_safe) + return pipeline_atq_worker_multi_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_multi_stage_fwd(arg); + if (burst && mt_safe) + return pipeline_atq_worker_multi_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_multi_stage_burst_fwd(arg); + } rte_panic("invalid worker\n"); } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 13/14] doc: add pipeline test in eventdev test guide 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (10 preceding siblings ...) 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 12/14] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh @ 2018-01-16 15:17 ` Pavan Nikhilesh 11 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:17 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Marko Kovacevic <marko.kovacevic@intel.com> --- .../img/eventdev_pipeline_atq_test_generic.svg | 3263 +++++++++++++++++ .../img/eventdev_pipeline_atq_test_lockfree.svg | 3344 +++++++++++++++++ .../img/eventdev_pipeline_queue_test_generic.svg | 3548 ++++++++++++++++++ .../img/eventdev_pipeline_queue_test_lockfree.svg | 3826 ++++++++++++++++++++ doc/guides/tools/testeventdev.rst | 191 + 5 files changed, 14172 insertions(+) create mode 100644 doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg create mode 100644 doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg create mode 100644 doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg create mode 100644 doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg diff --git a/doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg b/doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg new file mode 100644 index 000000000..e33367989 --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg @@ -0,0 +1,3263 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_atq_test_generic.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker39727" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#0059ff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path39725" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ac14ff;stroke-width:1pt;stroke-opacity:1;fill:#ac14ff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32611" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32603" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#3550fd;stroke-width:1pt;stroke-opacity:1;fill:#00ffff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32601" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32341" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3507fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32339" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient12130" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop12128" /> + </linearGradient> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(42,-46)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,68)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-62,12)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-48)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.29498181,0,0,0.88423137,181.75943,23.045895)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158,30)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78263355,0,0,0.98605918,90.06838,5.0013749)" /> + <linearGradient + gradientTransform="matrix(0.78674479,0,0,1.0000825,87.83543,1.2279738)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,86.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(39.91461,10.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(41.91461,64.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,140.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient12132" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient16362" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-0" + style="overflow:visible"> + <path + id="path3704-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-6" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-1" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.6515192,0,0,1.0041442,189.20967,67.917365)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.53467" + inkscape:cx="477.6217" + inkscape:cy="141.14731" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="1920" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.87847757;stroke-opacity:1" + id="rect3697" + width="493.61813" + height="283.13986" + x="126.96397" + y="104.52792" + rx="0" + ry="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="-2.6719971" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="-2.6719971" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="407.29071" + y="283.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="406.83691" + y="228.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="405.98169" + y="168.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.87885" + y="163.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="410.87885" + y="163.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.61511" + y="223.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="410.61511" + y="223.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="412.61511" + y="281.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="412.61511" + y="281.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="416.13348" + y="186.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="416.13348" + y="186.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="417.25244" + y="246.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="417.25244" + y="246.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="419.25244" + y="302.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="419.25244" + y="302.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="197.72678" + y="169.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.03741" + y="212.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="199.03741" + y="212.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.49991107;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="72.33783" + height="197.82672" + x="301.47455" + y="139.32401" + ry="5.0019679" + rx="2.6784446" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.09811" + y="170.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="330.09811" + y="170.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 248.59877,185.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 248.59877,185.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.44385" + y="188.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="199.44385" + y="188.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="317.5372" + y="174.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="420.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="420.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_atq </tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="195.64139" + y="225.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="196.95203" + y="268.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="196.95203" + y="268.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="330.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 248.51338,241.5091 H 313.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 248.51338,241.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="244.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="199.35846" + y="244.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+3</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="317.45184" + y="230.86047" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="197.64139" + y="279.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="198.95203" + y="322.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="198.95203" + y="322.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="326.01276" + y="280.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="326.01276" + y="280.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 248.51338,295.50911 H 313.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 248.51338,295.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="298.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="199.35846" + y="298.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="317.45184" + y="284.86047" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="73.356339" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="73.356339" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="224.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="224.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="333.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="333.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="242.32845" + y="123.36828" + id="text5219-26"><tspan + sodipodi:role="line" + x="242.32845" + y="123.36828" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = number of ethernet dev + 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="235.66333" + y="353.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="235.66333" + y="353.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all stage queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="152.30008" + y="228.73854" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="152.30008" + y="228.73854" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="152.30008" + y="240.32199" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="279.86127" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="279.86127" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="291.44473" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="177.92682" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="177.92682" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="189.51027" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="285.26294" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894427)"><tspan + sodipodi:role="line" + id="tspan1220" + x="285.26294" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <g + id="g20550" + transform="translate(25.709043,-190.70754)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13899" + transform="translate(-54.904385,-3.0966742)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13911" + transform="translate(-54.904385,-1.0966741)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="259.86884" + y="164.78368" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="259.86884" + y="164.78368" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="259.86884" + y="174.78368" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="217.84813" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="217.84813" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="227.84813" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="271.71359" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="271.71359" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="281.71359" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <g + id="g16360" + transform="matrix(1.0874414,0,0,0.99912695,-98.49816,-6.4077434)"> + <ellipse + ry="24.258638" + rx="22.831659" + cy="161.21605" + cx="559.68445" + id="path8843" + style="fill:#ffffff;fill-opacity:0.98039216;stroke:url(#linearGradient16362);stroke-opacity:1" /> + <text + transform="scale(0.92048084,1.0863887)" + id="text5219-2-4-3-3-4-5" + y="146.21904" + x="588.44147" + style="font-style:normal;font-weight:normal;font-size:11.04576969px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92048085" + xml:space="preserve"><tspan + id="tspan1265-5" + style="font-size:7.97750044px;line-height:1.25;stroke-width:0.92048085" + y="146.21904" + x="588.44147" + sodipodi:role="line">Tx Service</tspan><tspan + style="font-size:7.97750044px;line-height:1.25;stroke-width:0.92048085" + y="152.00201" + x="588.44147" + sodipodi:role="line" + id="tspan39139" /><tspan + style="font-size:7.97750044px;line-height:1.25;stroke-width:0.92048085" + y="156.19092" + x="588.44147" + sodipodi:role="line" + id="tspan39141">port n + 1</tspan></text> + </g> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.22799993, 1.61399996;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker32613)" + d="m 511.70299,212.50867 c -0.1614,-10.49392 -0.32276,-20.98539 -0.48409,-31.47439" + id="path5226-6-2-1-2-4-5-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6" + inkscape:original-d="m 511.70299,212.50867 c -0.16039,-10.49394 -0.32175,-20.98541 -0.48409,-31.47439" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935)" + d="m 523.50111,175.62989 c 10.13298,2.21215 20.26379,4.42384 30.39241,6.63504" + id="path5226-6-2-1-2-4-5-1-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1" + inkscape:original-d="m 523.50111,175.62989 c 10.13323,2.21099 20.26404,4.42267 30.39241,6.63504" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-5)" + d="m 523.50111,175.62989 c 9.91161,22.53065 19.82206,45.05865 29.73129,67.58389" + id="path5226-6-2-1-2-4-5-1-5-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-7" + inkscape:original-d="m 523.50111,175.62989 c 9.91282,22.53012 19.82327,45.05812 29.73129,67.58389" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-5-5)" + d="m 523.50111,175.62989 c 10.16587,40.76181 20.3305,81.51868 30.49385,122.27042" + id="path5226-6-2-1-2-4-5-1-5-6-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-7-9" + inkscape:original-d="m 523.50111,175.62989 c 10.16704,40.76152 20.33167,81.51839 30.49385,122.27042" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.88;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.52, 0.88;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1)" + d="m 457.99431,185.46823 c 13.07561,8.94945 26.1492,17.89751 39.22072,26.84415" + id="path5226-6-2-1-2-4-5-1-5-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2" + inkscape:original-d="m 457.99431,185.46823 c 13.0764,8.9483 26.14999,17.89636 39.22072,26.84415" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6)" + d="m 459.47717,245.71809 c 12.28232,-4.96638 24.56173,-9.93159 36.83817,-14.89559" + id="path5226-6-2-1-2-4-5-1-5-0-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9" + inkscape:original-d="m 459.47717,245.71809 c 12.28211,-4.96689 24.56152,-9.9321 36.83817,-14.89559" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6-6)" + d="m 459.54824,301.10401 c 12.64219,-20.37548 25.28189,-40.74696 37.91905,-61.11434" + id="path5226-6-2-1-2-4-5-1-5-0-2-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + inkscape:original-d="M 459.54824,301.10401 C 472.1907,280.7287 484.8304,260.35722 497.46729,239.98967" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="595.27808" + y="136.64076" + id="text5219-2-4-3-3-4-54-8-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="595.27808" + y="139.22064" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-7" /></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-1);stroke-width:0.86395979;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-9" + width="25.451954" + height="24.448395" + x="499.03128" + y="213.32141" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="548.03668" + y="204.31348" + id="text5219-2-4-3-3-4-54-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="548.03668" + y="204.31348" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6">Single </tspan><tspan + sodipodi:role="line" + x="548.03668" + y="213.27945" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan57836">Link Q</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3)" + d="m 356.74765,186.83153 c 15.88009,-0.11696 31.75919,-0.23391 47.6373,-0.35085" + id="path5226-6-2-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61" + inkscape:original-d="m 356.74765,186.83153 c 15.88008,-0.11795 31.75918,-0.2349 47.6373,-0.35085" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-0)" + d="m 357.05625,242.97941 c 15.74231,0.0176 31.48469,0.0352 47.22712,0.0528" + id="path5226-6-2-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-1" + inkscape:original-d="m 357.05625,242.97941 c 15.74231,0.0166 31.48469,0.0342 47.22712,0.0528" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89337438;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.57349763, 0.89337441;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-9)" + d="m 356.67155,297.12049 c 15.97521,0.0733 31.94945,0.14663 47.92273,0.21994" + id="path5226-6-2-5-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-9" + inkscape:original-d="m 356.67155,297.12049 c 15.97521,0.0723 31.94945,0.14563 47.92273,0.21994" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="606.06958" + y="346.46628" + id="text5219-2-4-3-3-4-54-8-7" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="606.06958" + y="346.46628" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2">(Tx Generic)</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg b/doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg new file mode 100644 index 000000000..d7f10de3e --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg @@ -0,0 +1,3344 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_atq_test_lockfree.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker39727" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#0059ff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path39725" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#3550fd;stroke-width:1pt;stroke-opacity:1;fill:#004eff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32611" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32603" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#3550fd;stroke-width:1pt;stroke-opacity:1;fill:#00ffff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32601" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32341" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3507fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32339" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient12130" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop12128" /> + </linearGradient> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(42,-46)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,66)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-62,12)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-46)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.29498181,0,0,0.88423137,181.75943,19.045895)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158,30)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78263355,0,0,0.98605918,90.06838,5.0013749)" /> + <linearGradient + gradientTransform="matrix(0.78674479,0,0,1.0000825,87.83543,1.2279738)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,86.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(39.91461,10.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(41.91461,64.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,140.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient12132" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-0" + style="overflow:visible"> + <path + id="path3704-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-6" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8-3-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1-9-5" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2-0-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8-3-8-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1-9-5-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2-0-0-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.7519532" + inkscape:cx="479.73438" + inkscape:cy="163.58755" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.87847757;stroke-opacity:1" + id="rect3697" + width="493.61813" + height="283.13986" + x="126.96397" + y="104.52792" + rx="0" + ry="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="-2.6719971" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="-2.6719971" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="407.29071" + y="281.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="406.83691" + y="228.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="405.98169" + y="170.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.87885" + y="167.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="410.87885" + y="167.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.61511" + y="225.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="410.61511" + y="225.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="412.61511" + y="279.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="412.61511" + y="279.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="416.13348" + y="188.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="416.13348" + y="188.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="417.25244" + y="246.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="417.25244" + y="246.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="417.25244" + y="300.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="417.25244" + y="300.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="197.72678" + y="169.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.03741" + y="212.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="199.03741" + y="212.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.49991107;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="72.33783" + height="197.82672" + x="301.47455" + y="135.32401" + ry="5.0019679" + rx="2.6784446" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.09811" + y="170.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="330.09811" + y="170.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 248.59877,185.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 248.59877,185.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.44385" + y="188.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="199.44385" + y="188.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="317.5372" + y="174.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="420.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="420.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_atq</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="195.64139" + y="225.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="196.95203" + y="268.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="196.95203" + y="268.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="330.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 248.51338,241.5091 H 313.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 248.51338,241.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="244.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="199.35846" + y="244.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="317.45184" + y="230.86047" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="197.64139" + y="279.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="198.95203" + y="322.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="198.95203" + y="322.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="326.01276" + y="280.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="326.01276" + y="280.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 248.51338,295.50911 H 313.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 248.51338,295.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="298.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="199.35846" + y="298.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="317.45184" + y="284.86047" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="73.356339" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="73.356339" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="224.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="224.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="333.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="333.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="237.36301" + y="123.36828" + id="text5219-26"><tspan + sodipodi:role="line" + x="237.36301" + y="123.36828" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = number of ethernet dev</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="257.66333" + y="349.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="257.66333" + y="349.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="152.30008" + y="228.73854" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="152.30008" + y="228.73854" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="152.30008" + y="240.32199" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="279.86127" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="279.86127" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="291.44473" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="177.92682" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="177.92682" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="189.51027" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="285.26294" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894427)"><tspan + sodipodi:role="line" + id="tspan1220" + x="285.26294" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <g + id="g20550" + transform="translate(25.709043,-190.70754)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13899" + transform="translate(-54.904385,-3.0966742)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13911" + transform="translate(-54.904385,-1.0966741)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="259.86884" + y="164.78368" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="259.86884" + y="164.78368" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="259.86884" + y="174.78368" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="217.84813" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="217.84813" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="227.84813" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="271.71359" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="271.71359" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="281.71359" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5)" + d="m 457.99431,185.46823 c 31.2384,-0.0621 62.47105,-0.12411 93.69789,-0.18615" + id="path5226-6-2-1-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2" + inkscape:original-d="m 457.99431,185.46823 c 31.2384,-0.0631 62.47105,-0.12511 93.69789,-0.18615" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.17235398;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.37883186, 1.17235398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8)" + d="m 458.98776,243.31381 c 30.75465,0.34725 61.50362,0.69444 92.24687,1.04156" + id="path5226-6-2-1-2-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7" + inkscape:original-d="m 458.98776,243.31381 c 30.75466,0.34624 61.50363,0.69343 92.24687,1.04156" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.16870522;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3496418, 1.16870522;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6)" + d="m 459.54824,299.10401 c 30.65551,0.002 61.30536,0.005 91.94951,0.007" + id="path5226-6-2-1-2-3-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2" + inkscape:original-d="m 459.54824,299.10401 c 30.65551,10e-4 61.30536,0.004 91.94951,0.007" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="595.27808" + y="136.64076" + id="text5219-2-4-3-3-4-54-8-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="595.27808" + y="139.22064" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-7" /></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3)" + d="m 355.63703,186.40543 c 15.88009,-0.11696 31.75919,-0.23391 47.6373,-0.35085" + id="path5226-6-2-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61" + inkscape:original-d="m 355.63703,186.40543 c 15.88008,-0.11795 31.75918,-0.2349 47.6373,-0.35085" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7)" + d="m 357.65509,243.31452 c 15.34193,0.0849 30.68288,0.16971 46.02286,0.25456" + id="path5226-6-2-5-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-1" + inkscape:original-d="m 357.65509,243.31452 c 15.34194,0.0839 30.68289,0.16871 46.02286,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-5)" + d="m 357.04968,297.80194 c 15.88007,0.0849 31.75917,0.16972 47.6373,0.25457" + id="path5226-6-2-5-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-7" + inkscape:original-d="m 357.04968,297.80194 c 15.88008,0.0839 31.75918,0.16871 47.6373,0.25457" + sodipodi:nodetypes="cc" + inkscape:transform-center-x="-1.1449687" + inkscape:transform-center-y="0.16602181" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6)" + d="m 457.99431,185.46823 c 31.25478,19.01586 62.50452,38.02866 93.74916,57.03836" + id="path5226-6-2-1-2-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3" + inkscape:original-d="m 457.99431,185.46823 c 31.25549,19.01469 62.50523,38.02749 93.74916,57.03836" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-5)" + d="m 457.99431,185.46823 c 31.56499,37.01842 63.12523,74.03128 94.6807,111.03854" + id="path5226-6-2-1-2-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-39" + inkscape:original-d="m 457.99431,185.46823 c 31.56606,37.01751 63.1263,74.03037 94.6807,111.03854" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8)" + d="m 458.98776,243.31381 c 31.07558,-18.77571 62.14525,-37.54785 93.20895,-56.31638" + id="path5226-6-2-1-2-6-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2" + inkscape:original-d="m 458.98776,243.31381 c 31.0754,-18.776 62.14507,-37.54814 93.20895,-56.31638" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8-3)" + d="m 458.98776,243.31381 c 30.92496,17.37709 61.8449,34.75135 92.75972,52.12273" + id="path5226-6-2-1-2-6-9-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2-0" + inkscape:original-d="m 458.98776,243.31381 c 30.92563,17.3759 61.84557,34.75016 92.75972,52.12273" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8-3-8)" + d="m 459.54824,299.10401 c 2.93308,-3.49891 5.86612,-6.99776 21.41494,-25.54619 15.54881,-18.54843 43.70884,-52.14099 71.86417,-85.72794" + id="path5226-6-2-1-2-6-9-8-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2-0-0" + inkscape:original-d="m 459.54824,299.10401 c 2.93318,-3.49883 5.86622,-6.99768 8.79911,-10.49656 28.16472,-33.59799 56.32477,-67.19054 84.48,-100.77757" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8-3-8-6)" + d="m 459.54824,299.10401 c 30.71954,-17.76325 61.43324,-35.52313 92.14101,-53.27957" + id="path5226-6-2-1-2-6-9-8-9-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2-0-0-8" + inkscape:original-d="m 459.54824,299.10401 c 30.71936,-17.76357 61.43306,-35.52344 92.14101,-53.27957" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="602.09888" + y="347.66293" + id="text5219-2-4-3-3-4-54" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="602.09888" + y="347.66293" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4">(Tx Lock free)</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg b/doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg new file mode 100644 index 000000000..732d48867 --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg @@ -0,0 +1,3548 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_queue_test_generic.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76448972,0,0,0.86504892,-92.637138,19.716473)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,10.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,7.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6-6" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-1" + style="overflow:visible"> + <path + id="path3704-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-172.30743,65.79201)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.30743,9.792007)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(17.692568,-46.20799)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14db;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14e4;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient16362" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-4" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker55720" + style="overflow:visible"> + <path + id="path55718" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-9" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-3" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78531244,0,0,1,50.143534,82.69878)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-8" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-84" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-8-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-84-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-5" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-9-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-5-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-0-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-9-72" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-5-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-0-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.7519532" + inkscape:cx="423.24137" + inkscape:cy="157.27924" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="1920" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="56.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.7960096;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.47435" + height="193.53508" + x="217.62262" + y="133.47206" + ry="4.8934555" + rx="6.9415913" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="452.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="452.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_queue</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+3</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.83277988px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.90273178" + x="199.11482" + y="111.36845" + id="text5219-26" + transform="scale(0.90273173,1.1077488)"><tspan + sodipodi:role="line" + x="199.11482" + y="111.36845" + id="tspan5223-10" + style="font-size:9.02731705px;line-height:1.25;stroke-width:0.90273178">total queues = (number of stages * number of ethernet dev) + 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.11939621px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92661637" + x="257.40421" + y="328.77414" + id="text5219-26-2" + transform="scale(0.92661635,1.0791953)"><tspan + sodipodi:role="line" + x="257.40421" + y="328.77414" + id="tspan5223-10-7" + style="font-size:9.26616383px;line-height:1.25;stroke-width:0.92661637">All workers are linked to all stage queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="422.98328" + y="281.69067" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="424.52948" + y="225.81598" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="423.67426" + y="169.85918" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="426.57141" + y="167.14041" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="426.57141" + y="167.14041" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="428.30768" + y="223.46143" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="428.30768" + y="223.46143" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="426.30768" + y="279.46143" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="426.30768" + y="279.46143" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="431.82605" + y="188.68941" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="431.82605" + y="188.68941" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="432.94501" + y="244.64697" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="432.94501" + y="244.64697" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="432.94501" + y="300.64697" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="432.94501" + y="300.64697" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <g + style="display:inline;opacity:1" + id="g20550" + transform="translate(65.401608,-190.91553)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13899" + transform="translate(-17.21182,-3.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13911" + transform="translate(-15.21182,-1.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g16360" + transform="matrix(1.0983058,0,0,1.0572541,-82.192809,-6.5664741)"> + <ellipse + ry="24.258638" + rx="22.831659" + cy="161.21605" + cx="559.68445" + id="path8843" + style="fill:#ffffff;fill-opacity:0.98039216;stroke:url(#linearGradient16362);stroke-opacity:1" /> + <text + transform="scale(0.94727182,1.0556632)" + id="text5219-2-4-3-3-4-5" + y="151.93637" + x="571.61011" + style="font-style:normal;font-weight:normal;font-size:10.76524448px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.89710373" + xml:space="preserve"><tspan + id="tspan1265-5" + style="font-size:7.77489901px;line-height:1.25;stroke-width:0.89710373" + y="151.93637" + x="571.61011" + sodipodi:role="line">Tx Service</tspan><tspan + style="font-size:7.77489901px;line-height:1.25;stroke-width:0.89710373" + y="161.655" + x="571.61011" + sodipodi:role="line" + id="tspan40484">port n + 1</tspan></text> + </g> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1)" + d="m 475.41709,184.68945 c 14.66204,14.27312 29.32201,28.54422 43.97988,42.81328" + id="path5226-6-2-1-2-4-5-1-5-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2" + inkscape:original-d="m 475.41709,184.68945 c 14.66303,14.2721 29.323,28.54321 43.97988,42.81328" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14db;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6)" + d="m 476.32916,241.51456 c 13.86102,-0.34 27.7191,-0.67992 41.57417,-1.01977" + id="path5226-6-2-1-2-4-5-1-5-0-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9" + inkscape:original-d="m 476.32916,241.51456 c 13.861,-0.34097 27.71908,-0.6809 41.57417,-1.01977" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14e4;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6-6)" + d="m 474.31327,298.61285 c 15.031,-15.59075 30.05891,-31.17831 45.0837,-46.76263" + id="path5226-6-2-1-2-4-5-1-5-0-2-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + inkscape:original-d="m 474.31327,298.61285 c 15.03102,-15.59073 30.05893,-31.17829 45.0837,-46.76263" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-3);stroke-width:0.94657081;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-7" + width="30.678661" + height="24.347494" + x="519.39697" + y="227.50273" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="571.69696" + y="217.79964" + id="text5219-2-4-3-3-4-54-8-7-5" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="571.69696" + y="217.79964" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2-3">Single</tspan><tspan + sodipodi:role="line" + x="571.69696" + y="226.76561" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan6344">Link Q</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:1.01153409;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-6)" + d="m 391.11413,240.54267 c 10.00574,0.0714 20.0096,0.14275 30.01154,0.21411" + id="path5226-6-2-1-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-84" + inkscape:original-d="m 391.11413,240.54267 c 10.00575,0.0704 20.00961,0.14176 30.01154,0.21411" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-1)" + d="m 391.05684,296.14092 c 0,0 29.39924,0 29.39924,0" + id="path5226-6-2-1-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-9" + inkscape:original-d="m 391.05684,296.14092 h 29.39924" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:1.00593412;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-6-0)" + d="m 389.52644,184.04076 c 10.20679,0.0726 20.41171,0.14509 30.61473,0.21761" + id="path5226-6-2-1-3-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-84-8" + inkscape:original-d="m 389.52644,184.04076 c 10.2068,0.0715 20.41172,0.14408 30.61473,0.21761" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-2)" + d="m 533.61005,227.17178 c -0.11895,-11.90475 -0.23788,-23.80683 -0.35678,-35.70623" + id="path5226-6-2-1-2-4-5-1-5-0-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-6" + inkscape:original-d="m 533.61005,227.17178 c -0.11794,-11.90476 -0.23687,-23.80684 -0.35678,-35.70623" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-9)" + d="m 554.18303,173.89676 c 12.12572,3.64515 24.2491,7.2896 36.37012,10.93334" + id="path5226-6-2-1-2-4-5-1-5-0-48" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-0" + inkscape:original-d="m 554.18303,173.89676 c 12.12608,3.64396 24.24946,7.28841 36.37012,10.93334" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-9-7)" + d="m 554.18303,173.89676 c 12.8469,22.86455 25.6922,45.72625 38.53585,68.585" + id="path5226-6-2-1-2-4-5-1-5-0-48-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-0-7" + inkscape:original-d="m 554.18303,173.89676 c 12.84809,22.86388 25.69339,45.72558 38.53585,68.585" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-9-72)" + d="m 554.18303,173.89676 c 12.65661,41.60787 25.31164,83.21054 37.96507,124.80795" + id="path5226-6-2-1-2-4-5-1-5-0-48-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-0-6" + inkscape:original-d="m 554.18303,173.89676 c 12.65781,41.6075 25.31284,83.21018 37.96507,124.80795" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="665.00641" + y="346.51425" + id="text5219-2-4-3-3-4-54-8-7" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="665.00641" + y="346.51425" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2">(Tx Generic)</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg b/doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg new file mode 100644 index 000000000..c0a365c7b --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg @@ -0,0 +1,3826 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_queue_test_lockfree.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3824" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path3822" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect3820" + effect="bspline" /> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill:#02d804;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill:#02d804;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#02d804;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1;fill-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#02d804;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1;fill-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#02d804;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#02d804;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill:#02d804;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76445442,0,0,0.88401527,-92.618478,17.226692)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,8.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,5.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6-6" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-1" + style="overflow:visible"> + <path + id="path3704-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-124.30743,61.79201)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.69257,7.792007)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(63.692568,-46.20799)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-4" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker55720" + style="overflow:visible"> + <path + id="path55718" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-9" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5-3" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-180.52717,84.698813)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5-3-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-180.02718,138.1988)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5-3-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-180.52718,28.351329)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-70" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-1-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-2-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-70-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-2-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-6-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6-2-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1-3-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-5-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-45" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-45-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-2-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-45-0" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.0000001" + inkscape:cx="394.32532" + inkscape:cy="122.70585" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="1920" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="54.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.80466998;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.46568" + height="197.77837" + x="217.62695" + y="133.47639" + ry="5.0007453" + rx="6.9412708" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-2</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="458.47687" + y="382.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="458.47687" + y="382.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_queue</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-2</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-2</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.83277988px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.90273178" + x="143.72733" + y="111.36845" + id="text5219-26" + transform="scale(0.90273173,1.1077488)"><tspan + sodipodi:role="line" + x="143.72733" + y="111.36845" + id="tspan5223-10" + style="font-size:9.02731705px;line-height:1.25;stroke-width:0.90273178">total queues = (number of stages * number of ethernet dev) + number of ethernet dev</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="470.98328" + y="277.69067" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="470.52948" + y="223.81598" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="469.67426" + y="169.85918" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="474.57141" + y="167.14041" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="474.57141" + y="167.14041" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="474.30768" + y="221.46143" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="474.30768" + y="221.46143" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="476.30768" + y="275.46143" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="476.30768" + y="275.46143" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="479.82605" + y="188.68941" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="479.82605" + y="188.68941" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="480.94501" + y="242.64697" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="480.94501" + y="242.64697" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="482.94501" + y="296.64697" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="482.94501" + y="296.64697" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <g + style="display:inline;opacity:1" + id="g20550" + transform="translate(57.401608,-196.91553)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13899" + transform="translate(-23.21182,-3.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13911" + transform="translate(-23.21182,-7.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95700002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.48400021, 0.95700002;stroke-dashoffset:0;stroke-opacity:1;marker-mid:url(#marker15998);marker-end:url(#TriangleOutM-5-2-6-5);paint-order:normal" + d="m 521.74679,185.45912 c 20.71371,-0.15575 41.42073,-0.31145 62.12958,-0.46716" + id="path5226-6-2-1-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2" + inkscape:original-d="m 521.74679,185.45912 c 20.7137,-0.15674 41.42072,-0.31244 62.12958,-0.46716" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95306396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.43676775, 0.95306398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8)" + d="m 522.24235,239.92415 c 20.38012,-0.0124 40.75646,-0.0248 61.129,-0.0372" + id="path5226-6-2-1-2-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7" + inkscape:original-d="m 522.24235,239.92415 c 20.38012,-0.0134 40.75646,-0.0258 61.129,-0.0372" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.94650453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.35805474, 0.94650456;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6)" + d="m 523.10585,294.89606 c 20.2117,-0.0124 40.41967,-0.0248 60.6239,-0.0372" + id="path5226-6-2-1-2-3-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2" + inkscape:original-d="m 523.10585,294.89606 c 20.2117,-0.0134 40.41967,-0.0258 60.6239,-0.0372" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5-3);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5-7" + width="39.065548" + height="24.347494" + x="417.01007" + y="229.50275" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5-3-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5-7-5" + width="39.065548" + height="24.347494" + x="417.51007" + y="283.00275" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5-3-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5-7-9" + width="39.065548" + height="24.347494" + x="417.01007" + y="173.15526" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95740849;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.48890185, 0.95740849;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-1)" + d="m 521.87938,186.09993 c 20.73597,17.34221 41.46901,34.68197 62.19908,52.01925" + id="path5226-6-2-1-2-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-70" + inkscape:original-d="m 521.87938,186.09993 c 20.73687,17.34113 41.46991,34.68089 62.19908,52.01925" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95740849;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.48890185, 0.95740849;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-1-3)" + d="m 521.87938,186.09993 c 21.06868,35.47019 42.13466,70.93583 63.19791,106.39688" + id="path5226-6-2-1-2-9-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-70-0" + inkscape:original-d="m 521.87938,186.09993 c 21.06986,35.46949 42.13584,70.93513 63.19791,106.39688" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95306396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.43676775, 0.95306398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-2)" + d="m 522.24235,239.92415 c 20.72818,-17.7602 41.45248,-35.51707 62.17286,-53.27058" + id="path5226-6-2-1-2-3-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-1" + inkscape:original-d="m 522.24235,239.92415 c 20.72811,-17.76028 41.45241,-35.51715 62.17286,-53.27058" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95306396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.43676775, 0.95306398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-2-7)" + d="m 522.24235,239.92415 c 20.71136,17.70863 41.41982,35.41479 62.12534,53.11843" + id="path5226-6-2-1-2-3-8-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-1-2" + inkscape:original-d="m 522.24235,239.92415 c 20.71227,17.70756 41.42074,35.41372 62.12534,53.11843" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.94650453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.35805474, 0.94650456;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6-2)" + d="m 523.10585,294.89606 c 20.70868,-35.85548 41.41388,-71.70493 62.11558,-107.54833" + id="path5226-6-2-1-2-3-9-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2-7" + inkscape:original-d="m 523.10585,294.89606 c 20.709,-35.8553 41.41419,-71.70475 62.11558,-107.54833" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.94650453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.35805474, 0.94650456;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6-2-9)" + d="m 523.10585,294.89606 c 20.34274,-17.79464 40.68168,-35.58595 61.0168,-53.37392" + id="path5226-6-2-1-2-3-9-5-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2-7-2" + inkscape:original-d="m 523.10585,294.89606 c 20.34268,-17.79471 40.68162,-35.58602 61.0168,-53.37392" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="425.99841" + y="170.84738" + id="text5219-1-9-4-3-0-7-9"><tspan + sodipodi:role="line" + x="425.99841" + y="170.84738" + id="tspan5223-2-3-5-6-6-1-7" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="421.81482" + y="225.84738" + id="text5219-1-9-4-3-0-7-4-3"><tspan + sodipodi:role="line" + x="421.81482" + y="225.84738" + id="tspan5223-2-3-5-6-6-1-5-6" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="422.31482" + y="280.84738" + id="text5219-1-9-4-3-0-7-4-6-1"><tspan + sodipodi:role="line" + x="422.31482" + y="280.84738" + id="tspan5223-2-3-5-6-6-1-5-8-2" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="460.42477" + y="171.1732" + id="text5219-2-4-3-3-4-54-9" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="460.42477" + y="171.1732" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3">Atomic Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="460.36716" + y="222.90977" + id="text5219-2-4-3-3-4-54-9-1" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="460.36716" + y="222.90977" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9">Atomic Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="460.9137" + y="272.77069" + id="text5219-2-4-3-3-4-54-9-1-4" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="460.9137" + y="272.77069" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7">Atomic Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="259.7941" + y="171.67656" + id="text5219-2-4-3-3-4-54-9-1-4-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="259.7941" + y="171.67656" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7-4">Stage0 Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="324.4256" + y="171.78726" + id="text5219-2-4-3-3-4-54-9-1-4-8-5" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="324.4256" + y="171.78726" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7-4-0">Stage1 Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="387.27545" + y="171.78726" + id="text5219-2-4-3-3-4-54-9-1-4-8-3" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="387.27545" + y="171.78726" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7-4-6">Stage2 Q</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3)" + d="m 389.46533,184.29883 c 8.27875,0.0849 16.55652,0.16972 24.83331,0.25456" + id="path5226-6-2-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61" + inkscape:original-d="m 389.46533,184.29883 c 8.27876,0.0838 16.55653,0.16871 24.83331,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-5)" + d="m 390.72763,241.07286 c 7.69543,-0.0401 15.38987,-0.0803 23.08331,-0.12044" + id="path5226-6-2-5-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-7" + inkscape:original-d="m 390.72763,241.07286 c 7.69543,-0.0411 15.38986,-0.0813 23.08331,-0.12044" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-5-5)" + d="m 391.22399,294.91526 c 7.7371,0.002 15.47319,0.003 23.20831,0.005" + id="path5226-6-2-5-6-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-7-9" + inkscape:original-d="m 391.22399,294.91526 c 7.7371,5.2e-4 15.47319,0.002 23.20831,0.005" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7)" + d="m 456.10017,185.43501 c 3.94541,0.0849 7.88985,0.16973 11.83331,0.25456" + id="path5226-6-2-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-2" + inkscape:original-d="m 456.10017,185.43501 c 3.94543,0.0838 7.88987,0.16871 11.83331,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7-4)" + d="m 456.60293,240.94938 c 3.94541,0.0849 7.88985,0.16973 11.83331,0.25456" + id="path5226-6-2-5-5-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-2-4" + inkscape:original-d="m 456.60293,240.94938 c 3.94543,0.0839 7.88987,0.16871 11.83331,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7-3)" + d="m 457.60293,295.44938 c 3.94541,0.0849 7.88985,0.16973 11.83331,0.25456" + id="path5226-6-2-5-5-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-2-7" + inkscape:original-d="m 457.60293,295.44938 c 3.94543,0.0838 7.88987,0.16871 11.83331,0.25456" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="670.83521" + y="349.11719" + id="text5219-2-4-3-3-4-54" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="670.83521" + y="349.11719" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4">(Tx Lock free)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.11939621px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92661637" + x="252.78516" + y="328.88882" + id="text5219-26-2-3" + transform="scale(0.92661635,1.0791953)"><tspan + sodipodi:role="line" + x="252.78516" + y="328.88882" + id="tspan5223-10-7-6" + style="font-size:9.26616383px;line-height:1.25;stroke-width:0.92661637">All workers are linked to all queues</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/testeventdev.rst b/doc/guides/tools/testeventdev.rst index 9785e8431..77480ffe9 100644 --- a/doc/guides/tools/testeventdev.rst +++ b/doc/guides/tools/testeventdev.rst @@ -441,3 +441,194 @@ Example command to run perf ``all types queue`` test: sudo build/app/dpdk-test-eventdev --vdev=event_octeontx -- \ --test=perf_atq --plcores=2 --wlcore=3 --stlist=p --nb_pkts=0 + + +PIPELINE_QUEUE Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following: + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_queue_test: + +.. table:: Pipeline queue test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | (nb_producers | Queues will be configured based on the | + | | | * nb_stages) + | user requested sched type list(--stlist)| + | | | x | Here value of x is 1 in generic pipeline| + | | | | and nb_producers in lockfree pipeline | + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_queue_test_generic: + +.. figure:: img/eventdev_pipeline_queue_test_generic.* + +.. _figure_eventdev_pipeline_queue_test_lockfree: + +.. figure:: img/eventdev_pipeline_queue_test_lockfree.* + + pipeline queue test operation. + +The pipeline queue test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_queue_test`. + +The user can choose the number of workers and number of stages through the +``--wlcores`` and the ``--stlist`` application command line arguments +respectively. + +The number of producers depends on the number of ethernet devices detected and +each ethernet device is configured as a event_eth_rx_adapter that acts as a +producer. + +The producer(s) injects the events to eventdev based the first stage sched type +list requested by the user through ``--stlist`` the command line argument. + +Based on the number of stages to process(selected through ``--stlist``), +The application forwards the event to next upstream queue and when it reaches +the last stage in the pipeline if the event type is ``atomic`` it is enqueued +onto ethdev Tx queue else to maintain ordering the event type is set to +``atomic`` and enqueued onto the last stage queue. + +If the ethernet has ``DEV_TX_OFFLOAD_MT_LOCKFREE`` capability then the worker +cores transmit the packets directly. Else the worker cores enqueue the packet +onto the ``SINGLE_LINK_QUEUE`` that is managed by a Tx service. The Tx service +dequeues the packet and transmits it. + +On packet Tx, application increments the number events processed and print +periodically in one second to get the number of events processed in one +second. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=a + + +PIPELINE_ATQ Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following with +``all types queue`` eventdev scheme. + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_atq_test: + +.. table:: Pipeline atq test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | nb_producers + | Queues will be configured based on the | + | | | x | user requested sched type list(--stlist)| + | | | | where x = 1 in generic pipeline and 0 | + | | | | in lockfree pipeline | + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_atq_test_generic: + +.. figure:: img/eventdev_pipeline_atq_test_generic.* + +.. _figure_eventdev_pipeline_atq_test_lockfree: + +.. figure:: img/eventdev_pipeline_atq_test_lockfree.* + + pipeline atq test operation. + +The pipeline atq test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_atq_test`. + +The atq queue test functions as same as ``pipeline_queue`` test. The difference +is, It uses, ``all type queue scheme`` instead of separate queues for each +stage and thus reduces the number of queues required to realize the use case. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=a -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v5 14/14] doc: update 18.02 release notes 2017-11-30 7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh ` (6 preceding siblings ...) 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2018-01-16 15:20 ` Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh 9 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:20 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma, marko.kovacevic, john.mcnamara Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- doc/guides/rel_notes/release_18_02.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/guides/rel_notes/release_18_02.rst b/doc/guides/rel_notes/release_18_02.rst index b2dc39cfe..b528cdc50 100644 --- a/doc/guides/rel_notes/release_18_02.rst +++ b/doc/guides/rel_notes/release_18_02.rst @@ -53,6 +53,15 @@ New Features With this change, application can use OPDL PMD by eventdev api. +* **Added New pipeline use case for dpdk-test-eventdev application** + The pipeline case can be used to simulate various stages in a real world + application from packet receive to transmit while maintaining the packet + ordering also measure the performance of the event device across the stages + of the pipeline. + + The pipeline use case has been made generic to work will all the event + devices based on the capabilities. + API Changes ----------- -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs 2017-11-30 7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh ` (7 preceding siblings ...) 2018-01-16 15:20 ` [dpdk-dev] [PATCH v5 14/14] doc: update 18.02 release notes Pavan Nikhilesh @ 2018-01-16 15:39 ` Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh ` (12 more replies) 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh 9 siblings, 13 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:39 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add logs for packet distribution across worker cores to be printed along with the test results. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- v6 Changes: - Missed retaining acks when sending previous patchset. v5 Changes: - Split generic and lockfree diagrams for pipeline queue and atq in documentation. - Update release notes. v4 Changes: - remove Tx queue locking by using Tx service ml discussion : http://dpdk.org/ml/archives/dev/2018-January/086730.html v3 Changes: - Add SPDX licence tags - Redo atq test app/test-eventdev/evt_main.c | 3 +++ app/test-eventdev/test_perf_common.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c index 3c27f3216..57bb94570 100644 --- a/app/test-eventdev/evt_main.c +++ b/app/test-eventdev/evt_main.c @@ -29,6 +29,9 @@ signal_handler(int signum) rte_eal_mp_wait_lcore(); + if (test->ops.test_result) + test->ops.test_result(test, &opt); + if (test->ops.eventdev_destroy) test->ops.eventdev_destroy(test, &opt); diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c index e82cc9301..e279d81a5 100644 --- a/app/test-eventdev/test_perf_common.c +++ b/app/test-eventdev/test_perf_common.c @@ -8,8 +8,20 @@ int perf_test_result(struct evt_test *test, struct evt_options *opt) { RTE_SET_USED(opt); + int i; + uint64_t total = 0; struct test_perf *t = evt_test_priv(test); + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 02/14] app/eventdev: add pipeline test setup and destroy 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2018-01-16 15:39 ` Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 03/14] app/eventdev: add mempool " Pavan Nikhilesh ` (11 subsequent siblings) 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:39 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Pipeline test has the queue and all types queue variants. Introduce test_pipeline_common* to share the common code between those tests. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-eventdev/Makefile | 2 ++ app/test-eventdev/test_pipeline_common.c | 44 ++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 57 ++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_common.c create mode 100644 app/test-eventdev/test_pipeline_common.h diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index cfe567a6d..1707318f2 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -25,4 +25,6 @@ SRCS-y += test_perf_common.c SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c +SRCS-y += test_pipeline_common.c + include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c new file mode 100644 index 000000000..aa3481247 --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.c @@ -0,0 +1,44 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +int +pipeline_test_setup(struct evt_test *test, struct evt_options *opt) +{ + void *test_pipeline; + + test_pipeline = rte_zmalloc_socket(test->name, + sizeof(struct test_pipeline), RTE_CACHE_LINE_SIZE, + opt->socket_id); + if (test_pipeline == NULL) { + evt_err("failed to allocate test_pipeline memory"); + goto nomem; + } + test->test_priv = test_pipeline; + + struct test_pipeline *t = evt_test_priv(test); + + t->nb_workers = evt_nr_active_lcores(opt->wlcores); + t->outstand_pkts = opt->nb_pkts * evt_nr_active_lcores(opt->wlcores); + t->done = false; + t->nb_flows = opt->nb_flows; + t->result = EVT_TEST_FAILED; + t->opt = opt; + opt->prod_type = EVT_PROD_TYPE_ETH_RX_ADPTR; + memcpy(t->sched_type_list, opt->sched_type_list, + sizeof(opt->sched_type_list)); + return 0; +nomem: + return -ENOMEM; +} + +void +pipeline_test_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + + rte_free(test->test_priv); +} diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h new file mode 100644 index 000000000..645571cf5 --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.h @@ -0,0 +1,57 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#ifndef _TEST_PIPELINE_COMMON_ +#define _TEST_PIPELINE_COMMON_ + +#include <stdio.h> +#include <stdbool.h> +#include <unistd.h> + +#include <rte_cycles.h> +#include <rte_ethdev.h> +#include <rte_eventdev.h> +#include <rte_event_eth_rx_adapter.h> +#include <rte_lcore.h> +#include <rte_malloc.h> +#include <rte_mempool.h> +#include <rte_prefetch.h> +#include <rte_spinlock.h> + +#include "evt_common.h" +#include "evt_options.h" +#include "evt_test.h" + +struct test_pipeline; + +struct worker_data { + uint64_t processed_pkts; + uint8_t dev_id; + uint8_t port_id; + struct test_pipeline *t; +} __rte_cache_aligned; + +struct test_pipeline { + /* Don't change the offset of "done". Signal handler use this memory + * to terminate all lcores work. + */ + int done; + uint8_t nb_workers; + uint8_t mt_unsafe; + enum evt_test_result result; + uint32_t nb_flows; + uint64_t outstand_pkts; + struct rte_mempool *pool; + struct worker_data worker[EVT_MAX_PORTS]; + struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; + rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS]; + struct evt_options *opt; + uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; +} __rte_cache_aligned; + +int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); + +#endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 03/14] app/eventdev: add mempool setup and destroy 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh @ 2018-01-16 15:39 ` Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 04/14] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh ` (10 subsequent siblings) 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:39 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 29 +++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index aa3481247..ff60fc36c 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,35 @@ #include "test_pipeline_common.h" +int +pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + t->pool = rte_pktmbuf_pool_create(test->name, /* mempool name */ + opt->pool_sz, /* number of elements*/ + 512, /* cache size*/ + 0, + RTE_MBUF_DEFAULT_BUF_SIZE, + opt->socket_id); /* flags */ + + if (t->pool == NULL) { + evt_err("failed to create mempool"); + return -ENOMEM; + } + + return 0; +} + +void +pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + struct test_pipeline *t = evt_test_priv(test); + + rte_mempool_free(t->pool); +} + int pipeline_test_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 645571cf5..569db1de5 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -52,6 +52,8 @@ struct test_pipeline { } __rte_cache_aligned; int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 04/14] app/eventdev: add pipeline opt dump and check functions 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 03/14] app/eventdev: add mempool " Pavan Nikhilesh @ 2018-01-16 15:39 ` Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 05/14] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh ` (9 subsequent siblings) 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:39 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.c | 84 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 ++ 2 files changed, 87 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index ff60fc36c..45e0652b8 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,90 @@ #include "test_pipeline_common.h" +int +pipeline_test_result(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + int i; + uint64_t total = 0; + struct test_pipeline *t = evt_test_priv(test); + + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; +} + +void +pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) +{ + evt_dump("nb_worker_lcores", "%d", evt_nr_active_lcores(opt->wlcores)); + evt_dump_worker_lcores(opt); + evt_dump_nb_stages(opt); + evt_dump("nb_evdev_ports", "%d", pipeline_nb_event_ports(opt)); + evt_dump("nb_evdev_queues", "%d", nb_queues); + evt_dump_queue_priority(opt); + evt_dump_sched_type_list(opt); + evt_dump_producer_type(opt); +} + +int +pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) +{ + unsigned int lcores; + /* + * N worker + 1 master + */ + lcores = 2; + + if (!rte_eth_dev_count()) { + evt_err("test needs minimum 1 ethernet dev"); + return -1; + } + + if (rte_lcore_count() < lcores) { + evt_err("test need minimum %d lcores", lcores); + return -1; + } + + /* Validate worker lcores */ + if (evt_lcores_has_overlap(opt->wlcores, rte_get_master_lcore())) { + evt_err("worker lcores overlaps with master lcore"); + return -1; + } + if (evt_has_disabled_lcore(opt->wlcores)) { + evt_err("one or more workers lcores are not enabled"); + return -1; + } + if (!evt_has_active_lcore(opt->wlcores)) { + evt_err("minimum one worker is required"); + return -1; + } + + if (nb_queues > EVT_MAX_QUEUES) { + evt_err("number of queues exceeds %d", EVT_MAX_QUEUES); + return -1; + } + if (pipeline_nb_event_ports(opt) > EVT_MAX_PORTS) { + evt_err("number of ports exceeds %d", EVT_MAX_PORTS); + return -1; + } + + if (evt_has_invalid_stage(opt)) + return -1; + + if (evt_has_invalid_sched_type(opt)) + return -1; + + return 0; +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 569db1de5..6e43eea2b 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -51,8 +51,11 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +int pipeline_test_result(struct evt_test *test, struct evt_options *opt); +int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 05/14] app/eventdev: add pipeline ethport setup and destroy 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (2 preceding siblings ...) 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 04/14] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh @ 2018-01-16 15:39 ` Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 06/14] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh ` (8 subsequent siblings) 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:39 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add common ethdev port setup and destroy along with event dev destroy. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.c | 91 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 ++ 2 files changed, 94 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 45e0652b8..c20815c25 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -89,6 +89,97 @@ pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) return 0; } +#define NB_RX_DESC 128 +#define NB_TX_DESC 512 +int +pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int i; + uint8_t nb_queues = 1; + uint8_t mt_state = 0; + struct test_pipeline *t = evt_test_priv(test); + struct rte_eth_rxconf rx_conf; + struct rte_eth_conf port_conf = { + .rxmode = { + .mq_mode = ETH_MQ_RX_RSS, + .max_rx_pkt_len = ETHER_MAX_LEN, + .offloads = DEV_RX_OFFLOAD_CRC_STRIP, + .ignore_offload_bitfield = 1, + }, + .rx_adv_conf = { + .rss_conf = { + .rss_key = NULL, + .rss_hf = ETH_RSS_IP, + }, + }, + }; + + RTE_SET_USED(opt); + if (!rte_eth_dev_count()) { + evt_err("No ethernet ports found.\n"); + return -ENODEV; + } + + for (i = 0; i < rte_eth_dev_count(); i++) { + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(struct rte_eth_dev_info)); + rte_eth_dev_info_get(i, &dev_info); + mt_state = !(dev_info.tx_offload_capa & + DEV_TX_OFFLOAD_MT_LOCKFREE); + rx_conf = dev_info.default_rxconf; + rx_conf.offloads = port_conf.rxmode.offloads; + + if (rte_eth_dev_configure(i, nb_queues, nb_queues, + &port_conf) + < 0) { + evt_err("Failed to configure eth port [%d]\n", i); + return -EINVAL; + } + + if (rte_eth_rx_queue_setup(i, 0, NB_RX_DESC, + rte_socket_id(), &rx_conf, t->pool) < 0) { + evt_err("Failed to setup eth port [%d] rx_queue: %d.\n", + i, 0); + return -EINVAL; + } + if (rte_eth_tx_queue_setup(i, 0, NB_TX_DESC, + rte_socket_id(), NULL) < 0) { + evt_err("Failed to setup eth port [%d] tx_queue: %d.\n", + i, 0); + return -EINVAL; + } + + t->mt_unsafe |= mt_state; + rte_eth_promiscuous_enable(i); + } + + return 0; +} + +void +pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + int i; + RTE_SET_USED(test); + RTE_SET_USED(opt); + + for (i = 0; i < rte_eth_dev_count(); i++) { + rte_event_eth_rx_adapter_stop(i); + rte_eth_dev_stop(i); + rte_eth_dev_close(i); + } +} + +void +pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(test); + + rte_event_dev_stop(opt->dev_id); + rte_event_dev_close(opt->dev_id); +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 6e43eea2b..d8ab797bb 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -54,9 +54,12 @@ struct test_pipeline { int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 06/14] app/eventdev: add event port setup and Rx adapter setup 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (3 preceding siblings ...) 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 05/14] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh @ 2018-01-16 15:39 ` Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 07/14] app/eventdev: add Tx service setup Pavan Nikhilesh ` (7 subsequent siblings) 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:39 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Setup one port per worker and link to all queues and setup producer port based on Rx adapter capabilities. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.c | 114 +++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 5 ++ 2 files changed, 119 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index c20815c25..63f54daef 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -157,6 +157,120 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) return 0; } +int +pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint8_t *queue_arr, uint8_t nb_queues, + const struct rte_event_port_conf p_conf) +{ + int i; + int ret; + uint8_t port; + struct test_pipeline *t = evt_test_priv(test); + + + /* setup one port per worker, linking to all queues */ + for (port = 0; port < evt_nr_active_lcores(opt->wlcores); port++) { + struct worker_data *w = &t->worker[port]; + + w->dev_id = opt->dev_id; + w->port_id = port; + w->t = t; + w->processed_pkts = 0; + + ret = rte_event_port_setup(opt->dev_id, port, &p_conf); + if (ret) { + evt_err("failed to setup port %d", port); + return ret; + } + + if (queue_arr == NULL) { + if (rte_event_port_link(opt->dev_id, port, NULL, NULL, + 0) != nb_queues) + goto link_fail; + } else { + for (i = 0; i < nb_queues; i++) { + if (rte_event_port_link(opt->dev_id, port, + &queue_arr[i], NULL, 1) != 1) + goto link_fail; + } + } + } + + return 0; + +link_fail: + evt_err("failed to link all queues to port %d", port); + return -EINVAL; +} + +int +pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf) +{ + int ret = 0; + uint16_t prod; + struct rte_event_eth_rx_adapter_queue_conf queue_conf; + + memset(&queue_conf, 0, + sizeof(struct rte_event_eth_rx_adapter_queue_conf)); + queue_conf.ev.sched_type = opt->sched_type_list[0]; + for (prod = 0; prod < rte_eth_dev_count(); prod++) { + uint32_t cap; + + ret = rte_event_eth_rx_adapter_caps_get(opt->dev_id, + prod, &cap); + if (ret) { + evt_err("failed to get event rx adapter[%d]" + " capabilities", + opt->dev_id); + return ret; + } + queue_conf.ev.queue_id = prod * stride; + ret = rte_event_eth_rx_adapter_create(prod, opt->dev_id, + &prod_conf); + if (ret) { + evt_err("failed to create rx adapter[%d]", prod); + return ret; + } + ret = rte_event_eth_rx_adapter_queue_add(prod, prod, -1, + &queue_conf); + if (ret) { + evt_err("failed to add rx queues to adapter[%d]", prod); + return ret; + } + + if (!(cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT)) { + uint32_t service_id; + + rte_event_eth_rx_adapter_service_id_get(prod, + &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("Failed to setup service core" + " for Rx adapter\n"); + return ret; + } + } + + ret = rte_eth_dev_start(prod); + if (ret) { + evt_err("Ethernet dev [%d] failed to start." + " Using synthetic producer", prod); + return ret; + } + + ret = rte_event_eth_rx_adapter_start(prod); + if (ret) { + evt_err("Rx adapter[%d] start failed", prod); + return ret; + } + printf("%s: Port[%d] using Rx adapter[%d] started\n", __func__, + prod, prod); + } + + return ret; +} + void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index d8ab797bb..f8c46c0d7 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -55,7 +55,12 @@ int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint8_t *queue_arr, uint8_t nb_queues, + const struct rte_event_port_conf p_conf); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 07/14] app/eventdev: add Tx service setup 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (4 preceding siblings ...) 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 06/14] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh @ 2018-01-16 15:39 ` Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 08/14] app/eventdev: launch pipeline lcores Pavan Nikhilesh ` (6 subsequent siblings) 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:39 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Setup one port event port for Tx and link the respective event queue. Register the Tx function as a service to be called from a service core. The Tx function dequeues the events from the event queue and transmits the packet to its respective ethernet port. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.c | 119 +++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 19 ++++- 2 files changed, 136 insertions(+), 2 deletions(-) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 63f54daef..98df423ae 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,58 @@ #include "test_pipeline_common.h" +static int32_t +pipeline_event_tx_burst_service_func(void *args) +{ + + int i; + struct tx_service_data *tx = args; + const uint8_t dev = tx->dev_id; + const uint8_t port = tx->port_id; + struct rte_event ev[BURST_SIZE + 1]; + + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, BURST_SIZE, 0); + + if (!nb_rx) { + for (i = 0; i < tx->nb_ethports; i++) + rte_eth_tx_buffer_flush(i, 0, tx->tx_buf[i]); + return 0; + } + + for (i = 0; i < nb_rx; i++) { + struct rte_mbuf *m = ev[i].mbuf; + rte_eth_tx_buffer(m->port, 0, tx->tx_buf[m->port], m); + } + tx->processed_pkts += nb_rx; + + return 0; +} + +static int32_t +pipeline_event_tx_service_func(void *args) +{ + + int i; + struct tx_service_data *tx = args; + const uint8_t dev = tx->dev_id; + const uint8_t port = tx->port_id; + struct rte_event ev; + + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!nb_rx) { + for (i = 0; i < tx->nb_ethports; i++) + rte_eth_tx_buffer_flush(i, 0, tx->tx_buf[i]); + return 0; + } + + struct rte_mbuf *m = ev.mbuf; + rte_eth_tx_buffer(m->port, 0, tx->tx_buf[m->port], m); + tx->processed_pkts++; + + return 0; +} + int pipeline_test_result(struct evt_test *test, struct evt_options *opt) { @@ -151,6 +203,10 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) } t->mt_unsafe |= mt_state; + t->tx_service.tx_buf[i] = + rte_malloc(NULL, RTE_ETH_TX_BUFFER_SIZE(BURST_SIZE), 0); + if (t->tx_service.tx_buf[i] == NULL) + rte_panic("Unable to allocate Tx buffer memory."); rte_eth_promiscuous_enable(i); } @@ -271,12 +327,75 @@ pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, return ret; } +int +pipeline_event_tx_service_setup(struct evt_test *test, struct evt_options *opt, + uint8_t tx_queue_id, uint8_t tx_port_id, + const struct rte_event_port_conf p_conf) +{ + int ret; + struct rte_service_spec serv; + struct test_pipeline *t = evt_test_priv(test); + struct tx_service_data *tx = &t->tx_service; + + ret = rte_event_port_setup(opt->dev_id, tx_port_id, &p_conf); + if (ret) { + evt_err("failed to setup port %d", tx_port_id); + return ret; + } + + if (rte_event_port_link(opt->dev_id, tx_port_id, &tx_queue_id, + NULL, 1) != 1) { + evt_err("failed to link queues to port %d", tx_port_id); + return -EINVAL; + } + + tx->dev_id = opt->dev_id; + tx->queue_id = tx_queue_id; + tx->port_id = tx_port_id; + tx->nb_ethports = rte_eth_dev_count(); + tx->t = t; + + /* Register Tx service */ + memset(&serv, 0, sizeof(struct rte_service_spec)); + snprintf(serv.name, sizeof(serv.name), "Tx_service"); + + if (evt_has_burst_mode(opt->dev_id)) + serv.callback = pipeline_event_tx_burst_service_func; + else + serv.callback = pipeline_event_tx_service_func; + + serv.callback_userdata = (void *)tx; + ret = rte_service_component_register(&serv, &tx->service_id); + if (ret) { + evt_err("failed to register Tx service"); + return ret; + } + + ret = evt_service_setup(tx->service_id); + if (ret) { + evt_err("Failed to setup service core for Tx service\n"); + return ret; + } + + rte_service_runstate_set(tx->service_id, 1); + + return 0; +} + + void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) { int i; RTE_SET_USED(test); RTE_SET_USED(opt); + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) { + rte_service_component_runstate_set(t->tx_service.service_id, 0); + rte_service_runstate_set(t->tx_service.service_id, 0); + rte_service_component_unregister(t->tx_service.service_id); + } for (i = 0; i < rte_eth_dev_count(); i++) { rte_event_eth_rx_adapter_stop(i); diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index f8c46c0d7..acbf688fb 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -19,6 +19,8 @@ #include <rte_mempool.h> #include <rte_prefetch.h> #include <rte_spinlock.h> +#include <rte_service.h> +#include <rte_service_component.h> #include "evt_common.h" #include "evt_options.h" @@ -33,6 +35,17 @@ struct worker_data { struct test_pipeline *t; } __rte_cache_aligned; +struct tx_service_data { + uint8_t dev_id; + uint8_t queue_id; + uint8_t port_id; + uint32_t service_id; + uint64_t processed_pkts; + uint16_t nb_ethports; + struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; + struct test_pipeline *t; +} __rte_cache_aligned; + struct test_pipeline { /* Don't change the offset of "done". Signal handler use this memory * to terminate all lcores work. @@ -45,8 +58,7 @@ struct test_pipeline { uint64_t outstand_pkts; struct rte_mempool *pool; struct worker_data worker[EVT_MAX_PORTS]; - struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; - rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS]; + struct tx_service_data tx_service; struct evt_options *opt; uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; @@ -57,6 +69,9 @@ int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, struct rte_event_port_conf prod_conf); +int pipeline_event_tx_service_setup(struct evt_test *test, + struct evt_options *opt, uint8_t tx_queue_id, + uint8_t tx_port_id, const struct rte_event_port_conf p_conf); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, uint8_t *queue_arr, uint8_t nb_queues, -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 08/14] app/eventdev: launch pipeline lcores 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (5 preceding siblings ...) 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 07/14] app/eventdev: add Tx service setup Pavan Nikhilesh @ 2018-01-16 15:39 ` Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 09/14] app/eventdev: add pipeline queue test Pavan Nikhilesh ` (5 subsequent siblings) 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:39 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh The event master lcore's test termination and the logic to print the mpps are common for the queue and all types queue test. Move them as the common function. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.c | 67 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 + 2 files changed, 69 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 98df423ae..6cad9357b 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -90,6 +90,73 @@ pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) evt_dump_producer_type(opt); } +static inline uint64_t +processed_pkts(struct test_pipeline *t) +{ + uint8_t i; + uint64_t total = 0; + + rte_smp_rmb(); + if (t->mt_unsafe) + total = t->tx_service.processed_pkts; + else + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + + return total; +} + +int +pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)) +{ + int ret, lcore_id; + struct test_pipeline *t = evt_test_priv(test); + + int port_idx = 0; + /* launch workers */ + RTE_LCORE_FOREACH_SLAVE(lcore_id) { + if (!(opt->wlcores[lcore_id])) + continue; + + ret = rte_eal_remote_launch(worker, + &t->worker[port_idx], lcore_id); + if (ret) { + evt_err("failed to launch worker %d", lcore_id); + return ret; + } + port_idx++; + } + + uint64_t perf_cycles = rte_get_timer_cycles(); + const uint64_t perf_sample = rte_get_timer_hz(); + + static float total_mpps; + static uint64_t samples; + + uint64_t prev_pkts = 0; + + while (t->done == false) { + const uint64_t new_cycles = rte_get_timer_cycles(); + + if ((new_cycles - perf_cycles) > perf_sample) { + const uint64_t curr_pkts = processed_pkts(t); + + float mpps = (float)(curr_pkts - prev_pkts)/1000000; + + prev_pkts = curr_pkts; + perf_cycles = new_cycles; + total_mpps += mpps; + ++samples; + printf(CLGRN"\r%.3f mpps avg %.3f mpps"CLNRM, + mpps, total_mpps/samples); + fflush(stdout); + } + } + printf("\n"); + return 0; +} + int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index acbf688fb..db2517baf 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -76,6 +76,8 @@ int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, uint8_t *queue_arr, uint8_t nb_queues, const struct rte_event_port_conf p_conf); +int pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 09/14] app/eventdev: add pipeline queue test 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (6 preceding siblings ...) 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 08/14] app/eventdev: launch pipeline lcores Pavan Nikhilesh @ 2018-01-16 15:39 ` Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 10/14] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh ` (4 subsequent siblings) 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:39 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline queue test case that aims at testing the following: 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The pipeline queue test configures the eventdev with Q queues and P ports, where Q is (nb_ethdev * nb_stages) + nb_ethdev and P is nb_workers. The user can choose the number of workers and number of stages through the --wlcores and the --stlist application command line arguments respectively. The probed ethernet devices act as producer(s) for this application. The ethdevs are configured as event Rx adapters that enables them to injects events to eventdev based the first stage schedule type list requested by the user through --stlist the command line argument. Based on the number of stages to process(selected through --stlist), the application forwards the event to next upstream queue and when it reaches last stage in the pipeline if the event type is ATOMIC it is enqueued onto ethdev Tx queue else to maintain ordering the event type is set to ATOMIC and enqueued onto the last stage queue. On packet Tx, application increments the number events processed and print periodically in one second to get the number of events processed in one second. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline queue test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_queue.c | 237 ++++++++++++++++++++++++++++++++ 2 files changed, 238 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_queue.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index 1707318f2..94b489f41 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -26,5 +26,6 @@ SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c +SRCS-y += test_pipeline_queue.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c new file mode 100644 index 000000000..773c3ecaa --- /dev/null +++ b/app/test-eventdev/test_pipeline_queue.c @@ -0,0 +1,237 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_queue_nb_event_queues(struct evt_options *opt) +{ + uint16_t eth_count = rte_eth_dev_count(); + + return (eth_count * opt->nb_stages) + eth_count; +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_queue_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) + rte_service_component_runstate_set(t->tx_service.service_id, 1); + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + int nb_stages = opt->nb_stages; + uint8_t queue; + struct rte_event_dev_info info; + struct test_pipeline *t = evt_test_priv(test); + uint8_t tx_evqueue_id = 0; + uint8_t queue_arr[RTE_EVENT_MAX_QUEUES_PER_DEV]; + uint8_t nb_worker_queues = 0; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count() * (nb_stages); + + /* Extra port for Tx service. */ + if (t->mt_unsafe) { + tx_evqueue_id = nb_queues; + nb_ports++; + nb_queues++; + } else + nb_queues += rte_eth_dev_count(); + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + uint8_t slot; + + if (!t->mt_unsafe) { + slot = queue % (nb_stages + 1); + q_conf.schedule_type = slot == nb_stages ? + RTE_SCHED_TYPE_ATOMIC : + opt->sched_type_list[slot]; + } else { + slot = queue % nb_stages; + + if (queue == tx_evqueue_id) { + q_conf.schedule_type = RTE_SCHED_TYPE_ATOMIC; + q_conf.event_queue_cfg = + RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + } else { + q_conf.schedule_type = + opt->sched_type_list[slot]; + queue_arr[nb_worker_queues] = queue; + nb_worker_queues++; + } + } + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + /* + * If tx is multi thread safe then allow workers to do Tx else use Tx + * service to Tx packets. + */ + if (t->mt_unsafe) { + ret = pipeline_event_port_setup(test, opt, queue_arr, + nb_worker_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_tx_service_setup(test, opt, tx_evqueue_id, + nb_ports - 1, p_conf); + + } else + ret = pipeline_event_port_setup(test, opt, NULL, nb_queues, + p_conf); + + if (ret) + return ret; + /* + * The pipelines are setup in the following manner: + * + * eth_dev_count = 2, nb_stages = 2. + * + * Multi thread safe : + * queues = 6 + * stride = 3 + * + * event queue pipelines: + * eth0 -> q0 -> q1 -> (q2->tx) + * eth1 -> q3 -> q4 -> (q5->tx) + * + * q2, q5 configured as ATOMIC + * + * Multi thread unsafe : + * queues = 5 + * stride = 2 + * + * event queue pipelines: + * eth0 -> q0 -> q1 + * } (q4->tx) Tx service + * eth1 -> q2 -> q3 + * + * q4 configured as SINGLE_LINK|ATOMIC + */ + ret = pipeline_event_rx_adapter_setup(opt, + t->mt_unsafe ? nb_stages : nb_stages + 1, p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_queue_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_queue_nb_event_queues(opt)); +} + +static int +pipeline_queue_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_queue_nb_event_queues(opt)); +} + +static bool +pipeline_queue_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_queue_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_queue_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_queue = { + .cap_check = pipeline_queue_capability_check, + .opt_check = pipeline_queue_opt_check, + .opt_dump = pipeline_queue_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_queue_eventdev_setup, + .launch_lcores = pipeline_queue_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_queue); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 10/14] app/eventdev: add pipeline queue worker functions 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (7 preceding siblings ...) 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 09/14] app/eventdev: add pipeline queue test Pavan Nikhilesh @ 2018-01-16 15:39 ` Pavan Nikhilesh 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 11/14] app/eventdev: add pipeline atq test Pavan Nikhilesh ` (3 subsequent siblings) 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:39 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.h | 80 +++++++++ app/test-eventdev/test_pipeline_queue.c | 288 ++++++++++++++++++++++++++++++- 2 files changed, 367 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index db2517baf..5fb91607d 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -63,6 +63,86 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +#define BURST_SIZE 16 + +#define PIPELINE_WROKER_SINGLE_STAGE_INIT \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + struct rte_event ev + +#define PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT \ + int i; \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + struct rte_event ev[BURST_SIZE + 1] + +#define PIPELINE_WROKER_MULTI_STAGE_INIT \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + uint8_t cq_id; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + const uint8_t last_queue = t->opt->nb_stages - 1; \ + uint8_t *const sched_type_list = &t->sched_type_list[0]; \ + struct rte_event ev + +#define PIPELINE_WROKER_MULTI_STAGE_BURST_INIT \ + int i; \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + uint8_t cq_id; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + const uint8_t last_queue = t->opt->nb_stages - 1; \ + uint8_t *const sched_type_list = &t->sched_type_list[0]; \ + struct rte_event ev[BURST_SIZE + 1] + +static __rte_always_inline void +pipeline_fwd_event(struct rte_event *ev, uint8_t sched) +{ + ev->event_type = RTE_EVENT_TYPE_CPU; + ev->op = RTE_EVENT_OP_FORWARD; + ev->sched_type = sched; +} + +static __rte_always_inline void +pipeline_event_enqueue(const uint8_t dev, const uint8_t port, + struct rte_event *ev) +{ + while (rte_event_enqueue_burst(dev, port, ev, 1) != 1) + rte_pause(); +} + +static __rte_always_inline void +pipeline_event_enqueue_burst(const uint8_t dev, const uint8_t port, + struct rte_event *ev, const uint16_t nb_rx) +{ + uint16_t enq; + + enq = rte_event_enqueue_burst(dev, port, ev, nb_rx); + while (enq < nb_rx) { + enq += rte_event_enqueue_burst(dev, port, + ev + enq, nb_rx - enq); + } +} + +static __rte_always_inline void +pipeline_tx_pkt(struct rte_mbuf *mbuf) +{ + while (rte_eth_tx_burst(mbuf->port, 0, &mbuf, 1) != 1) + rte_pause(); +} + +static inline int +pipeline_nb_event_ports(struct evt_options *opt) +{ + return evt_nr_active_lcores(opt->wlcores); +} + int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c index 773c3ecaa..835fe0782 100644 --- a/app/test-eventdev/test_pipeline_queue.c +++ b/app/test-eventdev/test_pipeline_queue.c @@ -15,10 +15,296 @@ pipeline_queue_nb_event_queues(struct evt_options *opt) return (eth_count * opt->nb_stages) + eth_count; } +static int +pipeline_queue_worker_single_stage_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + w->processed_pkts++; + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + + +static int +pipeline_queue_worker_multi_stage_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + ev.queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id == last_queue) { + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + ev[i].queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id == last_queue) { + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_queue_worker_single_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_single_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_queue_worker_single_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_single_stage_burst_fwd( + arg); + } else { + if (!burst && mt_safe) + return pipeline_queue_worker_multi_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_multi_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_queue_worker_multi_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_multi_stage_burst_fwd(arg); + + } rte_panic("invalid worker\n"); } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 11/14] app/eventdev: add pipeline atq test 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (8 preceding siblings ...) 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 10/14] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh @ 2018-01-16 15:40 ` Pavan Nikhilesh 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 12/14] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh ` (2 subsequent siblings) 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:40 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline test case that aims at testing the following with ``all types queue`` eventdev scheme. 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The atq queue test functions as same as ``pipeline_queue`` test. The difference is, It uses, ``all type queue scheme`` instead of separate queues for each stage and thus reduces the number of queues required to realize the use case. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline atq test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_atq.c | 223 ++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_atq.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index 94b489f41..e600e21c4 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -27,5 +27,6 @@ SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c SRCS-y += test_pipeline_queue.c +SRCS-y += test_pipeline_atq.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c new file mode 100644 index 000000000..6c9ac6119 --- /dev/null +++ b/app/test-eventdev/test_pipeline_atq.c @@ -0,0 +1,223 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_atq_nb_event_queues(struct evt_options *opt) +{ + RTE_SET_USED(opt); + + return rte_eth_dev_count(); +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_atq_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) + rte_service_component_runstate_set(t->tx_service.service_id, 1); + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + uint8_t queue; + struct rte_event_dev_info info; + struct test_pipeline *t = evt_test_priv(test); + uint8_t tx_evqueue_id = 0; + uint8_t queue_arr[RTE_EVENT_MAX_QUEUES_PER_DEV]; + uint8_t nb_worker_queues = 0; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count(); + + /* One extra port and queueu for Tx service */ + if (t->mt_unsafe) { + tx_evqueue_id = nb_queues; + nb_ports++; + nb_queues++; + } + + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + q_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_ALL_TYPES; + + if (t->mt_unsafe) { + if (queue == tx_evqueue_id) { + q_conf.event_queue_cfg = + RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + } else { + queue_arr[nb_worker_queues] = queue; + nb_worker_queues++; + } + } + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + if (t->mt_unsafe) { + ret = pipeline_event_port_setup(test, opt, queue_arr, + nb_worker_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_tx_service_setup(test, opt, tx_evqueue_id, + nb_ports - 1, p_conf); + } else + ret = pipeline_event_port_setup(test, opt, NULL, nb_queues, + p_conf); + + if (ret) + return ret; + + /* + * The pipelines are setup in the following manner: + * + * eth_dev_count = 2, nb_stages = 2, atq mode + * + * Multi thread safe : + * queues = 2 + * stride = 1 + * + * event queue pipelines: + * eth0 -> q0 ->tx + * eth1 -> q1 ->tx + * + * q0, q1 are configured as ATQ so, all the different stages can + * be enqueued on the same queue. + * + * Multi thread unsafe : + * queues = 3 + * stride = 1 + * + * event queue pipelines: + * eth0 -> q0 + * } (q3->tx) Tx service + * eth1 -> q1 + * + * q0,q1 are configured as stated above. + * q3 configured as SINGLE_LINK|ATOMIC. + */ + ret = pipeline_event_rx_adapter_setup(opt, 1, p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_atq_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_atq_nb_event_queues(opt)); +} + +static int +pipeline_atq_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_atq_nb_event_queues(opt)); +} + +static bool +pipeline_atq_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_atq_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_atq_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_atq = { + .cap_check = pipeline_atq_capability_check, + .opt_check = pipeline_atq_opt_check, + .opt_dump = pipeline_atq_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_atq_eventdev_setup, + .launch_lcores = pipeline_atq_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_atq); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 12/14] app/eventdev: add pipeline atq worker functions 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (9 preceding siblings ...) 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 11/14] app/eventdev: add pipeline atq test Pavan Nikhilesh @ 2018-01-16 15:40 ` Pavan Nikhilesh 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 13/14] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 14/14] doc: update 18.02 release notes Pavan Nikhilesh 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:40 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_atq.c | 280 +++++++++++++++++++++++++++++++++- 1 file changed, 279 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c index 6c9ac6119..36abbddda 100644 --- a/app/test-eventdev/test_pipeline_atq.c +++ b/app/test-eventdev/test_pipeline_atq.c @@ -15,10 +15,288 @@ pipeline_atq_nb_event_queues(struct evt_options *opt) return rte_eth_dev_count(); } +static int +pipeline_atq_worker_single_stage_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + w->processed_pkts++; + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_multi_stage_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + w->processed_pkts++; + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + w->processed_pkts++; + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_atq_worker_single_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_single_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_atq_worker_single_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_single_stage_burst_fwd(arg); + } else { + if (!burst && mt_safe) + return pipeline_atq_worker_multi_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_multi_stage_fwd(arg); + if (burst && mt_safe) + return pipeline_atq_worker_multi_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_multi_stage_burst_fwd(arg); + } rte_panic("invalid worker\n"); } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 13/14] doc: add pipeline test in eventdev test guide 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (10 preceding siblings ...) 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 12/14] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh @ 2018-01-16 15:40 ` Pavan Nikhilesh 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 14/14] doc: update 18.02 release notes Pavan Nikhilesh 12 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:40 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Marko Kovacevic <marko.kovacevic@intel.com> --- .../img/eventdev_pipeline_atq_test_generic.svg | 3263 +++++++++++++++++ .../img/eventdev_pipeline_atq_test_lockfree.svg | 3344 +++++++++++++++++ .../img/eventdev_pipeline_queue_test_generic.svg | 3548 ++++++++++++++++++ .../img/eventdev_pipeline_queue_test_lockfree.svg | 3826 ++++++++++++++++++++ doc/guides/tools/testeventdev.rst | 191 + 5 files changed, 14172 insertions(+) create mode 100644 doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg create mode 100644 doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg create mode 100644 doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg create mode 100644 doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg diff --git a/doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg b/doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg new file mode 100644 index 000000000..e33367989 --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg @@ -0,0 +1,3263 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_atq_test_generic.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker39727" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#0059ff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path39725" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ac14ff;stroke-width:1pt;stroke-opacity:1;fill:#ac14ff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32611" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32603" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#3550fd;stroke-width:1pt;stroke-opacity:1;fill:#00ffff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32601" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32341" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3507fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32339" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient12130" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop12128" /> + </linearGradient> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(42,-46)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,68)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-62,12)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-48)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.29498181,0,0,0.88423137,181.75943,23.045895)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158,30)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78263355,0,0,0.98605918,90.06838,5.0013749)" /> + <linearGradient + gradientTransform="matrix(0.78674479,0,0,1.0000825,87.83543,1.2279738)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,86.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(39.91461,10.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(41.91461,64.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,140.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient12132" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient16362" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-0" + style="overflow:visible"> + <path + id="path3704-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-6" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-1" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.6515192,0,0,1.0041442,189.20967,67.917365)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.53467" + inkscape:cx="477.6217" + inkscape:cy="141.14731" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="1920" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.87847757;stroke-opacity:1" + id="rect3697" + width="493.61813" + height="283.13986" + x="126.96397" + y="104.52792" + rx="0" + ry="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="-2.6719971" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="-2.6719971" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="407.29071" + y="283.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="406.83691" + y="228.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="405.98169" + y="168.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.87885" + y="163.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="410.87885" + y="163.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.61511" + y="223.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="410.61511" + y="223.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="412.61511" + y="281.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="412.61511" + y="281.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="416.13348" + y="186.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="416.13348" + y="186.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="417.25244" + y="246.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="417.25244" + y="246.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="419.25244" + y="302.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="419.25244" + y="302.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="197.72678" + y="169.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.03741" + y="212.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="199.03741" + y="212.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.49991107;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="72.33783" + height="197.82672" + x="301.47455" + y="139.32401" + ry="5.0019679" + rx="2.6784446" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.09811" + y="170.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="330.09811" + y="170.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 248.59877,185.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 248.59877,185.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.44385" + y="188.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="199.44385" + y="188.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="317.5372" + y="174.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="420.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="420.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_atq </tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="195.64139" + y="225.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="196.95203" + y="268.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="196.95203" + y="268.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="330.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 248.51338,241.5091 H 313.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 248.51338,241.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="244.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="199.35846" + y="244.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+3</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="317.45184" + y="230.86047" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="197.64139" + y="279.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="198.95203" + y="322.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="198.95203" + y="322.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="326.01276" + y="280.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="326.01276" + y="280.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 248.51338,295.50911 H 313.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 248.51338,295.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="298.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="199.35846" + y="298.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="317.45184" + y="284.86047" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="73.356339" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="73.356339" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="224.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="224.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="333.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="333.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="242.32845" + y="123.36828" + id="text5219-26"><tspan + sodipodi:role="line" + x="242.32845" + y="123.36828" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = number of ethernet dev + 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="235.66333" + y="353.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="235.66333" + y="353.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all stage queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="152.30008" + y="228.73854" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="152.30008" + y="228.73854" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="152.30008" + y="240.32199" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="279.86127" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="279.86127" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="291.44473" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="177.92682" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="177.92682" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="189.51027" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="285.26294" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894427)"><tspan + sodipodi:role="line" + id="tspan1220" + x="285.26294" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <g + id="g20550" + transform="translate(25.709043,-190.70754)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13899" + transform="translate(-54.904385,-3.0966742)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13911" + transform="translate(-54.904385,-1.0966741)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="259.86884" + y="164.78368" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="259.86884" + y="164.78368" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="259.86884" + y="174.78368" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="217.84813" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="217.84813" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="227.84813" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="271.71359" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="271.71359" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="281.71359" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <g + id="g16360" + transform="matrix(1.0874414,0,0,0.99912695,-98.49816,-6.4077434)"> + <ellipse + ry="24.258638" + rx="22.831659" + cy="161.21605" + cx="559.68445" + id="path8843" + style="fill:#ffffff;fill-opacity:0.98039216;stroke:url(#linearGradient16362);stroke-opacity:1" /> + <text + transform="scale(0.92048084,1.0863887)" + id="text5219-2-4-3-3-4-5" + y="146.21904" + x="588.44147" + style="font-style:normal;font-weight:normal;font-size:11.04576969px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92048085" + xml:space="preserve"><tspan + id="tspan1265-5" + style="font-size:7.97750044px;line-height:1.25;stroke-width:0.92048085" + y="146.21904" + x="588.44147" + sodipodi:role="line">Tx Service</tspan><tspan + style="font-size:7.97750044px;line-height:1.25;stroke-width:0.92048085" + y="152.00201" + x="588.44147" + sodipodi:role="line" + id="tspan39139" /><tspan + style="font-size:7.97750044px;line-height:1.25;stroke-width:0.92048085" + y="156.19092" + x="588.44147" + sodipodi:role="line" + id="tspan39141">port n + 1</tspan></text> + </g> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.22799993, 1.61399996;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker32613)" + d="m 511.70299,212.50867 c -0.1614,-10.49392 -0.32276,-20.98539 -0.48409,-31.47439" + id="path5226-6-2-1-2-4-5-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6" + inkscape:original-d="m 511.70299,212.50867 c -0.16039,-10.49394 -0.32175,-20.98541 -0.48409,-31.47439" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935)" + d="m 523.50111,175.62989 c 10.13298,2.21215 20.26379,4.42384 30.39241,6.63504" + id="path5226-6-2-1-2-4-5-1-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1" + inkscape:original-d="m 523.50111,175.62989 c 10.13323,2.21099 20.26404,4.42267 30.39241,6.63504" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-5)" + d="m 523.50111,175.62989 c 9.91161,22.53065 19.82206,45.05865 29.73129,67.58389" + id="path5226-6-2-1-2-4-5-1-5-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-7" + inkscape:original-d="m 523.50111,175.62989 c 9.91282,22.53012 19.82327,45.05812 29.73129,67.58389" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-5-5)" + d="m 523.50111,175.62989 c 10.16587,40.76181 20.3305,81.51868 30.49385,122.27042" + id="path5226-6-2-1-2-4-5-1-5-6-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-7-9" + inkscape:original-d="m 523.50111,175.62989 c 10.16704,40.76152 20.33167,81.51839 30.49385,122.27042" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.88;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.52, 0.88;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1)" + d="m 457.99431,185.46823 c 13.07561,8.94945 26.1492,17.89751 39.22072,26.84415" + id="path5226-6-2-1-2-4-5-1-5-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2" + inkscape:original-d="m 457.99431,185.46823 c 13.0764,8.9483 26.14999,17.89636 39.22072,26.84415" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6)" + d="m 459.47717,245.71809 c 12.28232,-4.96638 24.56173,-9.93159 36.83817,-14.89559" + id="path5226-6-2-1-2-4-5-1-5-0-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9" + inkscape:original-d="m 459.47717,245.71809 c 12.28211,-4.96689 24.56152,-9.9321 36.83817,-14.89559" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6-6)" + d="m 459.54824,301.10401 c 12.64219,-20.37548 25.28189,-40.74696 37.91905,-61.11434" + id="path5226-6-2-1-2-4-5-1-5-0-2-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + inkscape:original-d="M 459.54824,301.10401 C 472.1907,280.7287 484.8304,260.35722 497.46729,239.98967" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="595.27808" + y="136.64076" + id="text5219-2-4-3-3-4-54-8-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="595.27808" + y="139.22064" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-7" /></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-1);stroke-width:0.86395979;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-9" + width="25.451954" + height="24.448395" + x="499.03128" + y="213.32141" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="548.03668" + y="204.31348" + id="text5219-2-4-3-3-4-54-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="548.03668" + y="204.31348" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6">Single </tspan><tspan + sodipodi:role="line" + x="548.03668" + y="213.27945" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan57836">Link Q</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3)" + d="m 356.74765,186.83153 c 15.88009,-0.11696 31.75919,-0.23391 47.6373,-0.35085" + id="path5226-6-2-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61" + inkscape:original-d="m 356.74765,186.83153 c 15.88008,-0.11795 31.75918,-0.2349 47.6373,-0.35085" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-0)" + d="m 357.05625,242.97941 c 15.74231,0.0176 31.48469,0.0352 47.22712,0.0528" + id="path5226-6-2-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-1" + inkscape:original-d="m 357.05625,242.97941 c 15.74231,0.0166 31.48469,0.0342 47.22712,0.0528" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89337438;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.57349763, 0.89337441;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-9)" + d="m 356.67155,297.12049 c 15.97521,0.0733 31.94945,0.14663 47.92273,0.21994" + id="path5226-6-2-5-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-9" + inkscape:original-d="m 356.67155,297.12049 c 15.97521,0.0723 31.94945,0.14563 47.92273,0.21994" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="606.06958" + y="346.46628" + id="text5219-2-4-3-3-4-54-8-7" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="606.06958" + y="346.46628" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2">(Tx Generic)</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg b/doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg new file mode 100644 index 000000000..d7f10de3e --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg @@ -0,0 +1,3344 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_atq_test_lockfree.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker39727" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#0059ff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path39725" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#3550fd;stroke-width:1pt;stroke-opacity:1;fill:#004eff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32611" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32603" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#3550fd;stroke-width:1pt;stroke-opacity:1;fill:#00ffff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32601" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32341" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3507fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32339" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient12130" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop12128" /> + </linearGradient> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(42,-46)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,66)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-62,12)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-46)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.29498181,0,0,0.88423137,181.75943,19.045895)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158,30)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78263355,0,0,0.98605918,90.06838,5.0013749)" /> + <linearGradient + gradientTransform="matrix(0.78674479,0,0,1.0000825,87.83543,1.2279738)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,86.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(39.91461,10.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(41.91461,64.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,140.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient12132" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-0" + style="overflow:visible"> + <path + id="path3704-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-6" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8-3-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1-9-5" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2-0-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8-3-8-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1-9-5-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2-0-0-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.7519532" + inkscape:cx="479.73438" + inkscape:cy="163.58755" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.87847757;stroke-opacity:1" + id="rect3697" + width="493.61813" + height="283.13986" + x="126.96397" + y="104.52792" + rx="0" + ry="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="-2.6719971" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="-2.6719971" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="407.29071" + y="281.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="406.83691" + y="228.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="405.98169" + y="170.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.87885" + y="167.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="410.87885" + y="167.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.61511" + y="225.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="410.61511" + y="225.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="412.61511" + y="279.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="412.61511" + y="279.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="416.13348" + y="188.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="416.13348" + y="188.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="417.25244" + y="246.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="417.25244" + y="246.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="417.25244" + y="300.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="417.25244" + y="300.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="197.72678" + y="169.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.03741" + y="212.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="199.03741" + y="212.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.49991107;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="72.33783" + height="197.82672" + x="301.47455" + y="135.32401" + ry="5.0019679" + rx="2.6784446" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.09811" + y="170.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="330.09811" + y="170.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 248.59877,185.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 248.59877,185.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.44385" + y="188.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="199.44385" + y="188.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="317.5372" + y="174.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="420.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="420.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_atq</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="195.64139" + y="225.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="196.95203" + y="268.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="196.95203" + y="268.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="330.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 248.51338,241.5091 H 313.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 248.51338,241.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="244.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="199.35846" + y="244.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="317.45184" + y="230.86047" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="197.64139" + y="279.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="198.95203" + y="322.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="198.95203" + y="322.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="326.01276" + y="280.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="326.01276" + y="280.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 248.51338,295.50911 H 313.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 248.51338,295.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="298.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="199.35846" + y="298.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="317.45184" + y="284.86047" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="73.356339" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="73.356339" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="224.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="224.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="333.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="333.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="237.36301" + y="123.36828" + id="text5219-26"><tspan + sodipodi:role="line" + x="237.36301" + y="123.36828" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = number of ethernet dev</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="257.66333" + y="349.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="257.66333" + y="349.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="152.30008" + y="228.73854" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="152.30008" + y="228.73854" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="152.30008" + y="240.32199" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="279.86127" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="279.86127" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="291.44473" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="177.92682" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="177.92682" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="189.51027" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="285.26294" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894427)"><tspan + sodipodi:role="line" + id="tspan1220" + x="285.26294" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <g + id="g20550" + transform="translate(25.709043,-190.70754)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13899" + transform="translate(-54.904385,-3.0966742)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13911" + transform="translate(-54.904385,-1.0966741)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="259.86884" + y="164.78368" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="259.86884" + y="164.78368" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="259.86884" + y="174.78368" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="217.84813" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="217.84813" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="227.84813" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="271.71359" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="271.71359" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="281.71359" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5)" + d="m 457.99431,185.46823 c 31.2384,-0.0621 62.47105,-0.12411 93.69789,-0.18615" + id="path5226-6-2-1-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2" + inkscape:original-d="m 457.99431,185.46823 c 31.2384,-0.0631 62.47105,-0.12511 93.69789,-0.18615" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.17235398;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.37883186, 1.17235398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8)" + d="m 458.98776,243.31381 c 30.75465,0.34725 61.50362,0.69444 92.24687,1.04156" + id="path5226-6-2-1-2-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7" + inkscape:original-d="m 458.98776,243.31381 c 30.75466,0.34624 61.50363,0.69343 92.24687,1.04156" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.16870522;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3496418, 1.16870522;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6)" + d="m 459.54824,299.10401 c 30.65551,0.002 61.30536,0.005 91.94951,0.007" + id="path5226-6-2-1-2-3-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2" + inkscape:original-d="m 459.54824,299.10401 c 30.65551,10e-4 61.30536,0.004 91.94951,0.007" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="595.27808" + y="136.64076" + id="text5219-2-4-3-3-4-54-8-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="595.27808" + y="139.22064" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-7" /></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3)" + d="m 355.63703,186.40543 c 15.88009,-0.11696 31.75919,-0.23391 47.6373,-0.35085" + id="path5226-6-2-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61" + inkscape:original-d="m 355.63703,186.40543 c 15.88008,-0.11795 31.75918,-0.2349 47.6373,-0.35085" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7)" + d="m 357.65509,243.31452 c 15.34193,0.0849 30.68288,0.16971 46.02286,0.25456" + id="path5226-6-2-5-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-1" + inkscape:original-d="m 357.65509,243.31452 c 15.34194,0.0839 30.68289,0.16871 46.02286,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-5)" + d="m 357.04968,297.80194 c 15.88007,0.0849 31.75917,0.16972 47.6373,0.25457" + id="path5226-6-2-5-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-7" + inkscape:original-d="m 357.04968,297.80194 c 15.88008,0.0839 31.75918,0.16871 47.6373,0.25457" + sodipodi:nodetypes="cc" + inkscape:transform-center-x="-1.1449687" + inkscape:transform-center-y="0.16602181" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6)" + d="m 457.99431,185.46823 c 31.25478,19.01586 62.50452,38.02866 93.74916,57.03836" + id="path5226-6-2-1-2-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3" + inkscape:original-d="m 457.99431,185.46823 c 31.25549,19.01469 62.50523,38.02749 93.74916,57.03836" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-5)" + d="m 457.99431,185.46823 c 31.56499,37.01842 63.12523,74.03128 94.6807,111.03854" + id="path5226-6-2-1-2-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-39" + inkscape:original-d="m 457.99431,185.46823 c 31.56606,37.01751 63.1263,74.03037 94.6807,111.03854" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8)" + d="m 458.98776,243.31381 c 31.07558,-18.77571 62.14525,-37.54785 93.20895,-56.31638" + id="path5226-6-2-1-2-6-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2" + inkscape:original-d="m 458.98776,243.31381 c 31.0754,-18.776 62.14507,-37.54814 93.20895,-56.31638" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8-3)" + d="m 458.98776,243.31381 c 30.92496,17.37709 61.8449,34.75135 92.75972,52.12273" + id="path5226-6-2-1-2-6-9-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2-0" + inkscape:original-d="m 458.98776,243.31381 c 30.92563,17.3759 61.84557,34.75016 92.75972,52.12273" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8-3-8)" + d="m 459.54824,299.10401 c 2.93308,-3.49891 5.86612,-6.99776 21.41494,-25.54619 15.54881,-18.54843 43.70884,-52.14099 71.86417,-85.72794" + id="path5226-6-2-1-2-6-9-8-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2-0-0" + inkscape:original-d="m 459.54824,299.10401 c 2.93318,-3.49883 5.86622,-6.99768 8.79911,-10.49656 28.16472,-33.59799 56.32477,-67.19054 84.48,-100.77757" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8-3-8-6)" + d="m 459.54824,299.10401 c 30.71954,-17.76325 61.43324,-35.52313 92.14101,-53.27957" + id="path5226-6-2-1-2-6-9-8-9-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2-0-0-8" + inkscape:original-d="m 459.54824,299.10401 c 30.71936,-17.76357 61.43306,-35.52344 92.14101,-53.27957" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="602.09888" + y="347.66293" + id="text5219-2-4-3-3-4-54" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="602.09888" + y="347.66293" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4">(Tx Lock free)</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg b/doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg new file mode 100644 index 000000000..732d48867 --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg @@ -0,0 +1,3548 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_queue_test_generic.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76448972,0,0,0.86504892,-92.637138,19.716473)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,10.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,7.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6-6" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-1" + style="overflow:visible"> + <path + id="path3704-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-172.30743,65.79201)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.30743,9.792007)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(17.692568,-46.20799)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14db;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14e4;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient16362" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-4" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker55720" + style="overflow:visible"> + <path + id="path55718" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-9" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-3" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78531244,0,0,1,50.143534,82.69878)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-8" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-84" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-8-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-84-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-5" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-9-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-5-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-0-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-9-72" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-5-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-0-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.7519532" + inkscape:cx="423.24137" + inkscape:cy="157.27924" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="1920" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="56.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.7960096;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.47435" + height="193.53508" + x="217.62262" + y="133.47206" + ry="4.8934555" + rx="6.9415913" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="452.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="452.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_queue</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+3</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.83277988px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.90273178" + x="199.11482" + y="111.36845" + id="text5219-26" + transform="scale(0.90273173,1.1077488)"><tspan + sodipodi:role="line" + x="199.11482" + y="111.36845" + id="tspan5223-10" + style="font-size:9.02731705px;line-height:1.25;stroke-width:0.90273178">total queues = (number of stages * number of ethernet dev) + 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.11939621px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92661637" + x="257.40421" + y="328.77414" + id="text5219-26-2" + transform="scale(0.92661635,1.0791953)"><tspan + sodipodi:role="line" + x="257.40421" + y="328.77414" + id="tspan5223-10-7" + style="font-size:9.26616383px;line-height:1.25;stroke-width:0.92661637">All workers are linked to all stage queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="422.98328" + y="281.69067" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="424.52948" + y="225.81598" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="423.67426" + y="169.85918" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="426.57141" + y="167.14041" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="426.57141" + y="167.14041" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="428.30768" + y="223.46143" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="428.30768" + y="223.46143" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="426.30768" + y="279.46143" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="426.30768" + y="279.46143" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="431.82605" + y="188.68941" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="431.82605" + y="188.68941" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="432.94501" + y="244.64697" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="432.94501" + y="244.64697" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="432.94501" + y="300.64697" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="432.94501" + y="300.64697" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <g + style="display:inline;opacity:1" + id="g20550" + transform="translate(65.401608,-190.91553)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13899" + transform="translate(-17.21182,-3.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13911" + transform="translate(-15.21182,-1.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g16360" + transform="matrix(1.0983058,0,0,1.0572541,-82.192809,-6.5664741)"> + <ellipse + ry="24.258638" + rx="22.831659" + cy="161.21605" + cx="559.68445" + id="path8843" + style="fill:#ffffff;fill-opacity:0.98039216;stroke:url(#linearGradient16362);stroke-opacity:1" /> + <text + transform="scale(0.94727182,1.0556632)" + id="text5219-2-4-3-3-4-5" + y="151.93637" + x="571.61011" + style="font-style:normal;font-weight:normal;font-size:10.76524448px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.89710373" + xml:space="preserve"><tspan + id="tspan1265-5" + style="font-size:7.77489901px;line-height:1.25;stroke-width:0.89710373" + y="151.93637" + x="571.61011" + sodipodi:role="line">Tx Service</tspan><tspan + style="font-size:7.77489901px;line-height:1.25;stroke-width:0.89710373" + y="161.655" + x="571.61011" + sodipodi:role="line" + id="tspan40484">port n + 1</tspan></text> + </g> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1)" + d="m 475.41709,184.68945 c 14.66204,14.27312 29.32201,28.54422 43.97988,42.81328" + id="path5226-6-2-1-2-4-5-1-5-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2" + inkscape:original-d="m 475.41709,184.68945 c 14.66303,14.2721 29.323,28.54321 43.97988,42.81328" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14db;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6)" + d="m 476.32916,241.51456 c 13.86102,-0.34 27.7191,-0.67992 41.57417,-1.01977" + id="path5226-6-2-1-2-4-5-1-5-0-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9" + inkscape:original-d="m 476.32916,241.51456 c 13.861,-0.34097 27.71908,-0.6809 41.57417,-1.01977" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14e4;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6-6)" + d="m 474.31327,298.61285 c 15.031,-15.59075 30.05891,-31.17831 45.0837,-46.76263" + id="path5226-6-2-1-2-4-5-1-5-0-2-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + inkscape:original-d="m 474.31327,298.61285 c 15.03102,-15.59073 30.05893,-31.17829 45.0837,-46.76263" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-3);stroke-width:0.94657081;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-7" + width="30.678661" + height="24.347494" + x="519.39697" + y="227.50273" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="571.69696" + y="217.79964" + id="text5219-2-4-3-3-4-54-8-7-5" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="571.69696" + y="217.79964" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2-3">Single</tspan><tspan + sodipodi:role="line" + x="571.69696" + y="226.76561" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan6344">Link Q</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:1.01153409;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-6)" + d="m 391.11413,240.54267 c 10.00574,0.0714 20.0096,0.14275 30.01154,0.21411" + id="path5226-6-2-1-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-84" + inkscape:original-d="m 391.11413,240.54267 c 10.00575,0.0704 20.00961,0.14176 30.01154,0.21411" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-1)" + d="m 391.05684,296.14092 c 0,0 29.39924,0 29.39924,0" + id="path5226-6-2-1-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-9" + inkscape:original-d="m 391.05684,296.14092 h 29.39924" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:1.00593412;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-6-0)" + d="m 389.52644,184.04076 c 10.20679,0.0726 20.41171,0.14509 30.61473,0.21761" + id="path5226-6-2-1-3-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-84-8" + inkscape:original-d="m 389.52644,184.04076 c 10.2068,0.0715 20.41172,0.14408 30.61473,0.21761" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-2)" + d="m 533.61005,227.17178 c -0.11895,-11.90475 -0.23788,-23.80683 -0.35678,-35.70623" + id="path5226-6-2-1-2-4-5-1-5-0-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-6" + inkscape:original-d="m 533.61005,227.17178 c -0.11794,-11.90476 -0.23687,-23.80684 -0.35678,-35.70623" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-9)" + d="m 554.18303,173.89676 c 12.12572,3.64515 24.2491,7.2896 36.37012,10.93334" + id="path5226-6-2-1-2-4-5-1-5-0-48" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-0" + inkscape:original-d="m 554.18303,173.89676 c 12.12608,3.64396 24.24946,7.28841 36.37012,10.93334" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-9-7)" + d="m 554.18303,173.89676 c 12.8469,22.86455 25.6922,45.72625 38.53585,68.585" + id="path5226-6-2-1-2-4-5-1-5-0-48-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-0-7" + inkscape:original-d="m 554.18303,173.89676 c 12.84809,22.86388 25.69339,45.72558 38.53585,68.585" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-9-72)" + d="m 554.18303,173.89676 c 12.65661,41.60787 25.31164,83.21054 37.96507,124.80795" + id="path5226-6-2-1-2-4-5-1-5-0-48-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-0-6" + inkscape:original-d="m 554.18303,173.89676 c 12.65781,41.6075 25.31284,83.21018 37.96507,124.80795" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="665.00641" + y="346.51425" + id="text5219-2-4-3-3-4-54-8-7" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="665.00641" + y="346.51425" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2">(Tx Generic)</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg b/doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg new file mode 100644 index 000000000..c0a365c7b --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg @@ -0,0 +1,3826 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_queue_test_lockfree.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3824" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path3822" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect3820" + effect="bspline" /> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill:#02d804;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill:#02d804;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#02d804;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1;fill-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#02d804;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1;fill-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#02d804;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#02d804;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill:#02d804;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76445442,0,0,0.88401527,-92.618478,17.226692)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,8.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,5.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6-6" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-1" + style="overflow:visible"> + <path + id="path3704-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-124.30743,61.79201)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.69257,7.792007)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(63.692568,-46.20799)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-4" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker55720" + style="overflow:visible"> + <path + id="path55718" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-9" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5-3" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-180.52717,84.698813)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5-3-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-180.02718,138.1988)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5-3-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-180.52718,28.351329)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-70" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-1-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-2-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-70-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-2-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-6-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6-2-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1-3-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-5-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-45" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-45-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-2-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-45-0" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.0000001" + inkscape:cx="394.32532" + inkscape:cy="122.70585" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="1920" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="54.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.80466998;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.46568" + height="197.77837" + x="217.62695" + y="133.47639" + ry="5.0007453" + rx="6.9412708" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-2</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="458.47687" + y="382.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="458.47687" + y="382.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_queue</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-2</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-2</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.83277988px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.90273178" + x="143.72733" + y="111.36845" + id="text5219-26" + transform="scale(0.90273173,1.1077488)"><tspan + sodipodi:role="line" + x="143.72733" + y="111.36845" + id="tspan5223-10" + style="font-size:9.02731705px;line-height:1.25;stroke-width:0.90273178">total queues = (number of stages * number of ethernet dev) + number of ethernet dev</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="470.98328" + y="277.69067" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="470.52948" + y="223.81598" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="469.67426" + y="169.85918" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="474.57141" + y="167.14041" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="474.57141" + y="167.14041" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="474.30768" + y="221.46143" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="474.30768" + y="221.46143" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="476.30768" + y="275.46143" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="476.30768" + y="275.46143" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="479.82605" + y="188.68941" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="479.82605" + y="188.68941" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="480.94501" + y="242.64697" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="480.94501" + y="242.64697" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="482.94501" + y="296.64697" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="482.94501" + y="296.64697" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <g + style="display:inline;opacity:1" + id="g20550" + transform="translate(57.401608,-196.91553)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13899" + transform="translate(-23.21182,-3.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13911" + transform="translate(-23.21182,-7.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95700002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.48400021, 0.95700002;stroke-dashoffset:0;stroke-opacity:1;marker-mid:url(#marker15998);marker-end:url(#TriangleOutM-5-2-6-5);paint-order:normal" + d="m 521.74679,185.45912 c 20.71371,-0.15575 41.42073,-0.31145 62.12958,-0.46716" + id="path5226-6-2-1-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2" + inkscape:original-d="m 521.74679,185.45912 c 20.7137,-0.15674 41.42072,-0.31244 62.12958,-0.46716" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95306396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.43676775, 0.95306398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8)" + d="m 522.24235,239.92415 c 20.38012,-0.0124 40.75646,-0.0248 61.129,-0.0372" + id="path5226-6-2-1-2-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7" + inkscape:original-d="m 522.24235,239.92415 c 20.38012,-0.0134 40.75646,-0.0258 61.129,-0.0372" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.94650453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.35805474, 0.94650456;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6)" + d="m 523.10585,294.89606 c 20.2117,-0.0124 40.41967,-0.0248 60.6239,-0.0372" + id="path5226-6-2-1-2-3-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2" + inkscape:original-d="m 523.10585,294.89606 c 20.2117,-0.0134 40.41967,-0.0258 60.6239,-0.0372" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5-3);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5-7" + width="39.065548" + height="24.347494" + x="417.01007" + y="229.50275" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5-3-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5-7-5" + width="39.065548" + height="24.347494" + x="417.51007" + y="283.00275" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5-3-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5-7-9" + width="39.065548" + height="24.347494" + x="417.01007" + y="173.15526" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95740849;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.48890185, 0.95740849;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-1)" + d="m 521.87938,186.09993 c 20.73597,17.34221 41.46901,34.68197 62.19908,52.01925" + id="path5226-6-2-1-2-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-70" + inkscape:original-d="m 521.87938,186.09993 c 20.73687,17.34113 41.46991,34.68089 62.19908,52.01925" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95740849;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.48890185, 0.95740849;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-1-3)" + d="m 521.87938,186.09993 c 21.06868,35.47019 42.13466,70.93583 63.19791,106.39688" + id="path5226-6-2-1-2-9-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-70-0" + inkscape:original-d="m 521.87938,186.09993 c 21.06986,35.46949 42.13584,70.93513 63.19791,106.39688" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95306396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.43676775, 0.95306398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-2)" + d="m 522.24235,239.92415 c 20.72818,-17.7602 41.45248,-35.51707 62.17286,-53.27058" + id="path5226-6-2-1-2-3-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-1" + inkscape:original-d="m 522.24235,239.92415 c 20.72811,-17.76028 41.45241,-35.51715 62.17286,-53.27058" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95306396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.43676775, 0.95306398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-2-7)" + d="m 522.24235,239.92415 c 20.71136,17.70863 41.41982,35.41479 62.12534,53.11843" + id="path5226-6-2-1-2-3-8-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-1-2" + inkscape:original-d="m 522.24235,239.92415 c 20.71227,17.70756 41.42074,35.41372 62.12534,53.11843" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.94650453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.35805474, 0.94650456;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6-2)" + d="m 523.10585,294.89606 c 20.70868,-35.85548 41.41388,-71.70493 62.11558,-107.54833" + id="path5226-6-2-1-2-3-9-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2-7" + inkscape:original-d="m 523.10585,294.89606 c 20.709,-35.8553 41.41419,-71.70475 62.11558,-107.54833" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.94650453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.35805474, 0.94650456;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6-2-9)" + d="m 523.10585,294.89606 c 20.34274,-17.79464 40.68168,-35.58595 61.0168,-53.37392" + id="path5226-6-2-1-2-3-9-5-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2-7-2" + inkscape:original-d="m 523.10585,294.89606 c 20.34268,-17.79471 40.68162,-35.58602 61.0168,-53.37392" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="425.99841" + y="170.84738" + id="text5219-1-9-4-3-0-7-9"><tspan + sodipodi:role="line" + x="425.99841" + y="170.84738" + id="tspan5223-2-3-5-6-6-1-7" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="421.81482" + y="225.84738" + id="text5219-1-9-4-3-0-7-4-3"><tspan + sodipodi:role="line" + x="421.81482" + y="225.84738" + id="tspan5223-2-3-5-6-6-1-5-6" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="422.31482" + y="280.84738" + id="text5219-1-9-4-3-0-7-4-6-1"><tspan + sodipodi:role="line" + x="422.31482" + y="280.84738" + id="tspan5223-2-3-5-6-6-1-5-8-2" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="460.42477" + y="171.1732" + id="text5219-2-4-3-3-4-54-9" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="460.42477" + y="171.1732" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3">Atomic Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="460.36716" + y="222.90977" + id="text5219-2-4-3-3-4-54-9-1" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="460.36716" + y="222.90977" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9">Atomic Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="460.9137" + y="272.77069" + id="text5219-2-4-3-3-4-54-9-1-4" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="460.9137" + y="272.77069" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7">Atomic Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="259.7941" + y="171.67656" + id="text5219-2-4-3-3-4-54-9-1-4-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="259.7941" + y="171.67656" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7-4">Stage0 Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="324.4256" + y="171.78726" + id="text5219-2-4-3-3-4-54-9-1-4-8-5" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="324.4256" + y="171.78726" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7-4-0">Stage1 Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="387.27545" + y="171.78726" + id="text5219-2-4-3-3-4-54-9-1-4-8-3" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="387.27545" + y="171.78726" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7-4-6">Stage2 Q</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3)" + d="m 389.46533,184.29883 c 8.27875,0.0849 16.55652,0.16972 24.83331,0.25456" + id="path5226-6-2-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61" + inkscape:original-d="m 389.46533,184.29883 c 8.27876,0.0838 16.55653,0.16871 24.83331,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-5)" + d="m 390.72763,241.07286 c 7.69543,-0.0401 15.38987,-0.0803 23.08331,-0.12044" + id="path5226-6-2-5-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-7" + inkscape:original-d="m 390.72763,241.07286 c 7.69543,-0.0411 15.38986,-0.0813 23.08331,-0.12044" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-5-5)" + d="m 391.22399,294.91526 c 7.7371,0.002 15.47319,0.003 23.20831,0.005" + id="path5226-6-2-5-6-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-7-9" + inkscape:original-d="m 391.22399,294.91526 c 7.7371,5.2e-4 15.47319,0.002 23.20831,0.005" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7)" + d="m 456.10017,185.43501 c 3.94541,0.0849 7.88985,0.16973 11.83331,0.25456" + id="path5226-6-2-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-2" + inkscape:original-d="m 456.10017,185.43501 c 3.94543,0.0838 7.88987,0.16871 11.83331,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7-4)" + d="m 456.60293,240.94938 c 3.94541,0.0849 7.88985,0.16973 11.83331,0.25456" + id="path5226-6-2-5-5-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-2-4" + inkscape:original-d="m 456.60293,240.94938 c 3.94543,0.0839 7.88987,0.16871 11.83331,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7-3)" + d="m 457.60293,295.44938 c 3.94541,0.0849 7.88985,0.16973 11.83331,0.25456" + id="path5226-6-2-5-5-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-2-7" + inkscape:original-d="m 457.60293,295.44938 c 3.94543,0.0838 7.88987,0.16871 11.83331,0.25456" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="670.83521" + y="349.11719" + id="text5219-2-4-3-3-4-54" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="670.83521" + y="349.11719" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4">(Tx Lock free)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.11939621px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92661637" + x="252.78516" + y="328.88882" + id="text5219-26-2-3" + transform="scale(0.92661635,1.0791953)"><tspan + sodipodi:role="line" + x="252.78516" + y="328.88882" + id="tspan5223-10-7-6" + style="font-size:9.26616383px;line-height:1.25;stroke-width:0.92661637">All workers are linked to all queues</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/testeventdev.rst b/doc/guides/tools/testeventdev.rst index 9785e8431..77480ffe9 100644 --- a/doc/guides/tools/testeventdev.rst +++ b/doc/guides/tools/testeventdev.rst @@ -441,3 +441,194 @@ Example command to run perf ``all types queue`` test: sudo build/app/dpdk-test-eventdev --vdev=event_octeontx -- \ --test=perf_atq --plcores=2 --wlcore=3 --stlist=p --nb_pkts=0 + + +PIPELINE_QUEUE Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following: + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_queue_test: + +.. table:: Pipeline queue test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | (nb_producers | Queues will be configured based on the | + | | | * nb_stages) + | user requested sched type list(--stlist)| + | | | x | Here value of x is 1 in generic pipeline| + | | | | and nb_producers in lockfree pipeline | + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_queue_test_generic: + +.. figure:: img/eventdev_pipeline_queue_test_generic.* + +.. _figure_eventdev_pipeline_queue_test_lockfree: + +.. figure:: img/eventdev_pipeline_queue_test_lockfree.* + + pipeline queue test operation. + +The pipeline queue test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_queue_test`. + +The user can choose the number of workers and number of stages through the +``--wlcores`` and the ``--stlist`` application command line arguments +respectively. + +The number of producers depends on the number of ethernet devices detected and +each ethernet device is configured as a event_eth_rx_adapter that acts as a +producer. + +The producer(s) injects the events to eventdev based the first stage sched type +list requested by the user through ``--stlist`` the command line argument. + +Based on the number of stages to process(selected through ``--stlist``), +The application forwards the event to next upstream queue and when it reaches +the last stage in the pipeline if the event type is ``atomic`` it is enqueued +onto ethdev Tx queue else to maintain ordering the event type is set to +``atomic`` and enqueued onto the last stage queue. + +If the ethernet has ``DEV_TX_OFFLOAD_MT_LOCKFREE`` capability then the worker +cores transmit the packets directly. Else the worker cores enqueue the packet +onto the ``SINGLE_LINK_QUEUE`` that is managed by a Tx service. The Tx service +dequeues the packet and transmits it. + +On packet Tx, application increments the number events processed and print +periodically in one second to get the number of events processed in one +second. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=a + + +PIPELINE_ATQ Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following with +``all types queue`` eventdev scheme. + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_atq_test: + +.. table:: Pipeline atq test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | nb_producers + | Queues will be configured based on the | + | | | x | user requested sched type list(--stlist)| + | | | | where x = 1 in generic pipeline and 0 | + | | | | in lockfree pipeline | + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_atq_test_generic: + +.. figure:: img/eventdev_pipeline_atq_test_generic.* + +.. _figure_eventdev_pipeline_atq_test_lockfree: + +.. figure:: img/eventdev_pipeline_atq_test_lockfree.* + + pipeline atq test operation. + +The pipeline atq test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_atq_test`. + +The atq queue test functions as same as ``pipeline_queue`` test. The difference +is, It uses, ``all type queue scheme`` instead of separate queues for each +stage and thus reduces the number of queues required to realize the use case. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=a -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v6 14/14] doc: update 18.02 release notes 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (11 preceding siblings ...) 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 13/14] doc: add pipeline test in eventdev test guide Pavan Nikhilesh @ 2018-01-16 15:40 ` Pavan Nikhilesh 2018-01-16 16:04 ` Mcnamara, John 12 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 15:40 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- doc/guides/rel_notes/release_18_02.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/guides/rel_notes/release_18_02.rst b/doc/guides/rel_notes/release_18_02.rst index b2dc39cfe..b528cdc50 100644 --- a/doc/guides/rel_notes/release_18_02.rst +++ b/doc/guides/rel_notes/release_18_02.rst @@ -53,6 +53,15 @@ New Features With this change, application can use OPDL PMD by eventdev api. +* **Added New pipeline use case for dpdk-test-eventdev application** + The pipeline case can be used to simulate various stages in a real world + application from packet receive to transmit while maintaining the packet + ordering also measure the performance of the event device across the stages + of the pipeline. + + The pipeline use case has been made generic to work will all the event + devices based on the capabilities. + API Changes ----------- -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v6 14/14] doc: update 18.02 release notes 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 14/14] doc: update 18.02 release notes Pavan Nikhilesh @ 2018-01-16 16:04 ` Mcnamara, John 2018-01-16 17:51 ` Pavan Nikhilesh 0 siblings, 1 reply; 122+ messages in thread From: Mcnamara, John @ 2018-01-16 16:04 UTC (permalink / raw) To: Pavan Nikhilesh, jerin.jacob, santosh.shukla, Van Haaren, Harry, Eads, Gage, hemant.agrawal, nipun.gupta, Ma, Liang J Cc: dev > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Pavan Nikhilesh > Sent: Tuesday, January 16, 2018 3:40 PM > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > Liang J <liang.j.ma@intel.com> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > Subject: [dpdk-dev] [PATCH v6 14/14] doc: update 18.02 release notes > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > --- > doc/guides/rel_notes/release_18_02.rst | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/doc/guides/rel_notes/release_18_02.rst > b/doc/guides/rel_notes/release_18_02.rst > index b2dc39cfe..b528cdc50 100644 > --- a/doc/guides/rel_notes/release_18_02.rst > +++ b/doc/guides/rel_notes/release_18_02.rst > @@ -53,6 +53,15 @@ New Features > > With this change, application can use OPDL PMD by eventdev api. > > +* **Added New pipeline use case for dpdk-test-eventdev application** > + The pipeline case can be used to simulate various stages in a real There should be a blank line between the heading and the text. John ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v6 14/14] doc: update 18.02 release notes 2018-01-16 16:04 ` Mcnamara, John @ 2018-01-16 17:51 ` Pavan Nikhilesh 0 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:51 UTC (permalink / raw) To: Mcnamara, John; +Cc: dev On Tue, Jan 16, 2018 at 04:04:32PM +0000, Mcnamara, John wrote: > > > > -----Original Message----- > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Pavan Nikhilesh > > Sent: Tuesday, January 16, 2018 3:40 PM > > To: jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Van > > Haaren, Harry <harry.van.haaren@intel.com>; Eads, Gage > > <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma, > > Liang J <liang.j.ma@intel.com> > > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > Subject: [dpdk-dev] [PATCH v6 14/14] doc: update 18.02 release notes > > > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> > > --- > > doc/guides/rel_notes/release_18_02.rst | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/doc/guides/rel_notes/release_18_02.rst > > b/doc/guides/rel_notes/release_18_02.rst > > index b2dc39cfe..b528cdc50 100644 > > --- a/doc/guides/rel_notes/release_18_02.rst > > +++ b/doc/guides/rel_notes/release_18_02.rst > > @@ -53,6 +53,15 @@ New Features > > > > With this change, application can use OPDL PMD by eventdev api. > > > > +* **Added New pipeline use case for dpdk-test-eventdev application** > > + The pipeline case can be used to simulate various stages in a real > > > There should be a blank line between the heading and the text. Thanks for the heads up will follow the same for http://dpdk.org/dev/patchwork/patch/33809/ > > John Pavan ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs 2017-11-30 7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh ` (8 preceding siblings ...) 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2018-01-16 17:45 ` Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 02/15] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh ` (13 more replies) 9 siblings, 14 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:45 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add logs for packet distribution across worker cores to be printed along with the test results. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- v7 Changes: - Fix release notes format. - Split documentation patch into two chunks to reduce message body size. v6 Changes: - Missed retaining acks when sending previous patchset. v5 Changes: - Split generic and lockfree diagrams for pipeline queue and atq in documentation. - Update release notes. v4 Changes: - remove Tx queue locking by using Tx service ml discussion : http://dpdk.org/ml/archives/dev/2018-January/086730.html v3 Changes: - Add SPDX licence tags - Redo atq test app/test-eventdev/evt_main.c | 3 +++ app/test-eventdev/test_perf_common.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c index 3c27f3216..57bb94570 100644 --- a/app/test-eventdev/evt_main.c +++ b/app/test-eventdev/evt_main.c @@ -29,6 +29,9 @@ signal_handler(int signum) rte_eal_mp_wait_lcore(); + if (test->ops.test_result) + test->ops.test_result(test, &opt); + if (test->ops.eventdev_destroy) test->ops.eventdev_destroy(test, &opt); diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c index e82cc9301..e279d81a5 100644 --- a/app/test-eventdev/test_perf_common.c +++ b/app/test-eventdev/test_perf_common.c @@ -8,8 +8,20 @@ int perf_test_result(struct evt_test *test, struct evt_options *opt) { RTE_SET_USED(opt); + int i; + uint64_t total = 0; struct test_perf *t = evt_test_priv(test); + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 02/15] app/eventdev: add pipeline test setup and destroy 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh @ 2018-01-16 17:45 ` Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 03/15] app/eventdev: add mempool " Pavan Nikhilesh ` (12 subsequent siblings) 13 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:45 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Pipeline test has the queue and all types queue variants. Introduce test_pipeline_common* to share the common code between those tests. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-eventdev/Makefile | 2 ++ app/test-eventdev/test_pipeline_common.c | 44 ++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 57 ++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_common.c create mode 100644 app/test-eventdev/test_pipeline_common.h diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index cfe567a6d..1707318f2 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -25,4 +25,6 @@ SRCS-y += test_perf_common.c SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c +SRCS-y += test_pipeline_common.c + include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c new file mode 100644 index 000000000..aa3481247 --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.c @@ -0,0 +1,44 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +int +pipeline_test_setup(struct evt_test *test, struct evt_options *opt) +{ + void *test_pipeline; + + test_pipeline = rte_zmalloc_socket(test->name, + sizeof(struct test_pipeline), RTE_CACHE_LINE_SIZE, + opt->socket_id); + if (test_pipeline == NULL) { + evt_err("failed to allocate test_pipeline memory"); + goto nomem; + } + test->test_priv = test_pipeline; + + struct test_pipeline *t = evt_test_priv(test); + + t->nb_workers = evt_nr_active_lcores(opt->wlcores); + t->outstand_pkts = opt->nb_pkts * evt_nr_active_lcores(opt->wlcores); + t->done = false; + t->nb_flows = opt->nb_flows; + t->result = EVT_TEST_FAILED; + t->opt = opt; + opt->prod_type = EVT_PROD_TYPE_ETH_RX_ADPTR; + memcpy(t->sched_type_list, opt->sched_type_list, + sizeof(opt->sched_type_list)); + return 0; +nomem: + return -ENOMEM; +} + +void +pipeline_test_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + + rte_free(test->test_priv); +} diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h new file mode 100644 index 000000000..645571cf5 --- /dev/null +++ b/app/test-eventdev/test_pipeline_common.h @@ -0,0 +1,57 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#ifndef _TEST_PIPELINE_COMMON_ +#define _TEST_PIPELINE_COMMON_ + +#include <stdio.h> +#include <stdbool.h> +#include <unistd.h> + +#include <rte_cycles.h> +#include <rte_ethdev.h> +#include <rte_eventdev.h> +#include <rte_event_eth_rx_adapter.h> +#include <rte_lcore.h> +#include <rte_malloc.h> +#include <rte_mempool.h> +#include <rte_prefetch.h> +#include <rte_spinlock.h> + +#include "evt_common.h" +#include "evt_options.h" +#include "evt_test.h" + +struct test_pipeline; + +struct worker_data { + uint64_t processed_pkts; + uint8_t dev_id; + uint8_t port_id; + struct test_pipeline *t; +} __rte_cache_aligned; + +struct test_pipeline { + /* Don't change the offset of "done". Signal handler use this memory + * to terminate all lcores work. + */ + int done; + uint8_t nb_workers; + uint8_t mt_unsafe; + enum evt_test_result result; + uint32_t nb_flows; + uint64_t outstand_pkts; + struct rte_mempool *pool; + struct worker_data worker[EVT_MAX_PORTS]; + struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; + rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS]; + struct evt_options *opt; + uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; +} __rte_cache_aligned; + +int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); + +#endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 03/15] app/eventdev: add mempool setup and destroy 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 02/15] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh @ 2018-01-16 17:45 ` Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 04/15] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh ` (11 subsequent siblings) 13 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:45 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> --- app/test-eventdev/test_pipeline_common.c | 29 +++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index aa3481247..ff60fc36c 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,35 @@ #include "test_pipeline_common.h" +int +pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + t->pool = rte_pktmbuf_pool_create(test->name, /* mempool name */ + opt->pool_sz, /* number of elements*/ + 512, /* cache size*/ + 0, + RTE_MBUF_DEFAULT_BUF_SIZE, + opt->socket_id); /* flags */ + + if (t->pool == NULL) { + evt_err("failed to create mempool"); + return -ENOMEM; + } + + return 0; +} + +void +pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + struct test_pipeline *t = evt_test_priv(test); + + rte_mempool_free(t->pool); +} + int pipeline_test_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 645571cf5..569db1de5 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -52,6 +52,8 @@ struct test_pipeline { } __rte_cache_aligned; int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 04/15] app/eventdev: add pipeline opt dump and check functions 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 02/15] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 03/15] app/eventdev: add mempool " Pavan Nikhilesh @ 2018-01-16 17:45 ` Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 05/15] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh ` (10 subsequent siblings) 13 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:45 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.c | 84 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 ++ 2 files changed, 87 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index ff60fc36c..45e0652b8 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,90 @@ #include "test_pipeline_common.h" +int +pipeline_test_result(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(opt); + int i; + uint64_t total = 0; + struct test_pipeline *t = evt_test_priv(test); + + printf("Packet distribution across worker cores :\n"); + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + for (i = 0; i < t->nb_workers; i++) + printf("Worker %d packets: "CLGRN"%"PRIx64" "CLNRM"percentage:" + CLGRN" %3.2f\n"CLNRM, i, + t->worker[i].processed_pkts, + (((double)t->worker[i].processed_pkts)/total) + * 100); + return t->result; +} + +void +pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) +{ + evt_dump("nb_worker_lcores", "%d", evt_nr_active_lcores(opt->wlcores)); + evt_dump_worker_lcores(opt); + evt_dump_nb_stages(opt); + evt_dump("nb_evdev_ports", "%d", pipeline_nb_event_ports(opt)); + evt_dump("nb_evdev_queues", "%d", nb_queues); + evt_dump_queue_priority(opt); + evt_dump_sched_type_list(opt); + evt_dump_producer_type(opt); +} + +int +pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) +{ + unsigned int lcores; + /* + * N worker + 1 master + */ + lcores = 2; + + if (!rte_eth_dev_count()) { + evt_err("test needs minimum 1 ethernet dev"); + return -1; + } + + if (rte_lcore_count() < lcores) { + evt_err("test need minimum %d lcores", lcores); + return -1; + } + + /* Validate worker lcores */ + if (evt_lcores_has_overlap(opt->wlcores, rte_get_master_lcore())) { + evt_err("worker lcores overlaps with master lcore"); + return -1; + } + if (evt_has_disabled_lcore(opt->wlcores)) { + evt_err("one or more workers lcores are not enabled"); + return -1; + } + if (!evt_has_active_lcore(opt->wlcores)) { + evt_err("minimum one worker is required"); + return -1; + } + + if (nb_queues > EVT_MAX_QUEUES) { + evt_err("number of queues exceeds %d", EVT_MAX_QUEUES); + return -1; + } + if (pipeline_nb_event_ports(opt) > EVT_MAX_PORTS) { + evt_err("number of ports exceeds %d", EVT_MAX_PORTS); + return -1; + } + + if (evt_has_invalid_stage(opt)) + return -1; + + if (evt_has_invalid_sched_type(opt)) + return -1; + + return 0; +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 569db1de5..6e43eea2b 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -51,8 +51,11 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +int pipeline_test_result(struct evt_test *test, struct evt_options *opt); +int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 05/15] app/eventdev: add pipeline ethport setup and destroy 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (2 preceding siblings ...) 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 04/15] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh @ 2018-01-16 17:45 ` Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 06/15] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh ` (9 subsequent siblings) 13 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:45 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Add common ethdev port setup and destroy along with event dev destroy. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.c | 91 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 3 ++ 2 files changed, 94 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 45e0652b8..c20815c25 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -89,6 +89,97 @@ pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) return 0; } +#define NB_RX_DESC 128 +#define NB_TX_DESC 512 +int +pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int i; + uint8_t nb_queues = 1; + uint8_t mt_state = 0; + struct test_pipeline *t = evt_test_priv(test); + struct rte_eth_rxconf rx_conf; + struct rte_eth_conf port_conf = { + .rxmode = { + .mq_mode = ETH_MQ_RX_RSS, + .max_rx_pkt_len = ETHER_MAX_LEN, + .offloads = DEV_RX_OFFLOAD_CRC_STRIP, + .ignore_offload_bitfield = 1, + }, + .rx_adv_conf = { + .rss_conf = { + .rss_key = NULL, + .rss_hf = ETH_RSS_IP, + }, + }, + }; + + RTE_SET_USED(opt); + if (!rte_eth_dev_count()) { + evt_err("No ethernet ports found.\n"); + return -ENODEV; + } + + for (i = 0; i < rte_eth_dev_count(); i++) { + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(struct rte_eth_dev_info)); + rte_eth_dev_info_get(i, &dev_info); + mt_state = !(dev_info.tx_offload_capa & + DEV_TX_OFFLOAD_MT_LOCKFREE); + rx_conf = dev_info.default_rxconf; + rx_conf.offloads = port_conf.rxmode.offloads; + + if (rte_eth_dev_configure(i, nb_queues, nb_queues, + &port_conf) + < 0) { + evt_err("Failed to configure eth port [%d]\n", i); + return -EINVAL; + } + + if (rte_eth_rx_queue_setup(i, 0, NB_RX_DESC, + rte_socket_id(), &rx_conf, t->pool) < 0) { + evt_err("Failed to setup eth port [%d] rx_queue: %d.\n", + i, 0); + return -EINVAL; + } + if (rte_eth_tx_queue_setup(i, 0, NB_TX_DESC, + rte_socket_id(), NULL) < 0) { + evt_err("Failed to setup eth port [%d] tx_queue: %d.\n", + i, 0); + return -EINVAL; + } + + t->mt_unsafe |= mt_state; + rte_eth_promiscuous_enable(i); + } + + return 0; +} + +void +pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + int i; + RTE_SET_USED(test); + RTE_SET_USED(opt); + + for (i = 0; i < rte_eth_dev_count(); i++) { + rte_event_eth_rx_adapter_stop(i); + rte_eth_dev_stop(i); + rte_eth_dev_close(i); + } +} + +void +pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt) +{ + RTE_SET_USED(test); + + rte_event_dev_stop(opt->dev_id); + rte_event_dev_close(opt->dev_id); +} + int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 6e43eea2b..d8ab797bb 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -54,9 +54,12 @@ struct test_pipeline { int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); +void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); #endif /* _TEST_PIPELINE_COMMON_ */ -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 06/15] app/eventdev: add event port setup and Rx adapter setup 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (3 preceding siblings ...) 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 05/15] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh @ 2018-01-16 17:45 ` Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 07/15] app/eventdev: add Tx service setup Pavan Nikhilesh ` (8 subsequent siblings) 13 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:45 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Setup one port per worker and link to all queues and setup producer port based on Rx adapter capabilities. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.c | 114 +++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 5 ++ 2 files changed, 119 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index c20815c25..63f54daef 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -157,6 +157,120 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) return 0; } +int +pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint8_t *queue_arr, uint8_t nb_queues, + const struct rte_event_port_conf p_conf) +{ + int i; + int ret; + uint8_t port; + struct test_pipeline *t = evt_test_priv(test); + + + /* setup one port per worker, linking to all queues */ + for (port = 0; port < evt_nr_active_lcores(opt->wlcores); port++) { + struct worker_data *w = &t->worker[port]; + + w->dev_id = opt->dev_id; + w->port_id = port; + w->t = t; + w->processed_pkts = 0; + + ret = rte_event_port_setup(opt->dev_id, port, &p_conf); + if (ret) { + evt_err("failed to setup port %d", port); + return ret; + } + + if (queue_arr == NULL) { + if (rte_event_port_link(opt->dev_id, port, NULL, NULL, + 0) != nb_queues) + goto link_fail; + } else { + for (i = 0; i < nb_queues; i++) { + if (rte_event_port_link(opt->dev_id, port, + &queue_arr[i], NULL, 1) != 1) + goto link_fail; + } + } + } + + return 0; + +link_fail: + evt_err("failed to link all queues to port %d", port); + return -EINVAL; +} + +int +pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf) +{ + int ret = 0; + uint16_t prod; + struct rte_event_eth_rx_adapter_queue_conf queue_conf; + + memset(&queue_conf, 0, + sizeof(struct rte_event_eth_rx_adapter_queue_conf)); + queue_conf.ev.sched_type = opt->sched_type_list[0]; + for (prod = 0; prod < rte_eth_dev_count(); prod++) { + uint32_t cap; + + ret = rte_event_eth_rx_adapter_caps_get(opt->dev_id, + prod, &cap); + if (ret) { + evt_err("failed to get event rx adapter[%d]" + " capabilities", + opt->dev_id); + return ret; + } + queue_conf.ev.queue_id = prod * stride; + ret = rte_event_eth_rx_adapter_create(prod, opt->dev_id, + &prod_conf); + if (ret) { + evt_err("failed to create rx adapter[%d]", prod); + return ret; + } + ret = rte_event_eth_rx_adapter_queue_add(prod, prod, -1, + &queue_conf); + if (ret) { + evt_err("failed to add rx queues to adapter[%d]", prod); + return ret; + } + + if (!(cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT)) { + uint32_t service_id; + + rte_event_eth_rx_adapter_service_id_get(prod, + &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("Failed to setup service core" + " for Rx adapter\n"); + return ret; + } + } + + ret = rte_eth_dev_start(prod); + if (ret) { + evt_err("Ethernet dev [%d] failed to start." + " Using synthetic producer", prod); + return ret; + } + + ret = rte_event_eth_rx_adapter_start(prod); + if (ret) { + evt_err("Rx adapter[%d] start failed", prod); + return ret; + } + printf("%s: Port[%d] using Rx adapter[%d] started\n", __func__, + prod, prod); + } + + return ret; +} + void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index d8ab797bb..f8c46c0d7 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -55,7 +55,12 @@ int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, + struct rte_event_port_conf prod_conf); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); +int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, + uint8_t *queue_arr, uint8_t nb_queues, + const struct rte_event_port_conf p_conf); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 07/15] app/eventdev: add Tx service setup 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (4 preceding siblings ...) 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 06/15] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh @ 2018-01-16 17:45 ` Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 08/15] app/eventdev: launch pipeline lcores Pavan Nikhilesh ` (7 subsequent siblings) 13 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:45 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Setup one port event port for Tx and link the respective event queue. Register the Tx function as a service to be called from a service core. The Tx function dequeues the events from the event queue and transmits the packet to its respective ethernet port. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.c | 119 +++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 19 ++++- 2 files changed, 136 insertions(+), 2 deletions(-) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 63f54daef..98df423ae 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -5,6 +5,58 @@ #include "test_pipeline_common.h" +static int32_t +pipeline_event_tx_burst_service_func(void *args) +{ + + int i; + struct tx_service_data *tx = args; + const uint8_t dev = tx->dev_id; + const uint8_t port = tx->port_id; + struct rte_event ev[BURST_SIZE + 1]; + + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, BURST_SIZE, 0); + + if (!nb_rx) { + for (i = 0; i < tx->nb_ethports; i++) + rte_eth_tx_buffer_flush(i, 0, tx->tx_buf[i]); + return 0; + } + + for (i = 0; i < nb_rx; i++) { + struct rte_mbuf *m = ev[i].mbuf; + rte_eth_tx_buffer(m->port, 0, tx->tx_buf[m->port], m); + } + tx->processed_pkts += nb_rx; + + return 0; +} + +static int32_t +pipeline_event_tx_service_func(void *args) +{ + + int i; + struct tx_service_data *tx = args; + const uint8_t dev = tx->dev_id; + const uint8_t port = tx->port_id; + struct rte_event ev; + + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!nb_rx) { + for (i = 0; i < tx->nb_ethports; i++) + rte_eth_tx_buffer_flush(i, 0, tx->tx_buf[i]); + return 0; + } + + struct rte_mbuf *m = ev.mbuf; + rte_eth_tx_buffer(m->port, 0, tx->tx_buf[m->port], m); + tx->processed_pkts++; + + return 0; +} + int pipeline_test_result(struct evt_test *test, struct evt_options *opt) { @@ -151,6 +203,10 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt) } t->mt_unsafe |= mt_state; + t->tx_service.tx_buf[i] = + rte_malloc(NULL, RTE_ETH_TX_BUFFER_SIZE(BURST_SIZE), 0); + if (t->tx_service.tx_buf[i] == NULL) + rte_panic("Unable to allocate Tx buffer memory."); rte_eth_promiscuous_enable(i); } @@ -271,12 +327,75 @@ pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, return ret; } +int +pipeline_event_tx_service_setup(struct evt_test *test, struct evt_options *opt, + uint8_t tx_queue_id, uint8_t tx_port_id, + const struct rte_event_port_conf p_conf) +{ + int ret; + struct rte_service_spec serv; + struct test_pipeline *t = evt_test_priv(test); + struct tx_service_data *tx = &t->tx_service; + + ret = rte_event_port_setup(opt->dev_id, tx_port_id, &p_conf); + if (ret) { + evt_err("failed to setup port %d", tx_port_id); + return ret; + } + + if (rte_event_port_link(opt->dev_id, tx_port_id, &tx_queue_id, + NULL, 1) != 1) { + evt_err("failed to link queues to port %d", tx_port_id); + return -EINVAL; + } + + tx->dev_id = opt->dev_id; + tx->queue_id = tx_queue_id; + tx->port_id = tx_port_id; + tx->nb_ethports = rte_eth_dev_count(); + tx->t = t; + + /* Register Tx service */ + memset(&serv, 0, sizeof(struct rte_service_spec)); + snprintf(serv.name, sizeof(serv.name), "Tx_service"); + + if (evt_has_burst_mode(opt->dev_id)) + serv.callback = pipeline_event_tx_burst_service_func; + else + serv.callback = pipeline_event_tx_service_func; + + serv.callback_userdata = (void *)tx; + ret = rte_service_component_register(&serv, &tx->service_id); + if (ret) { + evt_err("failed to register Tx service"); + return ret; + } + + ret = evt_service_setup(tx->service_id); + if (ret) { + evt_err("Failed to setup service core for Tx service\n"); + return ret; + } + + rte_service_runstate_set(tx->service_id, 1); + + return 0; +} + + void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) { int i; RTE_SET_USED(test); RTE_SET_USED(opt); + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) { + rte_service_component_runstate_set(t->tx_service.service_id, 0); + rte_service_runstate_set(t->tx_service.service_id, 0); + rte_service_component_unregister(t->tx_service.service_id); + } for (i = 0; i < rte_eth_dev_count(); i++) { rte_event_eth_rx_adapter_stop(i); diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index f8c46c0d7..acbf688fb 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -19,6 +19,8 @@ #include <rte_mempool.h> #include <rte_prefetch.h> #include <rte_spinlock.h> +#include <rte_service.h> +#include <rte_service_component.h> #include "evt_common.h" #include "evt_options.h" @@ -33,6 +35,17 @@ struct worker_data { struct test_pipeline *t; } __rte_cache_aligned; +struct tx_service_data { + uint8_t dev_id; + uint8_t queue_id; + uint8_t port_id; + uint32_t service_id; + uint64_t processed_pkts; + uint16_t nb_ethports; + struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; + struct test_pipeline *t; +} __rte_cache_aligned; + struct test_pipeline { /* Don't change the offset of "done". Signal handler use this memory * to terminate all lcores work. @@ -45,8 +58,7 @@ struct test_pipeline { uint64_t outstand_pkts; struct rte_mempool *pool; struct worker_data worker[EVT_MAX_PORTS]; - struct rte_eth_dev_tx_buffer *tx_buf[RTE_MAX_ETHPORTS]; - rte_spinlock_t tx_lk[RTE_MAX_ETHPORTS]; + struct tx_service_data tx_service; struct evt_options *opt; uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; @@ -57,6 +69,9 @@ int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); int pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride, struct rte_event_port_conf prod_conf); +int pipeline_event_tx_service_setup(struct evt_test *test, + struct evt_options *opt, uint8_t tx_queue_id, + uint8_t tx_port_id, const struct rte_event_port_conf p_conf); int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, uint8_t *queue_arr, uint8_t nb_queues, -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 08/15] app/eventdev: launch pipeline lcores 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (5 preceding siblings ...) 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 07/15] app/eventdev: add Tx service setup Pavan Nikhilesh @ 2018-01-16 17:46 ` Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 09/15] app/eventdev: add pipeline queue test Pavan Nikhilesh ` (6 subsequent siblings) 13 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:46 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh The event master lcore's test termination and the logic to print the mpps are common for the queue and all types queue test. Move them as the common function. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.c | 67 ++++++++++++++++++++++++++++++++ app/test-eventdev/test_pipeline_common.h | 2 + 2 files changed, 69 insertions(+) diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c index 98df423ae..6cad9357b 100644 --- a/app/test-eventdev/test_pipeline_common.c +++ b/app/test-eventdev/test_pipeline_common.c @@ -90,6 +90,73 @@ pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues) evt_dump_producer_type(opt); } +static inline uint64_t +processed_pkts(struct test_pipeline *t) +{ + uint8_t i; + uint64_t total = 0; + + rte_smp_rmb(); + if (t->mt_unsafe) + total = t->tx_service.processed_pkts; + else + for (i = 0; i < t->nb_workers; i++) + total += t->worker[i].processed_pkts; + + return total; +} + +int +pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)) +{ + int ret, lcore_id; + struct test_pipeline *t = evt_test_priv(test); + + int port_idx = 0; + /* launch workers */ + RTE_LCORE_FOREACH_SLAVE(lcore_id) { + if (!(opt->wlcores[lcore_id])) + continue; + + ret = rte_eal_remote_launch(worker, + &t->worker[port_idx], lcore_id); + if (ret) { + evt_err("failed to launch worker %d", lcore_id); + return ret; + } + port_idx++; + } + + uint64_t perf_cycles = rte_get_timer_cycles(); + const uint64_t perf_sample = rte_get_timer_hz(); + + static float total_mpps; + static uint64_t samples; + + uint64_t prev_pkts = 0; + + while (t->done == false) { + const uint64_t new_cycles = rte_get_timer_cycles(); + + if ((new_cycles - perf_cycles) > perf_sample) { + const uint64_t curr_pkts = processed_pkts(t); + + float mpps = (float)(curr_pkts - prev_pkts)/1000000; + + prev_pkts = curr_pkts; + perf_cycles = new_cycles; + total_mpps += mpps; + ++samples; + printf(CLGRN"\r%.3f mpps avg %.3f mpps"CLNRM, + mpps, total_mpps/samples); + fflush(stdout); + } + } + printf("\n"); + return 0; +} + int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues) { diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index acbf688fb..db2517baf 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -76,6 +76,8 @@ int pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt); int pipeline_event_port_setup(struct evt_test *test, struct evt_options *opt, uint8_t *queue_arr, uint8_t nb_queues, const struct rte_event_port_conf p_conf); +int pipeline_launch_lcores(struct evt_test *test, struct evt_options *opt, + int (*worker)(void *)); void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 09/15] app/eventdev: add pipeline queue test 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (6 preceding siblings ...) 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 08/15] app/eventdev: launch pipeline lcores Pavan Nikhilesh @ 2018-01-16 17:46 ` Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 10/15] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh ` (5 subsequent siblings) 13 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:46 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline queue test case that aims at testing the following: 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The pipeline queue test configures the eventdev with Q queues and P ports, where Q is (nb_ethdev * nb_stages) + nb_ethdev and P is nb_workers. The user can choose the number of workers and number of stages through the --wlcores and the --stlist application command line arguments respectively. The probed ethernet devices act as producer(s) for this application. The ethdevs are configured as event Rx adapters that enables them to injects events to eventdev based the first stage schedule type list requested by the user through --stlist the command line argument. Based on the number of stages to process(selected through --stlist), the application forwards the event to next upstream queue and when it reaches last stage in the pipeline if the event type is ATOMIC it is enqueued onto ethdev Tx queue else to maintain ordering the event type is set to ATOMIC and enqueued onto the last stage queue. On packet Tx, application increments the number events processed and print periodically in one second to get the number of events processed in one second. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline queue test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_queue.c | 237 ++++++++++++++++++++++++++++++++ 2 files changed, 238 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_queue.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index 1707318f2..94b489f41 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -26,5 +26,6 @@ SRCS-y += test_perf_queue.c SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c +SRCS-y += test_pipeline_queue.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c new file mode 100644 index 000000000..773c3ecaa --- /dev/null +++ b/app/test-eventdev/test_pipeline_queue.c @@ -0,0 +1,237 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_queue_nb_event_queues(struct evt_options *opt) +{ + uint16_t eth_count = rte_eth_dev_count(); + + return (eth_count * opt->nb_stages) + eth_count; +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_queue_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) + rte_service_component_runstate_set(t->tx_service.service_id, 1); + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + int nb_stages = opt->nb_stages; + uint8_t queue; + struct rte_event_dev_info info; + struct test_pipeline *t = evt_test_priv(test); + uint8_t tx_evqueue_id = 0; + uint8_t queue_arr[RTE_EVENT_MAX_QUEUES_PER_DEV]; + uint8_t nb_worker_queues = 0; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count() * (nb_stages); + + /* Extra port for Tx service. */ + if (t->mt_unsafe) { + tx_evqueue_id = nb_queues; + nb_ports++; + nb_queues++; + } else + nb_queues += rte_eth_dev_count(); + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + uint8_t slot; + + if (!t->mt_unsafe) { + slot = queue % (nb_stages + 1); + q_conf.schedule_type = slot == nb_stages ? + RTE_SCHED_TYPE_ATOMIC : + opt->sched_type_list[slot]; + } else { + slot = queue % nb_stages; + + if (queue == tx_evqueue_id) { + q_conf.schedule_type = RTE_SCHED_TYPE_ATOMIC; + q_conf.event_queue_cfg = + RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + } else { + q_conf.schedule_type = + opt->sched_type_list[slot]; + queue_arr[nb_worker_queues] = queue; + nb_worker_queues++; + } + } + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + /* + * If tx is multi thread safe then allow workers to do Tx else use Tx + * service to Tx packets. + */ + if (t->mt_unsafe) { + ret = pipeline_event_port_setup(test, opt, queue_arr, + nb_worker_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_tx_service_setup(test, opt, tx_evqueue_id, + nb_ports - 1, p_conf); + + } else + ret = pipeline_event_port_setup(test, opt, NULL, nb_queues, + p_conf); + + if (ret) + return ret; + /* + * The pipelines are setup in the following manner: + * + * eth_dev_count = 2, nb_stages = 2. + * + * Multi thread safe : + * queues = 6 + * stride = 3 + * + * event queue pipelines: + * eth0 -> q0 -> q1 -> (q2->tx) + * eth1 -> q3 -> q4 -> (q5->tx) + * + * q2, q5 configured as ATOMIC + * + * Multi thread unsafe : + * queues = 5 + * stride = 2 + * + * event queue pipelines: + * eth0 -> q0 -> q1 + * } (q4->tx) Tx service + * eth1 -> q2 -> q3 + * + * q4 configured as SINGLE_LINK|ATOMIC + */ + ret = pipeline_event_rx_adapter_setup(opt, + t->mt_unsafe ? nb_stages : nb_stages + 1, p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_queue_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_queue_nb_event_queues(opt)); +} + +static int +pipeline_queue_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_queue_nb_event_queues(opt)); +} + +static bool +pipeline_queue_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_queue_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_queue_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_queue = { + .cap_check = pipeline_queue_capability_check, + .opt_check = pipeline_queue_opt_check, + .opt_dump = pipeline_queue_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_queue_eventdev_setup, + .launch_lcores = pipeline_queue_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_queue); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 10/15] app/eventdev: add pipeline queue worker functions 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (7 preceding siblings ...) 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 09/15] app/eventdev: add pipeline queue test Pavan Nikhilesh @ 2018-01-16 17:46 ` Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 11/15] app/eventdev: add pipeline atq test Pavan Nikhilesh ` (4 subsequent siblings) 13 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:46 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_common.h | 80 +++++++++ app/test-eventdev/test_pipeline_queue.c | 288 ++++++++++++++++++++++++++++++- 2 files changed, 367 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index db2517baf..5fb91607d 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -63,6 +63,86 @@ struct test_pipeline { uint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned; } __rte_cache_aligned; +#define BURST_SIZE 16 + +#define PIPELINE_WROKER_SINGLE_STAGE_INIT \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + struct rte_event ev + +#define PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT \ + int i; \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + struct rte_event ev[BURST_SIZE + 1] + +#define PIPELINE_WROKER_MULTI_STAGE_INIT \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + uint8_t cq_id; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + const uint8_t last_queue = t->opt->nb_stages - 1; \ + uint8_t *const sched_type_list = &t->sched_type_list[0]; \ + struct rte_event ev + +#define PIPELINE_WROKER_MULTI_STAGE_BURST_INIT \ + int i; \ + struct worker_data *w = arg; \ + struct test_pipeline *t = w->t; \ + uint8_t cq_id; \ + const uint8_t dev = w->dev_id; \ + const uint8_t port = w->port_id; \ + const uint8_t last_queue = t->opt->nb_stages - 1; \ + uint8_t *const sched_type_list = &t->sched_type_list[0]; \ + struct rte_event ev[BURST_SIZE + 1] + +static __rte_always_inline void +pipeline_fwd_event(struct rte_event *ev, uint8_t sched) +{ + ev->event_type = RTE_EVENT_TYPE_CPU; + ev->op = RTE_EVENT_OP_FORWARD; + ev->sched_type = sched; +} + +static __rte_always_inline void +pipeline_event_enqueue(const uint8_t dev, const uint8_t port, + struct rte_event *ev) +{ + while (rte_event_enqueue_burst(dev, port, ev, 1) != 1) + rte_pause(); +} + +static __rte_always_inline void +pipeline_event_enqueue_burst(const uint8_t dev, const uint8_t port, + struct rte_event *ev, const uint16_t nb_rx) +{ + uint16_t enq; + + enq = rte_event_enqueue_burst(dev, port, ev, nb_rx); + while (enq < nb_rx) { + enq += rte_event_enqueue_burst(dev, port, + ev + enq, nb_rx - enq); + } +} + +static __rte_always_inline void +pipeline_tx_pkt(struct rte_mbuf *mbuf) +{ + while (rte_eth_tx_burst(mbuf->port, 0, &mbuf, 1) != 1) + rte_pause(); +} + +static inline int +pipeline_nb_event_ports(struct evt_options *opt) +{ + return evt_nr_active_lcores(opt->wlcores); +} + int pipeline_test_result(struct evt_test *test, struct evt_options *opt); int pipeline_opt_check(struct evt_options *opt, uint64_t nb_queues); int pipeline_test_setup(struct evt_test *test, struct evt_options *opt); diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c index 773c3ecaa..835fe0782 100644 --- a/app/test-eventdev/test_pipeline_queue.c +++ b/app/test-eventdev/test_pipeline_queue.c @@ -15,10 +15,296 @@ pipeline_queue_nb_event_queues(struct evt_options *opt) return (eth_count * opt->nb_stages) + eth_count; } +static int +pipeline_queue_worker_single_stage_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + w->processed_pkts++; + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_queue_worker_single_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + + +static int +pipeline_queue_worker_multi_stage_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + ev.queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.queue_id % nb_stages; + + if (cq_id == last_queue) { + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } else { + ev.queue_id++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id >= last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + ev[i].queue_id += (cq_id == last_queue) ? 1 : 0; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_queue_worker_multi_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages + 1; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].queue_id % nb_stages; + + if (cq_id == last_queue) { + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } else { + ev[i].queue_id++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_queue_worker_single_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_single_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_queue_worker_single_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_single_stage_burst_fwd( + arg); + } else { + if (!burst && mt_safe) + return pipeline_queue_worker_multi_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_queue_worker_multi_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_queue_worker_multi_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_queue_worker_multi_stage_burst_fwd(arg); + + } rte_panic("invalid worker\n"); } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 11/15] app/eventdev: add pipeline atq test 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (8 preceding siblings ...) 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 10/15] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh @ 2018-01-16 17:46 ` Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 12/15] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh ` (3 subsequent siblings) 13 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:46 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh This is a pipeline test case that aims at testing the following with ``all types queue`` eventdev scheme. 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The atq queue test functions as same as ``pipeline_queue`` test. The difference is, It uses, ``all type queue scheme`` instead of separate queues for each stage and thus reduces the number of queues required to realize the use case. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline atq test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_atq.c | 223 ++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_atq.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index 94b489f41..e600e21c4 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -27,5 +27,6 @@ SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c SRCS-y += test_pipeline_queue.c +SRCS-y += test_pipeline_atq.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c new file mode 100644 index 000000000..6c9ac6119 --- /dev/null +++ b/app/test-eventdev/test_pipeline_atq.c @@ -0,0 +1,223 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_atq_nb_event_queues(struct evt_options *opt) +{ + RTE_SET_USED(opt); + + return rte_eth_dev_count(); +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_atq_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) + rte_service_component_runstate_set(t->tx_service.service_id, 1); + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + uint8_t queue; + struct rte_event_dev_info info; + struct test_pipeline *t = evt_test_priv(test); + uint8_t tx_evqueue_id = 0; + uint8_t queue_arr[RTE_EVENT_MAX_QUEUES_PER_DEV]; + uint8_t nb_worker_queues = 0; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count(); + + /* One extra port and queueu for Tx service */ + if (t->mt_unsafe) { + tx_evqueue_id = nb_queues; + nb_ports++; + nb_queues++; + } + + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + q_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_ALL_TYPES; + + if (t->mt_unsafe) { + if (queue == tx_evqueue_id) { + q_conf.event_queue_cfg = + RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + } else { + queue_arr[nb_worker_queues] = queue; + nb_worker_queues++; + } + } + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + if (t->mt_unsafe) { + ret = pipeline_event_port_setup(test, opt, queue_arr, + nb_worker_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_tx_service_setup(test, opt, tx_evqueue_id, + nb_ports - 1, p_conf); + } else + ret = pipeline_event_port_setup(test, opt, NULL, nb_queues, + p_conf); + + if (ret) + return ret; + + /* + * The pipelines are setup in the following manner: + * + * eth_dev_count = 2, nb_stages = 2, atq mode + * + * Multi thread safe : + * queues = 2 + * stride = 1 + * + * event queue pipelines: + * eth0 -> q0 ->tx + * eth1 -> q1 ->tx + * + * q0, q1 are configured as ATQ so, all the different stages can + * be enqueued on the same queue. + * + * Multi thread unsafe : + * queues = 3 + * stride = 1 + * + * event queue pipelines: + * eth0 -> q0 + * } (q3->tx) Tx service + * eth1 -> q1 + * + * q0,q1 are configured as stated above. + * q3 configured as SINGLE_LINK|ATOMIC. + */ + ret = pipeline_event_rx_adapter_setup(opt, 1, p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_atq_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_atq_nb_event_queues(opt)); +} + +static int +pipeline_atq_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_atq_nb_event_queues(opt)); +} + +static bool +pipeline_atq_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_atq_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_atq_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_atq = { + .cap_check = pipeline_atq_capability_check, + .opt_check = pipeline_atq_opt_check, + .opt_dump = pipeline_atq_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_atq_eventdev_setup, + .launch_lcores = pipeline_atq_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_atq); -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 12/15] app/eventdev: add pipeline atq worker functions 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (9 preceding siblings ...) 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 11/15] app/eventdev: add pipeline atq test Pavan Nikhilesh @ 2018-01-16 17:46 ` Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 13/15] doc: add pipeline queue test in eventdev test guide Pavan Nikhilesh ` (2 subsequent siblings) 13 siblings, 0 replies; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:46 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> --- app/test-eventdev/test_pipeline_atq.c | 280 +++++++++++++++++++++++++++++++++- 1 file changed, 279 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c index 6c9ac6119..36abbddda 100644 --- a/app/test-eventdev/test_pipeline_atq.c +++ b/app/test-eventdev/test_pipeline_atq.c @@ -15,10 +15,288 @@ pipeline_atq_nb_event_queues(struct evt_options *opt) return rte_eth_dev_count(); } +static int +pipeline_atq_worker_single_stage_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + w->processed_pkts++; + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_multi_stage_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + w->processed_pkts++; + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + w->processed_pkts++; + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_atq_worker_single_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_single_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_atq_worker_single_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_single_stage_burst_fwd(arg); + } else { + if (!burst && mt_safe) + return pipeline_atq_worker_multi_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_multi_stage_fwd(arg); + if (burst && mt_safe) + return pipeline_atq_worker_multi_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_multi_stage_burst_fwd(arg); + } rte_panic("invalid worker\n"); } -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 13/15] doc: add pipeline queue test in eventdev test guide 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (10 preceding siblings ...) 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 12/15] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh @ 2018-01-16 17:46 ` Pavan Nikhilesh [not found] ` <CY4PR07MB3464D865D1B9CA42596A242380E90@CY4PR07MB3464.namprd07.prod.outlook.com> 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 14/15] doc: add pipeline atq " Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 15/15] doc: update 18.02 release notes Pavan Nikhilesh 13 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:46 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- .../img/eventdev_pipeline_queue_test_generic.svg | 3548 ++++++++++++++++++ .../img/eventdev_pipeline_queue_test_lockfree.svg | 3826 ++++++++++++++++++++ doc/guides/tools/testeventdev.rst | 106 + 3 files changed, 7480 insertions(+) create mode 100644 doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg create mode 100644 doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg diff --git a/doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg b/doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg new file mode 100644 index 000000000..732d48867 --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_queue_test_generic.svg @@ -0,0 +1,3548 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_queue_test_generic.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76448972,0,0,0.86504892,-92.637138,19.716473)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,10.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,7.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6-6" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-1" + style="overflow:visible"> + <path + id="path3704-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-172.30743,65.79201)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.30743,9.792007)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(17.692568,-46.20799)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14db;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14e4;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient16362" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-4" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker55720" + style="overflow:visible"> + <path + id="path55718" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-9" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-3" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78531244,0,0,1,50.143534,82.69878)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-8" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-84" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-8-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-84-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-5" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-9-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-5-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-0-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-9-72" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-5-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-0-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.7519532" + inkscape:cx="423.24137" + inkscape:cy="157.27924" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="1920" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="56.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.7960096;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.47435" + height="193.53508" + x="217.62262" + y="133.47206" + ry="4.8934555" + rx="6.9415913" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="452.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="452.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_queue</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+3</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.83277988px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.90273178" + x="199.11482" + y="111.36845" + id="text5219-26" + transform="scale(0.90273173,1.1077488)"><tspan + sodipodi:role="line" + x="199.11482" + y="111.36845" + id="tspan5223-10" + style="font-size:9.02731705px;line-height:1.25;stroke-width:0.90273178">total queues = (number of stages * number of ethernet dev) + 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.11939621px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92661637" + x="257.40421" + y="328.77414" + id="text5219-26-2" + transform="scale(0.92661635,1.0791953)"><tspan + sodipodi:role="line" + x="257.40421" + y="328.77414" + id="tspan5223-10-7" + style="font-size:9.26616383px;line-height:1.25;stroke-width:0.92661637">All workers are linked to all stage queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="422.98328" + y="281.69067" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="424.52948" + y="225.81598" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="423.67426" + y="169.85918" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="426.57141" + y="167.14041" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="426.57141" + y="167.14041" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="428.30768" + y="223.46143" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="428.30768" + y="223.46143" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="426.30768" + y="279.46143" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="426.30768" + y="279.46143" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="431.82605" + y="188.68941" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="431.82605" + y="188.68941" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="432.94501" + y="244.64697" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="432.94501" + y="244.64697" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="432.94501" + y="300.64697" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="432.94501" + y="300.64697" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <g + style="display:inline;opacity:1" + id="g20550" + transform="translate(65.401608,-190.91553)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13899" + transform="translate(-17.21182,-3.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13911" + transform="translate(-15.21182,-1.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g16360" + transform="matrix(1.0983058,0,0,1.0572541,-82.192809,-6.5664741)"> + <ellipse + ry="24.258638" + rx="22.831659" + cy="161.21605" + cx="559.68445" + id="path8843" + style="fill:#ffffff;fill-opacity:0.98039216;stroke:url(#linearGradient16362);stroke-opacity:1" /> + <text + transform="scale(0.94727182,1.0556632)" + id="text5219-2-4-3-3-4-5" + y="151.93637" + x="571.61011" + style="font-style:normal;font-weight:normal;font-size:10.76524448px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.89710373" + xml:space="preserve"><tspan + id="tspan1265-5" + style="font-size:7.77489901px;line-height:1.25;stroke-width:0.89710373" + y="151.93637" + x="571.61011" + sodipodi:role="line">Tx Service</tspan><tspan + style="font-size:7.77489901px;line-height:1.25;stroke-width:0.89710373" + y="161.655" + x="571.61011" + sodipodi:role="line" + id="tspan40484">port n + 1</tspan></text> + </g> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1)" + d="m 475.41709,184.68945 c 14.66204,14.27312 29.32201,28.54422 43.97988,42.81328" + id="path5226-6-2-1-2-4-5-1-5-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2" + inkscape:original-d="m 475.41709,184.68945 c 14.66303,14.2721 29.323,28.54321 43.97988,42.81328" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14db;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6)" + d="m 476.32916,241.51456 c 13.86102,-0.34 27.7191,-0.67992 41.57417,-1.01977" + id="path5226-6-2-1-2-4-5-1-5-0-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9" + inkscape:original-d="m 476.32916,241.51456 c 13.861,-0.34097 27.71908,-0.6809 41.57417,-1.01977" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14e4;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6-6)" + d="m 474.31327,298.61285 c 15.031,-15.59075 30.05891,-31.17831 45.0837,-46.76263" + id="path5226-6-2-1-2-4-5-1-5-0-2-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + inkscape:original-d="m 474.31327,298.61285 c 15.03102,-15.59073 30.05893,-31.17829 45.0837,-46.76263" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-3);stroke-width:0.94657081;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-7" + width="30.678661" + height="24.347494" + x="519.39697" + y="227.50273" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="571.69696" + y="217.79964" + id="text5219-2-4-3-3-4-54-8-7-5" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="571.69696" + y="217.79964" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2-3">Single</tspan><tspan + sodipodi:role="line" + x="571.69696" + y="226.76561" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan6344">Link Q</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:1.01153409;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-6)" + d="m 391.11413,240.54267 c 10.00574,0.0714 20.0096,0.14275 30.01154,0.21411" + id="path5226-6-2-1-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-84" + inkscape:original-d="m 391.11413,240.54267 c 10.00575,0.0704 20.00961,0.14176 30.01154,0.21411" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-1)" + d="m 391.05684,296.14092 c 0,0 29.39924,0 29.39924,0" + id="path5226-6-2-1-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-9" + inkscape:original-d="m 391.05684,296.14092 h 29.39924" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:1.00593412;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-6-0)" + d="m 389.52644,184.04076 c 10.20679,0.0726 20.41171,0.14509 30.61473,0.21761" + id="path5226-6-2-1-3-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-84-8" + inkscape:original-d="m 389.52644,184.04076 c 10.2068,0.0715 20.41172,0.14408 30.61473,0.21761" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-2)" + d="m 533.61005,227.17178 c -0.11895,-11.90475 -0.23788,-23.80683 -0.35678,-35.70623" + id="path5226-6-2-1-2-4-5-1-5-0-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-6" + inkscape:original-d="m 533.61005,227.17178 c -0.11794,-11.90476 -0.23687,-23.80684 -0.35678,-35.70623" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-9)" + d="m 554.18303,173.89676 c 12.12572,3.64515 24.2491,7.2896 36.37012,10.93334" + id="path5226-6-2-1-2-4-5-1-5-0-48" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-0" + inkscape:original-d="m 554.18303,173.89676 c 12.12608,3.64396 24.24946,7.28841 36.37012,10.93334" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-9-7)" + d="m 554.18303,173.89676 c 12.8469,22.86455 25.6922,45.72625 38.53585,68.585" + id="path5226-6-2-1-2-4-5-1-5-0-48-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-0-7" + inkscape:original-d="m 554.18303,173.89676 c 12.84809,22.86388 25.69339,45.72558 38.53585,68.585" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-9-72)" + d="m 554.18303,173.89676 c 12.65661,41.60787 25.31164,83.21054 37.96507,124.80795" + id="path5226-6-2-1-2-4-5-1-5-0-48-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-0-6" + inkscape:original-d="m 554.18303,173.89676 c 12.65781,41.6075 25.31284,83.21018 37.96507,124.80795" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="665.00641" + y="346.51425" + id="text5219-2-4-3-3-4-54-8-7" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="665.00641" + y="346.51425" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2">(Tx Generic)</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg b/doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg new file mode 100644 index 000000000..c0a365c7b --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_queue_test_lockfree.svg @@ -0,0 +1,3826 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_queue_test_lockfree.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3824" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path3822" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect3820" + effect="bspline" /> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17998" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17996" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill:#02d804;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill:#02d804;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#02d804;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1;fill-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#02d804;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1;fill-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#02d804;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#02d804;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#02d804;stroke-width:1pt;stroke-opacity:1;fill:#02d804;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42,-48)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.76445442,0,0,0.88401527,-92.618478,17.226692)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1922" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1924" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-306,28)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.98357201,0,0,0.98599728,8.112791,5.0165199)" /> + <linearGradient + gradientTransform="matrix(0.9887388,0,0,1.0000197,5.30654,1.2433556)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,84.05654)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,84.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-44.08539,8.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-42.08539,62.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-242.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1922-1-2" + x1="537.74072" + y1="156.9726" + x2="577.87439" + y2="156.9726" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-246.08539,138.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-8-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6-6" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-1" + style="overflow:visible"> + <path + id="path3704-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-124.30743,61.79201)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.69257,7.792007)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(63.692568,-46.20799)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-4" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker55720" + style="overflow:visible"> + <path + id="path55718" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-9" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-9" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5-3" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-180.52717,84.698813)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5-3-5" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-180.02718,138.1988)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1924-6-5-3-6" + x1="597.00317" + y1="156.97769" + x2="637.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-180.52718,28.351329)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-70" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-1-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-2-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-70-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-2-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-6-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6-2" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6-2-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1-3-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-5-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-45" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-45-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-2-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-45-0" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.0000001" + inkscape:cx="394.32532" + inkscape:cy="122.70585" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="1920" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1" + width="39.065548" + height="24.347494" + x="350.27478" + y="172.79883" /> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.98478383;stroke-opacity:1" + id="rect3697" + width="620.35291" + height="283.12207" + x="54.481201" + y="104.53681" + rx="0" + ry="0" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="113.72678" + y="167.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.03741" + y="210.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="115.03741" + y="210.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.80466998;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="187.46568" + height="197.77837" + x="217.62695" + y="133.47639" + ry="5.0007453" + rx="6.9412708" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.09811" + y="168.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="238.09811" + y="168.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="304.09808" + y="170.4389" + id="text5219-1-9-4-3-9"><tspan + sodipodi:role="line" + x="304.09808" + y="170.4389" + id="tspan5223-2-3-5-6-1" + style="font-size:10px;line-height:1.25">q1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.09808" + y="170.4389" + id="text5219-1-9-4-3-0-7"><tspan + sodipodi:role="line" + x="358.09808" + y="170.4389" + id="tspan5223-2-3-5-6-6-1" + style="font-size:10px;line-height:1.25">qs-2</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 164.59877,183.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 164.59877,183.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.44385" + y="186.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="115.44385" + y="186.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="233.5372" + y="172.80396" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7" + width="39.065548" + height="24.347494" + x="291.53723" + y="172.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="458.47687" + y="382.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="458.47687" + y="382.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_queue</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5)" + d="m 272.66672,182.86561 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5" + inkscape:original-d="m 272.66672,182.86561 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2)" + d="m 331.73779,183.57272 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1" + inkscape:original-d="m 331.73779,183.57272 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="111.64139" + y="223.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="112.95203" + y="266.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="112.95203" + y="266.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="238.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="226.49542" + id="text5219-1-9-4-3-9-7"><tspan + sodipodi:role="line" + x="298.0127" + y="226.49542" + id="tspan5223-2-3-5-6-1-8" + style="font-size:10px;line-height:1.25">qs+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="226.49542" + id="text5219-1-9-4-3-0-7-4"><tspan + sodipodi:role="line" + x="358.0127" + y="226.49542" + id="tspan5223-2-3-5-6-6-1-5" + style="font-size:10px;line-height:1.25">q2s-2</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 164.51338,239.5091 H 229.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 164.51338,239.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="242.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="115.35846" + y="242.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="233.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3" + width="39.065548" + height="24.347494" + x="351.45184" + y="228.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2" + width="39.065548" + height="24.347494" + x="292.18939" + y="228.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8)" + d="m 272.58133,238.92215 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9" + inkscape:original-d="m 272.58133,238.92215 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6)" + d="m 331.6524,239.62926 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6" + inkscape:original-d="m 331.6524,239.62926 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="113.64139" + y="277.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="114.95203" + y="320.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="114.95203" + y="320.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="238.01276" + y="278.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="238.01276" + y="278.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="298.0127" + y="280.49542" + id="text5219-1-9-4-3-9-7-2"><tspan + sodipodi:role="line" + x="298.0127" + y="280.49542" + id="tspan5223-2-3-5-6-1-8-0" + style="font-size:10px;line-height:1.25">q2s+1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="358.0127" + y="280.49542" + id="text5219-1-9-4-3-0-7-4-6"><tspan + sodipodi:role="line" + x="358.0127" + y="280.49542" + id="tspan5223-2-3-5-6-6-1-5-8" + style="font-size:10px;line-height:1.25">q3s-2</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 164.51338,293.50911 H 229.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 164.51338,293.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="115.35846" + y="296.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="115.35846" + y="296.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="233.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5" + width="39.065548" + height="24.347494" + x="351.45184" + y="282.86047" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1922-1-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-3-1-2-0" + width="39.065548" + height="24.347494" + x="292.18939" + y="282.85535" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-8-4)" + d="m 272.58133,292.92216 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-6-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-9-3" + inkscape:original-d="m 272.58133,292.92216 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-0)" + d="m 331.6524,293.62927 c 5.35689,0.008 10.71279,0.0161 16.06769,0.0241" + id="path5226-6-2-1-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-8" + inkscape:original-d="m 331.6524,293.62927 c 5.35689,0.007 10.71279,0.0151 16.06769,0.0241" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.83277988px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.90273178" + x="143.72733" + y="111.36845" + id="text5219-26" + transform="scale(0.90273173,1.1077488)"><tspan + sodipodi:role="line" + x="143.72733" + y="111.36845" + id="tspan5223-10" + style="font-size:9.02731705px;line-height:1.25;stroke-width:0.90273178">total queues = (number of stages * number of ethernet dev) + number of ethernet dev</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="64.563202" + y="226.82373" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="64.563202" + y="226.82373" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="64.563202" + y="238.40718" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="277.94644" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="277.94644" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="289.52991" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="65.632019" + y="176.01201" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="65.632019" + y="176.01201" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="65.632019" + y="187.59546" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="173.85902" + y="162.83041" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="173.85902" + y="162.83041" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="173.85902" + y="172.83041" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="215.89487" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="215.89487" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="225.89487" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="174.24074" + y="269.76031" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="174.24074" + y="269.76031" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="174.24074" + y="279.76031" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="470.98328" + y="277.69067" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="470.52948" + y="223.81598" + rx="11.6051" + ry="16.293755" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="469.67426" + y="169.85918" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="474.57141" + y="167.14041" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="474.57141" + y="167.14041" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="474.30768" + y="221.46143" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="474.30768" + y="221.46143" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="476.30768" + y="275.46143" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="476.30768" + y="275.46143" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="479.82605" + y="188.68941" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="479.82605" + y="188.68941" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="480.94501" + y="242.64697" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="480.94501" + y="242.64697" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="482.94501" + y="296.64697" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="482.94501" + y="296.64697" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <g + style="display:inline;opacity:1" + id="g20550" + transform="translate(57.401608,-196.91553)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13899" + transform="translate(-23.21182,-3.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + style="display:inline;opacity:1" + id="g13911" + transform="translate(-23.21182,-7.304662)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95700002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.48400021, 0.95700002;stroke-dashoffset:0;stroke-opacity:1;marker-mid:url(#marker15998);marker-end:url(#TriangleOutM-5-2-6-5);paint-order:normal" + d="m 521.74679,185.45912 c 20.71371,-0.15575 41.42073,-0.31145 62.12958,-0.46716" + id="path5226-6-2-1-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2" + inkscape:original-d="m 521.74679,185.45912 c 20.7137,-0.15674 41.42072,-0.31244 62.12958,-0.46716" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95306396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.43676775, 0.95306398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8)" + d="m 522.24235,239.92415 c 20.38012,-0.0124 40.75646,-0.0248 61.129,-0.0372" + id="path5226-6-2-1-2-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7" + inkscape:original-d="m 522.24235,239.92415 c 20.38012,-0.0134 40.75646,-0.0258 61.129,-0.0372" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.94650453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.35805474, 0.94650456;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6)" + d="m 523.10585,294.89606 c 20.2117,-0.0124 40.41967,-0.0248 60.6239,-0.0372" + id="path5226-6-2-1-2-3-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2" + inkscape:original-d="m 523.10585,294.89606 c 20.2117,-0.0134 40.41967,-0.0258 60.6239,-0.0372" + sodipodi:nodetypes="cc" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5-3);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5-7" + width="39.065548" + height="24.347494" + x="417.01007" + y="229.50275" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5-3-5);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5-7-5" + width="39.065548" + height="24.347494" + x="417.51007" + y="283.00275" /> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1924-6-5-3-6);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-0-1-7-3-5-7-9" + width="39.065548" + height="24.347494" + x="417.01007" + y="173.15526" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95740849;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.48890185, 0.95740849;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-1)" + d="m 521.87938,186.09993 c 20.73597,17.34221 41.46901,34.68197 62.19908,52.01925" + id="path5226-6-2-1-2-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-70" + inkscape:original-d="m 521.87938,186.09993 c 20.73687,17.34113 41.46991,34.68089 62.19908,52.01925" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95740849;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.48890185, 0.95740849;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-1-3)" + d="m 521.87938,186.09993 c 21.06868,35.47019 42.13466,70.93583 63.19791,106.39688" + id="path5226-6-2-1-2-9-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-70-0" + inkscape:original-d="m 521.87938,186.09993 c 21.06986,35.46949 42.13584,70.93513 63.19791,106.39688" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95306396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.43676775, 0.95306398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-2)" + d="m 522.24235,239.92415 c 20.72818,-17.7602 41.45248,-35.51707 62.17286,-53.27058" + id="path5226-6-2-1-2-3-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-1" + inkscape:original-d="m 522.24235,239.92415 c 20.72811,-17.76028 41.45241,-35.51715 62.17286,-53.27058" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.95306396;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.43676775, 0.95306398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-2-7)" + d="m 522.24235,239.92415 c 20.71136,17.70863 41.41982,35.41479 62.12534,53.11843" + id="path5226-6-2-1-2-3-8-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-1-2" + inkscape:original-d="m 522.24235,239.92415 c 20.71227,17.70756 41.42074,35.41372 62.12534,53.11843" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.94650453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.35805474, 0.94650456;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6-2)" + d="m 523.10585,294.89606 c 20.70868,-35.85548 41.41388,-71.70493 62.11558,-107.54833" + id="path5226-6-2-1-2-3-9-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2-7" + inkscape:original-d="m 523.10585,294.89606 c 20.709,-35.8553 41.41419,-71.70475 62.11558,-107.54833" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:0.94650453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.35805474, 0.94650456;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6-2-9)" + d="m 523.10585,294.89606 c 20.34274,-17.79464 40.68168,-35.58595 61.0168,-53.37392" + id="path5226-6-2-1-2-3-9-5-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2-7-2" + inkscape:original-d="m 523.10585,294.89606 c 20.34268,-17.79471 40.68162,-35.58602 61.0168,-53.37392" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="425.99841" + y="170.84738" + id="text5219-1-9-4-3-0-7-9"><tspan + sodipodi:role="line" + x="425.99841" + y="170.84738" + id="tspan5223-2-3-5-6-6-1-7" + style="font-size:10px;line-height:1.25">qs-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="421.81482" + y="225.84738" + id="text5219-1-9-4-3-0-7-4-3"><tspan + sodipodi:role="line" + x="421.81482" + y="225.84738" + id="tspan5223-2-3-5-6-6-1-5-6" + style="font-size:10px;line-height:1.25">q2s-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="422.31482" + y="280.84738" + id="text5219-1-9-4-3-0-7-4-6-1"><tspan + sodipodi:role="line" + x="422.31482" + y="280.84738" + id="tspan5223-2-3-5-6-6-1-5-8-2" + style="font-size:10px;line-height:1.25">q3s-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="460.42477" + y="171.1732" + id="text5219-2-4-3-3-4-54-9" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="460.42477" + y="171.1732" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3">Atomic Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="460.36716" + y="222.90977" + id="text5219-2-4-3-3-4-54-9-1" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="460.36716" + y="222.90977" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9">Atomic Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="460.9137" + y="272.77069" + id="text5219-2-4-3-3-4-54-9-1-4" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="460.9137" + y="272.77069" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7">Atomic Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="259.7941" + y="171.67656" + id="text5219-2-4-3-3-4-54-9-1-4-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="259.7941" + y="171.67656" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7-4">Stage0 Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="324.4256" + y="171.78726" + id="text5219-2-4-3-3-4-54-9-1-4-8-5" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="324.4256" + y="171.78726" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7-4-0">Stage1 Q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="387.27545" + y="171.78726" + id="text5219-2-4-3-3-4-54-9-1-4-8-3" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="387.27545" + y="171.78726" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-3-9-7-4-6">Stage2 Q</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3)" + d="m 389.46533,184.29883 c 8.27875,0.0849 16.55652,0.16972 24.83331,0.25456" + id="path5226-6-2-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61" + inkscape:original-d="m 389.46533,184.29883 c 8.27876,0.0838 16.55653,0.16871 24.83331,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-5)" + d="m 390.72763,241.07286 c 7.69543,-0.0401 15.38987,-0.0803 23.08331,-0.12044" + id="path5226-6-2-5-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-7" + inkscape:original-d="m 390.72763,241.07286 c 7.69543,-0.0411 15.38986,-0.0813 23.08331,-0.12044" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-5-5)" + d="m 391.22399,294.91526 c 7.7371,0.002 15.47319,0.003 23.20831,0.005" + id="path5226-6-2-5-6-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-7-9" + inkscape:original-d="m 391.22399,294.91526 c 7.7371,5.2e-4 15.47319,0.002 23.20831,0.005" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7)" + d="m 456.10017,185.43501 c 3.94541,0.0849 7.88985,0.16973 11.83331,0.25456" + id="path5226-6-2-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-2" + inkscape:original-d="m 456.10017,185.43501 c 3.94543,0.0838 7.88987,0.16871 11.83331,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7-4)" + d="m 456.60293,240.94938 c 3.94541,0.0849 7.88985,0.16973 11.83331,0.25456" + id="path5226-6-2-5-5-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-2-4" + inkscape:original-d="m 456.60293,240.94938 c 3.94543,0.0839 7.88987,0.16871 11.83331,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.5999999, 0.89999998;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7-3)" + d="m 457.60293,295.44938 c 3.94541,0.0849 7.88985,0.16973 11.83331,0.25456" + id="path5226-6-2-5-5-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-2-7" + inkscape:original-d="m 457.60293,295.44938 c 3.94543,0.0838 7.88987,0.16871 11.83331,0.25456" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="670.83521" + y="349.11719" + id="text5219-2-4-3-3-4-54" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="670.83521" + y="349.11719" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4">(Tx Lock free)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.11939621px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92661637" + x="252.78516" + y="328.88882" + id="text5219-26-2-3" + transform="scale(0.92661635,1.0791953)"><tspan + sodipodi:role="line" + x="252.78516" + y="328.88882" + id="tspan5223-10-7-6" + style="font-size:9.26616383px;line-height:1.25;stroke-width:0.92661637">All workers are linked to all queues</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/testeventdev.rst b/doc/guides/tools/testeventdev.rst index 9785e8431..33fe5e730 100644 --- a/doc/guides/tools/testeventdev.rst +++ b/doc/guides/tools/testeventdev.rst @@ -441,3 +441,109 @@ Example command to run perf ``all types queue`` test: sudo build/app/dpdk-test-eventdev --vdev=event_octeontx -- \ --test=perf_atq --plcores=2 --wlcore=3 --stlist=p --nb_pkts=0 + + +PIPELINE_QUEUE Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following: + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_queue_test: + +.. table:: Pipeline queue test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | (nb_producers | Queues will be configured based on the | + | | | * nb_stages) + | user requested sched type list(--stlist)| + | | | x | Here value of x is 1 in generic pipeline| + | | | | and nb_producers in lockfree pipeline | + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_queue_test_generic: + +.. figure:: img/eventdev_pipeline_queue_test_generic.* + +.. _figure_eventdev_pipeline_queue_test_lockfree: + +.. figure:: img/eventdev_pipeline_queue_test_lockfree.* + + pipeline queue test operation. + +The pipeline queue test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_queue_test`. + +The user can choose the number of workers and number of stages through the +``--wlcores`` and the ``--stlist`` application command line arguments +respectively. + +The number of producers depends on the number of ethernet devices detected and +each ethernet device is configured as a event_eth_rx_adapter that acts as a +producer. + +The producer(s) injects the events to eventdev based the first stage sched type +list requested by the user through ``--stlist`` the command line argument. + +Based on the number of stages to process(selected through ``--stlist``), +The application forwards the event to next upstream queue and when it reaches +the last stage in the pipeline if the event type is ``atomic`` it is enqueued +onto ethdev Tx queue else to maintain ordering the event type is set to +``atomic`` and enqueued onto the last stage queue. + +If the ethernet has ``DEV_TX_OFFLOAD_MT_LOCKFREE`` capability then the worker +cores transmit the packets directly. Else the worker cores enqueue the packet +onto the ``SINGLE_LINK_QUEUE`` that is managed by a Tx service. The Tx service +dequeues the packet and transmits it. + +On packet Tx, application increments the number events processed and print +periodically in one second to get the number of events processed in one +second. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=a -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
[parent not found: <CY4PR07MB3464D865D1B9CA42596A242380E90@CY4PR07MB3464.namprd07.prod.outlook.com>]
* Re: [dpdk-dev] [PATCH v7 13/15] doc: add pipeline queue test in eventdev test guide [not found] ` <CY4PR07MB3464D865D1B9CA42596A242380E90@CY4PR07MB3464.namprd07.prod.outlook.com> @ 2018-01-17 17:12 ` Mcnamara, John 0 siblings, 0 replies; 122+ messages in thread From: Mcnamara, John @ 2018-01-17 17:12 UTC (permalink / raw) To: Bhagavatula, Pavan, Kovacevic, Marko; +Cc: dev Acked-by: John McNamara <john.mcnamara@intel.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 14/15] doc: add pipeline atq test in eventdev test guide 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (11 preceding siblings ...) 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 13/15] doc: add pipeline queue test in eventdev test guide Pavan Nikhilesh @ 2018-01-16 17:46 ` Pavan Nikhilesh [not found] ` <CY4PR07MB346409AFA54FC1836195EA0A80E90@CY4PR07MB3464.namprd07.prod.outlook.com> 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 15/15] doc: update 18.02 release notes Pavan Nikhilesh 13 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:46 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- .../img/eventdev_pipeline_atq_test_generic.svg | 3263 +++++++++++++++++++ .../img/eventdev_pipeline_atq_test_lockfree.svg | 3344 ++++++++++++++++++++ doc/guides/tools/testeventdev.rst | 85 + 3 files changed, 6692 insertions(+) create mode 100644 doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg create mode 100644 doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg diff --git a/doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg b/doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg new file mode 100644 index 000000000..e33367989 --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_atq_test_generic.svg @@ -0,0 +1,3263 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_atq_test_generic.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker39727" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#0059ff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path39725" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ac14ff;stroke-width:1pt;stroke-opacity:1;fill:#ac14ff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32611" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32603" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#3550fd;stroke-width:1pt;stroke-opacity:1;fill:#00ffff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32601" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32341" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3507fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32339" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient12130" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop12128" /> + </linearGradient> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(42,-46)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,68)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-62,12)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-48)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.29498181,0,0,0.88423137,181.75943,23.045895)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158,30)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78263355,0,0,0.98605918,90.06838,5.0013749)" /> + <linearGradient + gradientTransform="matrix(0.78674479,0,0,1.0000825,87.83543,1.2279738)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,86.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(39.91461,10.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(41.91461,64.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,140.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient12132" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient16362" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-0" + style="overflow:visible"> + <path + id="path3704-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-6" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-1-6-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path35933-49-8-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-1" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.6515192,0,0,1.0041442,189.20967,67.917365)" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.53467" + inkscape:cx="477.6217" + inkscape:cy="141.14731" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="1920" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.87847757;stroke-opacity:1" + id="rect3697" + width="493.61813" + height="283.13986" + x="126.96397" + y="104.52792" + rx="0" + ry="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="-2.6719971" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="-2.6719971" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="407.29071" + y="283.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="406.83691" + y="228.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="405.98169" + y="168.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.87885" + y="163.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="410.87885" + y="163.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.61511" + y="223.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="410.61511" + y="223.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="412.61511" + y="281.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="412.61511" + y="281.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="416.13348" + y="186.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="416.13348" + y="186.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="417.25244" + y="246.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="417.25244" + y="246.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="419.25244" + y="302.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="419.25244" + y="302.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="197.72678" + y="169.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.03741" + y="212.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="199.03741" + y="212.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.49991107;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="72.33783" + height="197.82672" + x="301.47455" + y="139.32401" + ry="5.0019679" + rx="2.6784446" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.09811" + y="170.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="330.09811" + y="170.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 248.59877,185.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 248.59877,185.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.44385" + y="188.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="199.44385" + y="188.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="317.5372" + y="174.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="420.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="420.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_atq </tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="195.64139" + y="225.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="196.95203" + y="268.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="196.95203" + y="268.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="330.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 248.51338,241.5091 H 313.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 248.51338,241.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="244.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="199.35846" + y="244.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+3</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="317.45184" + y="230.86047" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="197.64139" + y="279.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="198.95203" + y="322.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="198.95203" + y="322.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="326.01276" + y="280.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="326.01276" + y="280.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 248.51338,295.50911 H 313.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 248.51338,295.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="298.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="199.35846" + y="298.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="317.45184" + y="284.86047" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="73.356339" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="73.356339" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="224.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="224.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="333.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="333.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="242.32845" + y="123.36828" + id="text5219-26"><tspan + sodipodi:role="line" + x="242.32845" + y="123.36828" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = number of ethernet dev + 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="235.66333" + y="353.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="235.66333" + y="353.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all stage queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="152.30008" + y="228.73854" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="152.30008" + y="228.73854" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="152.30008" + y="240.32199" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="279.86127" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="279.86127" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="291.44473" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="177.92682" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="177.92682" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="189.51027" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="285.26294" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894427)"><tspan + sodipodi:role="line" + id="tspan1220" + x="285.26294" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <g + id="g20550" + transform="translate(25.709043,-190.70754)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13899" + transform="translate(-54.904385,-3.0966742)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13911" + transform="translate(-54.904385,-1.0966741)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="259.86884" + y="164.78368" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="259.86884" + y="164.78368" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="259.86884" + y="174.78368" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="217.84813" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="217.84813" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="227.84813" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="271.71359" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="271.71359" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="281.71359" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <g + id="g16360" + transform="matrix(1.0874414,0,0,0.99912695,-98.49816,-6.4077434)"> + <ellipse + ry="24.258638" + rx="22.831659" + cy="161.21605" + cx="559.68445" + id="path8843" + style="fill:#ffffff;fill-opacity:0.98039216;stroke:url(#linearGradient16362);stroke-opacity:1" /> + <text + transform="scale(0.92048084,1.0863887)" + id="text5219-2-4-3-3-4-5" + y="146.21904" + x="588.44147" + style="font-style:normal;font-weight:normal;font-size:11.04576969px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92048085" + xml:space="preserve"><tspan + id="tspan1265-5" + style="font-size:7.97750044px;line-height:1.25;stroke-width:0.92048085" + y="146.21904" + x="588.44147" + sodipodi:role="line">Tx Service</tspan><tspan + style="font-size:7.97750044px;line-height:1.25;stroke-width:0.92048085" + y="152.00201" + x="588.44147" + sodipodi:role="line" + id="tspan39139" /><tspan + style="font-size:7.97750044px;line-height:1.25;stroke-width:0.92048085" + y="156.19092" + x="588.44147" + sodipodi:role="line" + id="tspan39141">port n + 1</tspan></text> + </g> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.22799993, 1.61399996;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker32613)" + d="m 511.70299,212.50867 c -0.1614,-10.49392 -0.32276,-20.98539 -0.48409,-31.47439" + id="path5226-6-2-1-2-4-5-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6" + inkscape:original-d="m 511.70299,212.50867 c -0.16039,-10.49394 -0.32175,-20.98541 -0.48409,-31.47439" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935)" + d="m 523.50111,175.62989 c 10.13298,2.21215 20.26379,4.42384 30.39241,6.63504" + id="path5226-6-2-1-2-4-5-1-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1" + inkscape:original-d="m 523.50111,175.62989 c 10.13323,2.21099 20.26404,4.42267 30.39241,6.63504" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-5)" + d="m 523.50111,175.62989 c 9.91161,22.53065 19.82206,45.05865 29.73129,67.58389" + id="path5226-6-2-1-2-4-5-1-5-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-7" + inkscape:original-d="m 523.50111,175.62989 c 9.91282,22.53012 19.82327,45.05812 29.73129,67.58389" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-5-5)" + d="m 523.50111,175.62989 c 10.16587,40.76181 20.3305,81.51868 30.49385,122.27042" + id="path5226-6-2-1-2-4-5-1-5-6-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-7-9" + inkscape:original-d="m 523.50111,175.62989 c 10.16704,40.76152 20.33167,81.51839 30.49385,122.27042" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.88;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.52, 0.88;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1)" + d="m 457.99431,185.46823 c 13.07561,8.94945 26.1492,17.89751 39.22072,26.84415" + id="path5226-6-2-1-2-4-5-1-5-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2" + inkscape:original-d="m 457.99431,185.46823 c 13.0764,8.9483 26.14999,17.89636 39.22072,26.84415" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6)" + d="m 459.47717,245.71809 c 12.28232,-4.96638 24.56173,-9.93159 36.83817,-14.89559" + id="path5226-6-2-1-2-4-5-1-5-0-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9" + inkscape:original-d="m 459.47717,245.71809 c 12.28211,-4.96689 24.56152,-9.9321 36.83817,-14.89559" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#ac14ff;fill-opacity:1;stroke:#ac14ff;stroke-width:0.80699998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.228, 0.807;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker35935-1-6-6)" + d="m 459.54824,301.10401 c 12.64219,-20.37548 25.28189,-40.74696 37.91905,-61.11434" + id="path5226-6-2-1-2-4-5-1-5-0-2-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + inkscape:original-d="M 459.54824,301.10401 C 472.1907,280.7287 484.8304,260.35722 497.46729,239.98967" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="595.27808" + y="136.64076" + id="text5219-2-4-3-3-4-54-8-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="595.27808" + y="139.22064" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-7" /></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-1);stroke-width:0.86395979;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-9" + width="25.451954" + height="24.448395" + x="499.03128" + y="213.32141" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="548.03668" + y="204.31348" + id="text5219-2-4-3-3-4-54-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="548.03668" + y="204.31348" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6">Single </tspan><tspan + sodipodi:role="line" + x="548.03668" + y="213.27945" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan57836">Link Q</tspan></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3)" + d="m 356.74765,186.83153 c 15.88009,-0.11696 31.75919,-0.23391 47.6373,-0.35085" + id="path5226-6-2-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61" + inkscape:original-d="m 356.74765,186.83153 c 15.88008,-0.11795 31.75918,-0.2349 47.6373,-0.35085" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-0)" + d="m 357.05625,242.97941 c 15.74231,0.0176 31.48469,0.0352 47.22712,0.0528" + id="path5226-6-2-5-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-1" + inkscape:original-d="m 357.05625,242.97941 c 15.74231,0.0166 31.48469,0.0342 47.22712,0.0528" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89337438;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.57349763, 0.89337441;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-9)" + d="m 356.67155,297.12049 c 15.97521,0.0733 31.94945,0.14663 47.92273,0.21994" + id="path5226-6-2-5-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-9" + inkscape:original-d="m 356.67155,297.12049 c 15.97521,0.0723 31.94945,0.14563 47.92273,0.21994" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="606.06958" + y="346.46628" + id="text5219-2-4-3-3-4-54-8-7" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="606.06958" + y="346.46628" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-2">(Tx Generic)</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg b/doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg new file mode 100644 index 000000000..d7f10de3e --- /dev/null +++ b/doc/guides/tools/img/eventdev_pipeline_atq_test_lockfree.svg @@ -0,0 +1,3344 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<!-- +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2017 Cavium, Inc +--> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="631.91431" + height="288.34286" + id="svg3868" + version="1.1" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="eventdev_pipeline_atq_test_lockfree.svg" + sodipodi:version="0.32" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + enable-background="new"> + <defs + id="defs3870"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker39727" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#0059ff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path39725" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#3550fd;stroke-width:1pt;stroke-opacity:1;fill:#004eff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32611" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32603" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#3550fd;stroke-width:1pt;stroke-opacity:1;fill:#00ffff;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path32601" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32341" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3507fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32339" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient12130" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop12128" /> + </linearGradient> + <linearGradient + id="linearGradient6916" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.10196079;" + offset="0" + id="stop6914" /> + </linearGradient> + <linearGradient + id="linearGradient6394" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:0.02538071;" + offset="0" + id="stop6392" /> + </linearGradient> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path28234" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker27764" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path27762" /> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker20023" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g20021"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle20015" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle20017" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle20019" /> + </g> + </marker> + <marker + inkscape:isstock="true" + orient="auto" + refY="0" + refX="0" + id="marker19992" + inkscape:stockid="InfiniteLineStart" + style="overflow:visible"> + <g + transform="translate(-13,0)" + style="fill:#000000;stroke:#000000;stroke-opacity:1;fill-opacity:1" + id="g19990"> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="3" + cy="0" + r="0.8" + id="circle19984" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="6.5" + cy="0" + r="0.8" + id="circle19986" /> + <circle + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + cx="10" + cy="0" + r="0.8" + id="circle19988" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18966" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18964"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18952" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18954" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18956" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18958" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18960" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18962" /> + </g> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker18494" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Tail"> + <g + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-1.2)" + id="g18492"> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + id="path18480" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + id="path18482" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + id="path18484" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + id="path18486" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + id="path18488" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + id="path18490" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17586" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17584" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker17186" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path17184" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16768" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16766" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker16380" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path16378" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker15998" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="matrix(0.4,0,0,0.4,-1.8,0)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path15996" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15604" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15602" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:stockid="EmptyTriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker15234" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path15232" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.4) translate(-4.5,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker14500" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyTriangleOutM"> + <path + transform="scale(0.4) translate(-4.5,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path14498" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14480" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14473" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14469" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect14461" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker13075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path13073" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect13065" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13061" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13057" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect13053" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7717" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7179" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path7177" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#f78202;stroke-width:1pt;stroke-opacity:1;fill:#f78202;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path1993" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="DotM" + orient="auto" + refY="0.0" + refX="0.0" + id="DotM" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2042" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2063" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#ff141a;stroke-width:1pt;stroke-opacity:1;fill:#ff141a;fill-opacity:1" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="StopL" + orient="auto" + refY="0.0" + refX="0.0" + id="StopL" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2147" + d="M 0.0,5.65 L 0.0,-5.65" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g2026" + transform="scale(-1.2)" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path2014" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2016" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2018" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2020" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2022" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + <path + id="path2024" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect2658" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect1932" + is_visible="true" /> + <linearGradient + id="linearGradient1758" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop1756" /> + </linearGradient> + <linearGradient + id="linearGradient6425" + osb:paint="solid"> + <stop + style="stop-color:#e6860b;stop-opacity:1;" + offset="0" + id="stop6423" /> + </linearGradient> + <linearGradient + id="linearGradient6391" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6389" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect6387" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6037" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6033" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6029" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect6025" + is_visible="true" /> + <linearGradient + id="linearGradient5213" + osb:paint="solid"> + <stop + style="stop-color:#ff0009;stop-opacity:1;" + offset="0" + id="stop5211" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect4276" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4272" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4268" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect4264" + is_visible="true" /> + <linearGradient + id="linearGradient2975" + osb:paint="solid"> + <stop + style="stop-color:#ff2200;stop-opacity:1;" + offset="0" + id="stop2973" /> + </linearGradient> + <linearGradient + id="linearGradient2969" + osb:paint="solid"> + <stop + style="stop-color:#009a08;stop-opacity:1;" + offset="0" + id="stop2967" /> + </linearGradient> + <linearGradient + id="linearGradient2963" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2961" /> + </linearGradient> + <linearGradient + id="linearGradient2929" + osb:paint="solid"> + <stop + style="stop-color:#ff2d00;stop-opacity:1;" + offset="0" + id="stop2927" /> + </linearGradient> + <linearGradient + id="linearGradient4610" + osb:paint="solid"> + <stop + style="stop-color:#00ffff;stop-opacity:1;" + offset="0" + id="stop4608" /> + </linearGradient> + <linearGradient + id="linearGradient3993" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3991" /> + </linearGradient> + <linearGradient + id="linearGradient3808" + osb:paint="solid"> + <stop + style="stop-color:#6ba6fd;stop-opacity:1;" + offset="0" + id="stop3806" /> + </linearGradient> + <linearGradient + id="linearGradient3776" + osb:paint="solid"> + <stop + style="stop-color:#fc0000;stop-opacity:1;" + offset="0" + id="stop3774" /> + </linearGradient> + <linearGradient + id="linearGradient3438" + osb:paint="solid"> + <stop + style="stop-color:#d18f21;stop-opacity:1;" + offset="0" + id="stop3436" /> + </linearGradient> + <inkscape:path-effect + effect="spiro" + id="path-effect3408" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3404" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3400" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3392" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3376" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3044" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3040" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3036" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3032" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3028" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect3024" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="spiro" + id="path-effect3020" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2858" + is_visible="true" /> + <inkscape:path-effect + effect="spiro" + id="path-effect2854" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2844" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + id="linearGradient2828" + osb:paint="solid"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2826" /> + </linearGradient> + <inkscape:path-effect + effect="bspline" + id="path-effect329" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path4530" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend" + style="overflow:visible"> + <path + id="path4533" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + id="linearGradient4513"> + <stop + style="stop-color:#fdffdb;stop-opacity:1;" + offset="0" + id="stop4515" /> + <stop + style="stop-color:#dfe2d8;stop-opacity:0;" + offset="1" + id="stop4517" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3876" /> + <inkscape:perspective + id="perspective3886" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3211" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3892" + style="overflow:visible"> + <path + id="path3894" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3896" + style="overflow:visible"> + <path + id="path3898" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3208" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3902" + style="overflow:visible"> + <path + id="path3904" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker3906" + style="overflow:visible"> + <path + id="path3908" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker3910" + style="overflow:visible"> + <path + id="path3912" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective4086" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4113" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5195" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4" + style="overflow:visible"> + <path + id="path4533-7" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5272" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible"> + <path + id="path4530-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-0" + style="overflow:visible"> + <path + id="path4533-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:perspective + id="perspective5317" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-3" + style="overflow:visible"> + <path + id="path4530-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-06" + style="overflow:visible"> + <path + id="path4533-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-8" + style="overflow:visible"> + <path + id="path4530-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-9" + style="overflow:visible"> + <path + id="path4533-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect2858-0" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3" + style="overflow:visible"> + <path + id="path4533-75" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-2" + style="overflow:visible"> + <path + id="path4533-75-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect3044-9-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995" + x1="155.21328" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(42,-46)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4612" + x1="594.77722" + y1="232.19244" + x2="647.51917" + y2="232.19244" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-188,66)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4616" + x1="468.32343" + y1="232.3177" + x2="521.06543" + y2="232.3177" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-62,12)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient4618" + x1="405.4682" + y1="232.36095" + x2="458.21014" + y2="232.36095" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-46)" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-2" + style="overflow:visible"> + <path + id="path4533-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706" + style="overflow:visible"> + <path + id="path3704" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3286" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-1" + style="overflow:visible"> + <path + id="path4533-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3290" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-3-7" + style="overflow:visible"> + <path + id="path4533-75-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3120-7" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-4-2" + style="overflow:visible"> + <path + id="path4533-7-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect6025-2" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-7" + style="overflow:visible"> + <path + id="path4533-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3294" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-92" + style="overflow:visible"> + <path + id="path4533-28" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3302" + is_visible="true" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-97" + style="overflow:visible"> + <path + id="path4533-36" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect3228-1" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1760" + x1="405.34961" + y1="243.36557" + x2="651.55652" + y2="243.36557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.29498181,0,0,0.88423137,181.75943,19.045895)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3808" + id="linearGradient1920" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158,30)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4513" + id="linearGradient4519" + x1="47.142857" + y1="244.50504" + x2="677.85718" + y2="244.50504" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78263355,0,0,0.98605918,90.06838,5.0013749)" /> + <linearGradient + gradientTransform="matrix(0.78674479,0,0,1.0000825,87.83543,1.2279738)" + inkscape:collect="always" + xlink:href="#linearGradient6391" + id="linearGradient2965" + x1="49.239536" + y1="244.84964" + x2="677.64832" + y2="244.84964" + gradientUnits="userSpaceOnUse" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,86.05654)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(39.91461,10.056541)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-9-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(41.91461,64.056546)" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7719-2-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ff141a;fill-opacity:1;fill-rule:evenodd;stroke:#ff141a;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path7717-2-6" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect1932-8-5" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-3-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-9-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient1920-2-4" + x1="475.00314" + y1="156.97769" + x2="515.13684" + y2="156.97769" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-158.08539,140.05655)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-59-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-93" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-2" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-6" + style="overflow:visible"> + <path + id="path3704-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-8" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2" + style="overflow:visible"> + <path + id="path3704-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7" + is_visible="true" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-6" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-1" + style="overflow:visible"> + <path + id="path3704-3-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-6" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6" + style="overflow:visible"> + <path + id="path3704-3-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-2-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-0-7" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-6-6" + style="overflow:visible"> + <path + id="path3704-3-1-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-5-6" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.68566,-41.755492)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(373.71198,205.50594)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3993" + id="linearGradient3995-5-6-4" + x1="155.21329" + y1="231.61366" + x2="207.95523" + y2="231.61366" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(454.58517,69.679557)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-8-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect1940-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-2-3-9-4-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-9-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-5" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-2-0" + style="overflow:visible"> + <path + id="path3704-3-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-63" + is_visible="true" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3438" + id="linearGradient12132" + x1="534.06958" + y1="163.49922" + x2="580.73291" + y2="163.49922" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2.283166,-2.283166)" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2658-91-9-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-61" + style="overflow:visible"> + <path + id="path3704-8" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14484-7" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker28236-9-20" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + inkscape:connector-curvature="0" + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#fc0000;fill-opacity:1;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path28234-20-2" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-7-3" + is_visible="true" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-8-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-9-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-7-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3706-0" + style="overflow:visible"> + <path + id="path3704-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;marker-start:none" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="spiro" + id="path-effect14461-3" + is_visible="true" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-6" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker35935-5-5" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path35933-4-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-7-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-5-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#004eff;fill-opacity:1;fill-rule:evenodd;stroke:#3550fd;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-1-2-9-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker32613-8-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#ac14ff;fill-opacity:1;fill-rule:evenodd;stroke:#ac14ff;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path32611-8-0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-9-4-6-4-4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-1" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-3-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-20-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#f78202;fill-opacity:1;fill-rule:evenodd;stroke:#f78202;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-61-7" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-39" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8-3" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8-3-8" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1-9-5" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2-0-0" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-5-2-6-5-6-8-3-8-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2123-3-9-2-9-7-1-9-5-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#02d804;fill-opacity:1;fill-rule:evenodd;stroke:#02d804;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect5228-5-1-6-2-3-2-0-0-8" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.7519532" + inkscape:cx="479.73438" + inkscape:cy="163.58755" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1046" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="1" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.1" + inkscape:measure-start="-29.078,219.858" + inkscape:measure-end="346.809,219.858" + showguides="false" + inkscape:snap-bbox="false" /> + <metadata + id="metadata3873"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-46.542857,-100.33361)" + style="display:inline;opacity:1"> + <rect + style="fill:url(#linearGradient4519);fill-opacity:1;stroke:url(#linearGradient2965);stroke-width:0.87847757;stroke-opacity:1" + id="rect3697" + width="493.61813" + height="283.13986" + x="126.96397" + y="104.52792" + rx="0" + ry="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="-2.6719971" + y="-14.742554" + id="text2978" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="-2.6719971" + y="-14.742554" + id="tspan3006" + style="font-size:15.22520161px;line-height:1.25"> </tspan></text> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4612);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-3" + width="51.714954" + height="32.587509" + x="407.29071" + y="281.89868" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4616);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6" + width="51.714954" + height="32.587509" + x="406.83691" + y="228.02396" + rx="11.6051" + ry="16.293755" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient4618);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5" + width="51.714954" + height="32.587509" + x="405.98169" + y="170.06718" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.87885" + y="167.34842" + id="text5219-2-4"><tspan + sodipodi:role="line" + x="410.87885" + y="167.34842" + id="tspan5223-0-7" + style="font-size:10px;line-height:1.25">worker 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="410.61511" + y="225.66943" + id="text5219-2-4-3"><tspan + sodipodi:role="line" + x="410.61511" + y="225.66943" + id="tspan5223-0-7-7" + style="font-size:10px;line-height:1.25">worker 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="412.61511" + y="279.66943" + id="text5219-2-4-3-4-2"><tspan + sodipodi:role="line" + x="412.61511" + y="279.66943" + id="tspan5223-0-7-7-5-5" + style="font-size:10px;line-height:1.25">worker n</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="416.13348" + y="188.8974" + id="text5219-2-6-4"><tspan + sodipodi:role="line" + x="416.13348" + y="188.8974" + id="tspan5223-0-9-7" + style="font-size:10px;line-height:1.25">port 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="417.25244" + y="246.85495" + id="text5219-2-6-4-4"><tspan + sodipodi:role="line" + x="417.25244" + y="246.85495" + id="tspan5223-0-9-7-4" + style="font-size:10px;line-height:1.25">port 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none" + x="417.25244" + y="300.85495" + id="text5219-2-6-4-4-3-7"><tspan + sodipodi:role="line" + x="417.25244" + y="300.85495" + id="tspan5223-0-9-7-4-0-8" + style="font-size:10px;line-height:1.25">port n</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3" + width="51.714954" + height="32.587509" + x="197.72678" + y="169.31989" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.03741" + y="212.07278" + id="text5219-2"><tspan + sodipodi:role="line" + x="199.03741" + y="212.07278" + id="tspan5223-0" + style="font-size:10px;line-height:1.25">producer 0</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient1760);stroke-width:0.49991107;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2896-6" + width="72.33783" + height="197.82672" + x="301.47455" + y="135.32401" + ry="5.0019679" + rx="2.6784446" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.09811" + y="170.4389" + id="text5219-1-9-4-9"><tspan + sodipodi:role="line" + x="330.09811" + y="170.4389" + id="tspan5223-2-3-5-0" + style="font-size:10px;line-height:1.25">q0</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719)" + d="m 248.59877,185.45256 h 65.05382" + id="path1930" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932" + inkscape:original-d="m 248.59877,185.45256 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.44385" + y="188.49918" + id="text5219-2-6"><tspan + sodipodi:role="line" + x="199.44385" + y="188.49918" + id="tspan5223-0-9" + style="font-size:10px;line-height:1.25">port n+1</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4" + width="39.065548" + height="24.347494" + x="317.5372" + y="174.80396" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="420.47687" + y="378.4664" + id="text2912" + inkscape:export-filename="/home/matz/barracuda/rapports/mbuf-api-v2-images/octeon_multi.png" + inkscape:export-xdpi="112" + inkscape:export-ydpi="112"><tspan + sodipodi:role="line" + x="420.47687" + y="378.4664" + id="tspan2916" + style="font-weight:bold;font-size:13.33333302px;line-height:1.25">test: pipeline_atq</tspan></text> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3" + width="51.714954" + height="32.587509" + x="195.64139" + y="225.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="196.95203" + y="268.12933" + id="text5219-2-61"><tspan + sodipodi:role="line" + x="196.95203" + y="268.12933" + id="tspan5223-0-2" + style="font-size:10px;line-height:1.25">producer 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="330.01276" + y="224.49542" + id="text5219-1-9-4-9-9"><tspan + sodipodi:role="line" + x="330.01276" + y="224.49542" + id="tspan5223-2-3-5-0-4" + style="font-size:10px;line-height:1.25">qs</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2)" + d="M 248.51338,241.5091 H 313.5672" + id="path1930-0" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8" + inkscape:original-d="m 248.51338,241.5091 c 21.68561,-10e-4 43.37021,-10e-4 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="244.55573" + id="text5219-2-6-1"><tspan + sodipodi:role="line" + x="199.35846" + y="244.55573" + id="tspan5223-0-9-0" + style="font-size:10px;line-height:1.25">port n+2</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6" + width="39.065548" + height="24.347494" + x="317.45184" + y="230.86047" /> + <rect + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-9-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect87-6-5-3-3-6" + width="51.714954" + height="32.587509" + x="197.64139" + y="279.3764" + rx="11.6051" + ry="16.293755" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="198.95203" + y="322.12933" + id="text5219-2-61-8"><tspan + sodipodi:role="line" + x="198.95203" + y="322.12933" + id="tspan5223-0-2-8" + style="font-size:10px;line-height:1.25">producer m-1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="326.01276" + y="280.49542" + id="text5219-1-9-4-9-9-4"><tspan + sodipodi:role="line" + x="326.01276" + y="280.49542" + id="tspan5223-2-3-5-0-4-9" + style="font-size:10px;line-height:1.25">q2s</tspan></text> + <path + style="display:inline;opacity:1;fill:#ff141a;fill-opacity:1;stroke:#ff141a;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7719-2-7)" + d="M 248.51338,295.50911 H 313.5672" + id="path1930-0-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect1932-8-5" + inkscape:original-d="m 248.51338,295.50911 c 21.68561,-0.001 43.37021,-0.001 65.05382,0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="199.35846" + y="298.55573" + id="text5219-2-6-1-6"><tspan + sodipodi:role="line" + x="199.35846" + y="298.55573" + id="tspan5223-0-9-0-4" + style="font-size:10px;line-height:1.25">port n+m</tspan></text> + <rect + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1920-2-4);stroke-width:1.06814909;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3736-8-4-6-9" + width="39.065548" + height="24.347494" + x="317.45184" + y="284.86047" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="73.356339" + y="277.3764" + id="text21302"><tspan + sodipodi:role="line" + id="tspan21300" + x="73.356339" + y="312.76703" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="224.2348" + y="276.24649" + id="text21306"><tspan + sodipodi:role="line" + id="tspan21304" + x="224.2348" + y="311.63712" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + x="333.83633" + y="276.95361" + id="text21310"><tspan + sodipodi:role="line" + id="tspan21308" + x="333.83633" + y="312.34424" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="237.36301" + y="123.36828" + id="text5219-26"><tspan + sodipodi:role="line" + x="237.36301" + y="123.36828" + id="tspan5223-10" + style="font-size:10px;line-height:1.25">total queues = number of ethernet dev</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none" + x="257.66333" + y="349.67435" + id="text5219-26-2"><tspan + sodipodi:role="line" + x="257.66333" + y="349.67435" + id="tspan5223-10-7" + style="font-size:10px;line-height:1.25">All workers are linked to all queues</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="152.30008" + y="228.73854" + id="text5219-2-3-7" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="152.30008" + y="228.73854" + id="tspan5223-0-6-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 1</tspan><tspan + sodipodi:role="line" + x="152.30008" + y="240.32199" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="279.86127" + id="text5219-2-3-7-3" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="279.86127" + id="tspan5223-0-6-5-5" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port q</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="291.44473" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-6"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.12011719px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92667639" + x="153.36894" + y="177.92682" + id="text5219-2-3-7-2" + transform="scale(0.95740725,1.0444876)"><tspan + sodipodi:role="line" + x="153.36894" + y="177.92682" + id="tspan5223-0-6-5-9" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639">eth port 0</tspan><tspan + sodipodi:role="line" + x="153.36894" + y="189.51027" + style="font-size:9.26676369px;line-height:1.25;stroke-width:0.92667639" + id="tspan883-1"> Rxq 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:27.55776978px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.68894428" + x="285.26294" + y="215.63098" + id="text1222" + transform="scale(1.4514962,0.68894427)"><tspan + sodipodi:role="line" + id="tspan1220" + x="285.26294" + y="240.01315" + style="stroke-width:0.68894428" /></text> + <g + id="g20550" + transform="translate(25.709043,-190.70754)"> + <rect + ry="16.293755" + rx="11.6051" + y="420.82581" + x="529.43872" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7" + y="430.06808" + x="538.98547" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1" + y="430.06808" + x="538.98547" + sodipodi:role="line">eth port 1</tspan><tspan + id="tspan883-15" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="440.86371" + x="538.98547" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13899" + transform="translate(-54.904385,-3.0966742)"> + <rect + ry="16.293755" + rx="11.6051" + y="173.56439" + x="610.41241" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-9" + y="186.44463" + x="621.00293" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-7" + y="186.44463" + x="621.00293" + sodipodi:role="line">eth port 0</tspan><tspan + id="tspan883-15-7" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="197.24025" + x="621.00293" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <g + id="g13911" + transform="translate(-54.904385,-1.0966741)"> + <rect + ry="16.293755" + rx="11.6051" + y="284.99939" + x="610.31189" + height="32.587509" + width="51.714954" + id="rect87-6-5-3-7-8-1" + style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3995-5-6-4);stroke-width:1.02699995;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + transform="scale(0.98989583,1.0102073)" + id="text5219-2-3-7-7-6" + y="294.93872" + x="621.71729" + style="font-style:normal;font-weight:normal;font-size:10.3637991px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8636499" + xml:space="preserve"><tspan + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + id="tspan5223-0-6-5-1-73" + y="294.93872" + x="621.71729" + sodipodi:role="line">eth port q</tspan><tspan + id="tspan883-15-6" + style="font-size:8.63649845px;line-height:1.25;stroke-width:0.8636499" + y="305.73434" + x="621.71729" + sodipodi:role="line"> Txq 0</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="259.86884" + y="164.78368" + id="text5219-2-3-7-2-1" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="259.86884" + y="164.78368" + id="tspan5223-0-6-5-9-5" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="259.86884" + y="174.78368" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9">Rx adptr 0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="217.84813" + id="text5219-2-3-7-2-1-4" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="217.84813" + id="tspan5223-0-6-5-9-5-4" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="227.84813" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-4">Rx adptr 1</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.59418297px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.96618187" + x="260.25055" + y="271.71359" + id="text5219-2-3-7-2-1-47" + transform="scale(0.97663117,1.023928)"><tspan + sodipodi:role="line" + x="260.25055" + y="271.71359" + id="tspan5223-0-6-5-9-5-6" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187">Event eth</tspan><tspan + sodipodi:role="line" + x="260.25055" + y="281.71359" + style="font-size:8px;line-height:1.25;stroke-width:0.96618187" + id="tspan883-1-9-3">Rx adptr q</tspan></text> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5)" + d="m 457.99431,185.46823 c 31.2384,-0.0621 62.47105,-0.12411 93.69789,-0.18615" + id="path5226-6-2-1-2" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2" + inkscape:original-d="m 457.99431,185.46823 c 31.2384,-0.0631 62.47105,-0.12511 93.69789,-0.18615" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.17235398;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.37883186, 1.17235398;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8)" + d="m 458.98776,243.31381 c 30.75465,0.34725 61.50362,0.69444 92.24687,1.04156" + id="path5226-6-2-1-2-3" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7" + inkscape:original-d="m 458.98776,243.31381 c 30.75466,0.34624 61.50363,0.69343 92.24687,1.04156" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.16870522;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3496418, 1.16870522;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-8-6)" + d="m 459.54824,299.10401 c 30.65551,0.002 61.30536,0.005 91.94951,0.007" + id="path5226-6-2-1-2-3-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-7-2" + inkscape:original-d="m 459.54824,299.10401 c 30.65551,10e-4 61.30536,0.004 91.94951,0.007" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="595.27808" + y="136.64076" + id="text5219-2-4-3-3-4-54-8-8" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="595.27808" + y="139.22064" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4-6-7" /></text> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3)" + d="m 355.63703,186.40543 c 15.88009,-0.11696 31.75919,-0.23391 47.6373,-0.35085" + id="path5226-6-2-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61" + inkscape:original-d="m 355.63703,186.40543 c 15.88008,-0.11795 31.75918,-0.2349 47.6373,-0.35085" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-7)" + d="m 357.65509,243.31452 c 15.34193,0.0849 30.68288,0.16971 46.02286,0.25456" + id="path5226-6-2-5-1" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-1" + inkscape:original-d="m 357.65509,243.31452 c 15.34194,0.0839 30.68289,0.16871 46.02286,0.25456" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:none;stroke:#f78202;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6, 0.9;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-3-5)" + d="m 357.04968,297.80194 c 15.88007,0.0849 31.75917,0.16972 47.6373,0.25457" + id="path5226-6-2-5-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-61-7" + inkscape:original-d="m 357.04968,297.80194 c 15.88008,0.0839 31.75918,0.16871 47.6373,0.25457" + sodipodi:nodetypes="cc" + inkscape:transform-center-x="-1.1449687" + inkscape:transform-center-y="0.16602181" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6)" + d="m 457.99431,185.46823 c 31.25478,19.01586 62.50452,38.02866 93.74916,57.03836" + id="path5226-6-2-1-2-6" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3" + inkscape:original-d="m 457.99431,185.46823 c 31.25549,19.01469 62.50523,38.02749 93.74916,57.03836" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-5)" + d="m 457.99431,185.46823 c 31.56499,37.01842 63.12523,74.03128 94.6807,111.03854" + id="path5226-6-2-1-2-4" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-39" + inkscape:original-d="m 457.99431,185.46823 c 31.56606,37.01751 63.1263,74.03037 94.6807,111.03854" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8)" + d="m 458.98776,243.31381 c 31.07558,-18.77571 62.14525,-37.54785 93.20895,-56.31638" + id="path5226-6-2-1-2-6-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2" + inkscape:original-d="m 458.98776,243.31381 c 31.0754,-18.776 62.14507,-37.54814 93.20895,-56.31638" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8-3)" + d="m 458.98776,243.31381 c 30.92496,17.37709 61.8449,34.75135 92.75972,52.12273" + id="path5226-6-2-1-2-6-9-8" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2-0" + inkscape:original-d="m 458.98776,243.31381 c 30.92563,17.3759 61.84557,34.75016 92.75972,52.12273" + sodipodi:nodetypes="cc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8-3-8)" + d="m 459.54824,299.10401 c 2.93308,-3.49891 5.86612,-6.99776 21.41494,-25.54619 15.54881,-18.54843 43.70884,-52.14099 71.86417,-85.72794" + id="path5226-6-2-1-2-6-9-8-9" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2-0-0" + inkscape:original-d="m 459.54824,299.10401 c 2.93318,-3.49883 5.86622,-6.99768 8.79911,-10.49656 28.16472,-33.59799 56.32477,-67.19054 84.48,-100.77757" + sodipodi:nodetypes="ccc" /> + <path + style="display:inline;opacity:1;fill:#02d804;fill-opacity:1;stroke:#02d804;stroke-width:1.1711483;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.3691864, 1.1711483;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutM-5-2-6-5-6-8-3-8-6)" + d="m 459.54824,299.10401 c 30.71954,-17.76325 61.43324,-35.52313 92.14101,-53.27957" + id="path5226-6-2-1-2-6-9-8-9-5" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5228-5-1-6-2-3-2-0-0-8" + inkscape:original-d="m 459.54824,299.10401 c 30.71936,-17.76357 61.43306,-35.52344 92.14101,-53.27957" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.9315424px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82762849" + x="602.09888" + y="347.66293" + id="text5219-2-4-3-3-4-54" + transform="scale(0.91487885,1.0930409)"><tspan + sodipodi:role="line" + x="602.09888" + y="347.66293" + style="font-size:7.17278051px;line-height:1.25;stroke-width:0.82762849" + id="tspan1265-4">(Tx Lock free)</tspan></text> + </g> +</svg> diff --git a/doc/guides/tools/testeventdev.rst b/doc/guides/tools/testeventdev.rst index 33fe5e730..77480ffe9 100644 --- a/doc/guides/tools/testeventdev.rst +++ b/doc/guides/tools/testeventdev.rst @@ -547,3 +547,88 @@ Example command to run pipeline queue test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_queue --wlcore=1 --prod_type_ethdev --stlist=a + + +PIPELINE_ATQ Test +~~~~~~~~~~~~~~~~~~~ + +This is a pipeline test case that aims at testing the following with +``all types queue`` eventdev scheme. + +#. Measure the end-to-end performance of an event dev with a ethernet dev. +#. Maintain packet ordering from Rx to Tx. + +.. _table_eventdev_pipeline_atq_test: + +.. table:: Pipeline atq test eventdev configuration. + + +---+--------------+----------------+-----------------------------------------+ + | # | Items | Value | Comments | + | | | | | + +===+==============+================+=========================================+ + | 1 | nb_queues | nb_producers + | Queues will be configured based on the | + | | | x | user requested sched type list(--stlist)| + | | | | where x = 1 in generic pipeline and 0 | + | | | | in lockfree pipeline | + +---+--------------+----------------+-----------------------------------------+ + | 2 | nb_producers | >= 1 | Producers will be configured based on | + | | | | the number of detected ethernet devices.| + | | | | Each ethdev will be configured as an Rx | + | | | | adapter. | + +---+--------------+----------------+-----------------------------------------+ + | 3 | nb_workers | >= 1 | Selected through --wlcores command line | + | | | | argument | + +---+--------------+----------------+-----------------------------------------+ + | 4 | nb_ports | nb_workers + | Workers use port 0 to port n. | + | | | nb_producers | Producers use port n+1 to port n+m, | + | | | | depending on the Rx adapter capability. | + +---+--------------+----------------+-----------------------------------------+ + +.. _figure_eventdev_pipeline_atq_test_generic: + +.. figure:: img/eventdev_pipeline_atq_test_generic.* + +.. _figure_eventdev_pipeline_atq_test_lockfree: + +.. figure:: img/eventdev_pipeline_atq_test_lockfree.* + + pipeline atq test operation. + +The pipeline atq test configures the eventdev with Q queues and P ports, +where Q and P is a function of the number of workers, the number of producers +and number of stages as mentioned in :numref:`table_eventdev_pipeline_atq_test`. + +The atq queue test functions as same as ``pipeline_queue`` test. The difference +is, It uses, ``all type queue scheme`` instead of separate queues for each +stage and thus reduces the number of queues required to realize the use case. + + +Application options +^^^^^^^^^^^^^^^^^^^ + +Supported application command line options are following:: + + --verbose + --dev + --test + --socket_id + --pool_sz + --wlcores + --stlist + --worker_deq_depth + --prod_type_ethdev + + +.. Note:: + + * The ``--prod_type_ethdev`` is mandatory for running this test. + +Example +^^^^^^^ + +Example command to run pipeline queue test: + +.. code-block:: console + + sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ + --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=a -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
[parent not found: <CY4PR07MB346409AFA54FC1836195EA0A80E90@CY4PR07MB3464.namprd07.prod.outlook.com>]
* Re: [dpdk-dev] [PATCH v7 14/15] doc: add pipeline atq test in eventdev test guide [not found] ` <CY4PR07MB346409AFA54FC1836195EA0A80E90@CY4PR07MB3464.namprd07.prod.outlook.com> @ 2018-01-17 17:12 ` Mcnamara, John 0 siblings, 0 replies; 122+ messages in thread From: Mcnamara, John @ 2018-01-17 17:12 UTC (permalink / raw) To: Bhagavatula, Pavan, Kovacevic, Marko; +Cc: dev Acked-by: John McNamara <john.mcnamara@intel.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] [PATCH v7 15/15] doc: update 18.02 release notes 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh ` (12 preceding siblings ...) 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 14/15] doc: add pipeline atq " Pavan Nikhilesh @ 2018-01-16 17:46 ` Pavan Nikhilesh 2018-01-17 5:47 ` [dpdk-dev] Fw: " Bhagavatula, Pavan 13 siblings, 1 reply; 122+ messages in thread From: Pavan Nikhilesh @ 2018-01-16 17:46 UTC (permalink / raw) To: jerin.jacob, santosh.shukla, harry.van.haaren, gage.eads, hemant.agrawal, nipun.gupta, liang.j.ma Cc: dev, Pavan Nikhilesh Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- doc/guides/rel_notes/release_18_02.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/guides/rel_notes/release_18_02.rst b/doc/guides/rel_notes/release_18_02.rst index b2dc39cfe..2a243cb47 100644 --- a/doc/guides/rel_notes/release_18_02.rst +++ b/doc/guides/rel_notes/release_18_02.rst @@ -53,6 +53,16 @@ New Features With this change, application can use OPDL PMD by eventdev api. +* **Added New pipeline use case for dpdk-test-eventdev application** + + The pipeline case can be used to simulate various stages in a real world + application from packet receive to transmit while maintaining the packet + ordering also measure the performance of the event device across the stages + of the pipeline. + + The pipeline use case has been made generic to work will all the event + devices based on the capabilities. + API Changes ----------- -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* [dpdk-dev] Fw: [PATCH v7 15/15] doc: update 18.02 release notes 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 15/15] doc: update 18.02 release notes Pavan Nikhilesh @ 2018-01-17 5:47 ` Bhagavatula, Pavan 2018-01-17 17:14 ` [dpdk-dev] " Mcnamara, John 0 siblings, 1 reply; 122+ messages in thread From: Bhagavatula, Pavan @ 2018-01-17 5:47 UTC (permalink / raw) To: Mcnamara, John, Kovacevic, Marko; +Cc: dev Cc: John, Marko ________________________________ From: Bhagavatula, Pavan Sent: 16 January 2018 23:16 To: Jacob, Jerin; Shukla, Santosh; harry.van.haaren@intel.com; gage.eads@intel.com; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; liang.j.ma@intel.com Cc: dev@dpdk.org; Bhagavatula, Pavan Subject: [dpdk-dev] [PATCH v7 15/15] doc: update 18.02 release notes Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> --- doc/guides/rel_notes/release_18_02.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/guides/rel_notes/release_18_02.rst b/doc/guides/rel_notes/release_18_02.rst index b2dc39cfe..2a243cb47 100644 --- a/doc/guides/rel_notes/release_18_02.rst +++ b/doc/guides/rel_notes/release_18_02.rst @@ -53,6 +53,16 @@ New Features With this change, application can use OPDL PMD by eventdev api. +* **Added New pipeline use case for dpdk-test-eventdev application** + + The pipeline case can be used to simulate various stages in a real world + application from packet receive to transmit while maintaining the packet + ordering also measure the performance of the event device across the stages + of the pipeline. + + The pipeline use case has been made generic to work will all the event + devices based on the capabilities. + API Changes ----------- -- 2.14.1 ^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [dpdk-dev] [PATCH v7 15/15] doc: update 18.02 release notes 2018-01-17 5:47 ` [dpdk-dev] Fw: " Bhagavatula, Pavan @ 2018-01-17 17:14 ` Mcnamara, John 0 siblings, 0 replies; 122+ messages in thread From: Mcnamara, John @ 2018-01-17 17:14 UTC (permalink / raw) To: Bhagavatula, Pavan, Kovacevic, Marko; +Cc: dev Acked-by: John McNamara <john.mcnamara@intel.com> ^ permalink raw reply [flat|nested] 122+ messages in thread
end of thread, other threads:[~2018-01-17 17:19 UTC | newest] Thread overview: 122+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-11-30 7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh 2017-11-30 7:24 ` [dpdk-dev] [PATCH 2/4] app/eventdev: add packet distribution logs Pavan Nikhilesh 2017-12-10 12:31 ` Jerin Jacob 2017-11-30 7:24 ` [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test Pavan Nikhilesh 2017-11-30 17:15 ` Eads, Gage 2017-12-01 5:19 ` Pavan Nikhilesh Bhagavatula 2017-12-10 12:33 ` Jerin Jacob 2017-12-11 15:20 ` Pavan Nikhilesh Bhagavatula 2017-12-11 15:45 ` Jerin Jacob 2017-11-30 7:24 ` [dpdk-dev] [PATCH 4/4] doc: add perf pipeline test in eventdev test guide Pavan Nikhilesh 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2018-01-08 14:04 ` Jerin Jacob 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 03/12] app/eventdev: add mempool " Pavan Nikhilesh 2018-01-08 14:06 ` Jerin Jacob 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 04/12] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 05/12] app/eventdev: add perf ethport setup and destroy Pavan Nikhilesh 2018-01-08 14:10 ` Jerin Jacob 2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 06/12] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 07/12] app/eventdev: launch pipeline lcores Pavan Nikhilesh 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 08/12] app/eventdev: add pipeline queue test Pavan Nikhilesh 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 09/12] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 10/12] app/eventdev: add pipeline atq test Pavan Nikhilesh 2018-01-08 14:15 ` Jerin Jacob 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 11/12] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh 2017-12-18 21:44 ` [dpdk-dev] [PATCH v2 12/12] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 03/12] app/eventdev: add mempool " Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 04/12] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 05/12] app/eventdev: add perf ethport setup and destroy Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 06/12] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 07/12] app/eventdev: launch pipeline lcores Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue test Pavan Nikhilesh 2018-01-10 16:38 ` Van Haaren, Harry 2018-01-10 20:01 ` Pavan Nikhilesh 2018-01-15 10:17 ` Van Haaren, Harry 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh 2018-01-10 16:45 ` Van Haaren, Harry 2018-01-10 16:53 ` Van Haaren, Harry 2018-01-10 20:17 ` Pavan Nikhilesh 2018-01-11 12:17 ` Van Haaren, Harry 2018-01-11 13:52 ` Pavan Nikhilesh 2018-01-11 15:47 ` Van Haaren, Harry 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 10/12] app/eventdev: add pipeline atq test Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 11/12] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh 2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 12/12] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 02/13] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 03/13] app/eventdev: add mempool " Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 04/13] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh 2018-01-16 11:54 ` Van Haaren, Harry 2018-01-17 17:19 ` Jerin Jacob 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 05/13] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh 2018-01-16 11:54 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 06/13] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh 2018-01-16 11:54 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 07/13] app/eventdev: add Tx service setup Pavan Nikhilesh 2018-01-16 11:57 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 08/13] app/eventdev: launch pipeline lcores Pavan Nikhilesh 2018-01-16 11:57 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 09/13] app/eventdev: add pipeline queue test Pavan Nikhilesh 2018-01-16 11:58 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 10/13] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh 2018-01-16 12:05 ` Van Haaren, Harry 2018-01-16 12:31 ` Pavan Nikhilesh 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 11/13] app/eventdev: add pipeline atq test Pavan Nikhilesh 2018-01-16 12:06 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 12/13] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh 2018-01-16 12:06 ` Van Haaren, Harry 2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 13/13] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 2018-01-15 11:16 ` Kovacevic, Marko 2018-01-15 16:16 ` Jerin Jacob 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 03/14] app/eventdev: add mempool " Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 04/14] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 05/14] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 06/14] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 07/14] app/eventdev: add Tx service setup Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 08/14] app/eventdev: launch pipeline lcores Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 09/14] app/eventdev: add pipeline queue test Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 10/14] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 11/14] app/eventdev: add pipeline atq test Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 12/14] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh 2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 13/14] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 2018-01-16 15:20 ` [dpdk-dev] [PATCH v5 14/14] doc: update 18.02 release notes Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 03/14] app/eventdev: add mempool " Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 04/14] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 05/14] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 06/14] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 07/14] app/eventdev: add Tx service setup Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 08/14] app/eventdev: launch pipeline lcores Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 09/14] app/eventdev: add pipeline queue test Pavan Nikhilesh 2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 10/14] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 11/14] app/eventdev: add pipeline atq test Pavan Nikhilesh 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 12/14] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 13/14] doc: add pipeline test in eventdev test guide Pavan Nikhilesh 2018-01-16 15:40 ` [dpdk-dev] [PATCH v6 14/14] doc: update 18.02 release notes Pavan Nikhilesh 2018-01-16 16:04 ` Mcnamara, John 2018-01-16 17:51 ` Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 02/15] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 03/15] app/eventdev: add mempool " Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 04/15] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 05/15] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 06/15] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh 2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 07/15] app/eventdev: add Tx service setup Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 08/15] app/eventdev: launch pipeline lcores Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 09/15] app/eventdev: add pipeline queue test Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 10/15] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 11/15] app/eventdev: add pipeline atq test Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 12/15] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 13/15] doc: add pipeline queue test in eventdev test guide Pavan Nikhilesh [not found] ` <CY4PR07MB3464D865D1B9CA42596A242380E90@CY4PR07MB3464.namprd07.prod.outlook.com> 2018-01-17 17:12 ` Mcnamara, John 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 14/15] doc: add pipeline atq " Pavan Nikhilesh [not found] ` <CY4PR07MB346409AFA54FC1836195EA0A80E90@CY4PR07MB3464.namprd07.prod.outlook.com> 2018-01-17 17:12 ` Mcnamara, John 2018-01-16 17:46 ` [dpdk-dev] [PATCH v7 15/15] doc: update 18.02 release notes Pavan Nikhilesh 2018-01-17 5:47 ` [dpdk-dev] Fw: " Bhagavatula, Pavan 2018-01-17 17:14 ` [dpdk-dev] " Mcnamara, John
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).