Commit Graph

307 Commits

Author SHA1 Message Date
Damjan Marion 5a6c8096cb physmem: keep physmem VA in 39-bit address space on x86_64
Some x86 CPUs have IOMMU capable dealing only with 39-bit address space
This patch also adds option to specify physmem base address from
startup.conf

Change-Id: I9e8abd26efb60e9c4ad54c035fb1751a4a61f4dc
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-02-21 17:35:35 +00:00
Dave Barach a4324a996f calculate per-thread time offset
The main thread squirrels away vlib_time_now (&vlib_global_main),
worker threads use it to calculate an offset in f64 seconds from their
own vlib_time_now(vm) value. We use that offset until the next barrier
sync.

Thanks to Damjan for the suggestion.

Change-Id: If56cdfe68e5ad8ac3b0d0fc885dc3ba556cd1215
Signed-off-by: Dave Barach <dave@barachs.net>
2019-02-20 16:27:47 +00:00
Lollita Liu 8f6c1dda35 buffer: bug fix vlib_buffer_free_inline
buffer_pool_index, in case of buffer_pool_index change,
should free buffers in queue before setting buffer_pool_index again

Change-Id: I846ead947a7b2d940c8fc747976239d608597391
Signed-off-by: Lollita Liu <lollita.liu@ericsson.com>
2019-02-14 17:16:03 +00:00
Damjan Marion 8934a04596 buffers: fix typo
Change-Id: I4e836244409c98739a13092ee252542a2c5fe259
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-02-09 23:29:26 +01:00
Damjan Marion 5de3fec531 buffers: make buffer data size configurable from startup config
Example:

buffers {
	default data-size 1536
}

Change-Id: I5b4436850ca18025c9fdcfc7ed648c2c2732d660
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-02-06 18:00:17 +00:00
Damjan Marion 672ab69018 buffers: improve buffer init performance
Change-Id: Ib59a3c32af754a898ade17c42e60a88f48b797ff
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-02-06 17:58:32 +00:00
Dave Barach 900cbadde9 CLI control of graph dispatch elogs
Change-Id: I195c8eabc0ee67880f1e85fc7594b00be6b563e3
Signed-off-by: Dave Barach <dave@barachs.net>
2019-02-02 15:30:58 +00:00
Damjan Marion 652d2e1394 Deprecate old mutliarch code, phase 1
It is causing compilation sloness with gcc-7 so removing it
before it was originally planned.

So far macros are left in the tree so we can know which nodes to
convert to new multiarch code.

Change-Id: Idb14622ca61fdce1eba59723b20d98715b7971e6
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-02-02 00:45:09 +00:00
Damjan Marion f646d74392 buffers: vallidate that buffer is allocated during buffer pool put
Change-Id: I8044b34a37fe1994a8dfa1ca89929f3642c72e8d
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-31 22:25:44 +00:00
Benoît Ganne 362456a9bd Add 'show vlib graphviz' command
Add a new command to dump vlib graph as graphviz/dot file

Change-Id: I43fc072cff8153ac500e5fbc6641a3705c2e995e
Signed-off-by: Benoît Ganne <bganne@cisco.com>
2019-01-31 22:08:54 +00:00
Klement Sekera e82c73a96e assert on double-free in debug build
The assert allows easier debugging in gdb by aborting instead of exiting
cleanly. Also a core is generated so a stack trace can be obtained.

Change-Id: I2d05488c4522f4d4570fdfe0283130eb4c853d2a
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2019-01-31 16:27:37 +00:00
Mohsin Kazmi a402b83643 pci: get the number of interrupts
Change-Id: I2cfb81b3c8809d027a3ee5f5f570668e60be08ef
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
2019-01-31 13:12:33 +00:00
Damjan Marion 24dcbe4520 buffers: reinitialize metadata, add additional validation
- DPDK overwrites metadata as part of rte_pktmbuf_init(...) so we need
  reinitialize it

- additional checks added to ensure ref_count is never < 1

Change-Id: Ida336f81c4723e8f2e0ad4a70cb7b1ecfff978a0
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-31 12:33:16 +01:00
Damjan Marion 910d3694e8 buffers: major cleanup and improvements
This patch introduces following changes:
- deprecated free lists which are not used and not compatible
  with external buffer managers (i.e. DPDK)
- introduces native support for per-numa buffer pools
- significantly improves performance of buffer alloc and free

Change-Id: I4a8e723ae47056717afd6cac0efe87cb731b5be7
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-30 16:19:22 +00:00
Dmitry Vakhrushev cac8cfaba9 Fix error while compiling using 'vlib/vlib.h' dependencie.
This variable without any needed 'define' becoming unused.

Change-Id: I661a75a78dba03abb861ed918ad1e634a8ecd0af
Signed-off-by: Dmitry Vakhrushev <dmitry@netgate.com>
2019-01-29 16:35:46 +00:00
Damjan Marion 29c0b33401 Less intrusive way to capture numa_node and cpu_id changes
Change-Id: I3a33fb81f31ed473811e9e7a6197b81135913865
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-28 13:44:37 +01:00
Damjan Marion ee721412eb Fix issue with cpu_id and numa_code captured too early
Change-Id: I79b213b34c6071d14acf1922f89037a4a5a36c45
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-27 20:23:17 +00:00
Dave Barach 53fe4a7926 perfmon: collect data on selected thread(s)
Add missing pre-input node runtime fork and refork code.
unix-epoll-input runs on all threads; each instance needs its own
runtime stats.

Change-Id: I16b02e42d0c95f863161176c4bb9f9917bef809d
Signed-off-by: Dave Barach <dave@barachs.net>
2019-01-27 03:01:59 +00:00
Dave Barach 8704097b9b move misc-drop-errors to vnet
thanks, Eliot...

Change-Id: I8d8fee09bf1fe24933e6ef4e126dba8e22fe62b1
Signed-off-by: Dave Barach <dave@barachs.net>
2019-01-24 15:14:15 -05:00
Dave Barach ec595ef026 perfmon plugin: 2-way parallel stat collection
As a FUD reduction measure, this patch implements 2-way parallel
counter collection. Synthetic stat component counter pairs run at the
same time. Running two counters (of any kind) at the same time
naturally reduces the aggregate time required by an approximate
factor-of-2, depending on whether an even or odd number of stats have
been requested.

I don't completely buy the argument that computing synthetic stats
such as instructions-per-clock will be inaccurate if component counter
values are collected sequentially. Given uniform traffic pattern, it
must make no difference.

As the collection interval increases, the difference between serial
and parallel component counter collection will approach zero, see also
the Central Limit theorem.

Change-Id: I36ebdcf125e8882cca8a1929ec58f17fba1ad8f1
Signed-off-by: Dave Barach <dave@barachs.net>
2019-01-24 16:19:04 +00:00
Damjan Marion 22f23ae802 buffers: fix vector types
Change-Id: I9df96264e30806ac3daf7121f314f34f06232413
Signed-off-by: Damjan Marion <damjan.marion@gmail.com>
2019-01-24 15:36:57 +01:00
Damjan Marion 9a8a12a06e buffers: wrap vlib_buffer_t to union and expose vector types
Change-Id: I1c12e2941cae198ededbb65eb5be51a4eabe2c1b
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-23 19:57:42 +00:00
Damjan Marion 3235382f23 buffers: remove VLIB_BUFFER_DEFAULT_FREE_LIST macro and fl->n_data_bytes
Change-Id: I0ba5175be077c40556f2a3ce629c5bbcd71e0a81
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-20 21:01:03 +00:00
Damjan Marion b67196d823 buffers: remove vlib_buffer_delete_free_list
Change-Id: I5fe01e918b534d1ac1d47f0d7610536f45c3158c
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-20 19:28:27 +00:00
Damjan Marion 6434430fd5 buffers: don't init metadata, as it is already initialized
Change-Id: Ia083050389853c25b069f0f8286d50d3f4aef527
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-20 19:24:46 +00:00
Damjan Marion d50e347763 buffers: keep buffer_main in vlib_main_t
Change-Id: I3bb1d9f83dd08f4b93acd4a281bfec0674e39c2e
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-20 19:23:53 +00:00
Damjan Marion 0a78fa17cb Store numa-noda and cpu-index in vlib_main_t
Change-Id: If88ccd965122b9318a39a8d71b53334cd1fd81e4
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-20 19:23:42 +00:00
Su Wang 34321b3445 log: bug fix register class compare mismatch
1. Otherwise, the log classes with same prefix, e.g. "abc" and
   "abc-de" will all be registered into log class "abc";
2. Minor improvement for test log help string.

Change-Id: I8d93be5e8fa67db6012198b3442a9e2bddcb744a
Signed-off-by: Su Wang <su.z.wang@ericsson.com>
2019-01-20 14:17:40 +00:00
Steven Luong ddccf7bcee Fix GCC 8 compiler warnings on strncpy's truncated copy on debian distro
For some reason, GCC 8 in debian is pickier than GCC 8 in ubuntu. It complains
about things in strncpy like this

/home/sluong/vpp/src/vlib/linux/pci.c:485:7: error: ‘strncpy’ output may be
truncated copying 15 bytes from a string of length 255 [-Werror=stringop-truncation]
       strncpy (ifr.ifr_name, e->d_name, sizeof (ifr.ifr_name) - 1);
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/sluong/vpp/src/vlib/linux/pci.c: At top level:

It also complains similar things in string_test.c

The fix in pci.c is to convert strncpy to use clib_strncpy
The fix in string_test.c is condiational compile the complained code for GCC 8.

Change-Id: Ic9341ca54ed7407210502197a28283bc42c26662
Signed-off-by: Steven Luong <sluong@cisco.com>
2019-01-18 23:10:11 -08:00
Damjan Marion 36eb7c2142 buffers: remove free-list information from buffer metadata
Change-Id: I6048c6a51efa826ac333f7d15919cb87dd766d74
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-19 00:17:51 +00:00
Damjan Marion ab9b7ec210 buffers: remove freelist argument from vlib_buffer_add_data
Change-Id: Idb224b807373128b78dc46f177b2d2e0ed288349
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-18 23:18:05 +00:00
Damjan Marion 64d557cd67 Add vlib_buffer_copy_indices inline function
This reverts commit 1e59f9ddbdda14591967e1d66eab8623f9ba58e4.

Change-Id: Iae1d372b887e170d28cac2fe4c61325ee5a5894a
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-18 23:18:00 +00:00
Damjan Marion e58041f242 deprecate clib_memcpy64_x4
Storing buffer in local template seems to be better option....

Change-Id: I1a2fdd68cb956f99a5b36d2cd810fc623e089bcf
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-18 22:00:27 +00:00
Stephen Hemminger 29f0a5d25c vmbus: fix strncpy related warnings
The code that was manipulating interface names with ifreq was
causing warnings about possible truncation and non terminated
strings.

These are warnings only since kernel would allow a interface
name > 15 characters anyway.

Change-Id: I794a94fe310b8568403d4e3523c61d53468a6f02
Reported-by: Burt Silverman <burtms@gmail.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2019-01-17 09:19:47 +00:00
Stephen Hemminger 4e8a83183e pci: fix strncpy warnings
Doing strncpy(ifr.ifr_name, s, sizeof(ifr.ifr_name)) will cause
a warning about string truncation with GCC 8 (and other tools).
Fix this by using sizeof(ifr.ifr_name) - 1. Also, there is no
need to manually zero the end of the string since the whole
ifr structure is already zeroed by memset.

Change-Id: I9440d602ecdd9f8592b69bab2e77479146d00d76
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2019-01-17 09:19:33 +00:00
Dave Barach 7b01e9e897 Use the official libpcap file type
Change-Id: Ia34a4278eedc8cf450688b1fa0291e1f976868d3
Signed-off-by: Dave Barach <dave@barachs.net>
2019-01-09 10:23:16 -05:00
Damjan Marion d2bfb78f4f avf: allocate descriptor memory from local numa
Change-Id: Ic56ee4ce83b282a5f0f5aed500721fe639b941b3
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-07 21:57:17 +00:00
Dave Barach 3a63fc5470 Handle buffer alloc failure in vlib_buffer_add_data
It's not OK to crash due to a transient buffer allocation failure.

Return 1 if the requested operation failed, otherwise 0.

Buffer index parameter change to a value-result, so the caller can
differentiate between partial and complete allocation failure: callers
which request an initial allocation (inbound bi = ~0) need to check
the (out) value to decide whether or not to call vlib_buffer_free(...).

Change-Id: I03029d7f2714c17dca4630dfd95a1eb578b68384
Signed-off-by: Dave Barach <dave@barachs.net>
2019-01-07 16:47:09 +00:00
Paul Vinciguerra d6897c1597 Add microarch details to 'show cpu'.
Change-Id: I31a3ff9e8f70468196c091027592a3aed2d09ac3
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-01-02 12:23:59 +00:00
Damjan Marion 671e60e656 buffers: remove unused code
Change-Id: If2bbfbc52994f5de0879763e0b7a7864498debb6
Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-01 14:57:54 +00:00
Stephen Hemminger 6fbef23228 vlib: support Hyper-v/Azure VMBus
This patch adds support for VMBus to the VPP infrastructure.
Since the only device that matters is the netvsc Poll Mode Driver
in DPDK, the infrastructure is much simpler than PCI.

Change-Id: Ie96c897ad9c426716c2398e4528688ce2217419b
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2018-12-19 08:34:39 +01:00
Matus Fabian b0055c8157 STATS: add vlib_set_simple_counter (VPP-1484)
Change-Id: Iacaa75c7e1c974642c1dc1e0c3cf5c36c78450d7
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2018-12-18 07:45:33 +00:00
Klement Sekera 69db1a6084 fix vlib_buffer_chain_compress assert in debug
replace vlib_buffer_advance with its code to work around assert

Change-Id: I6e332527f5e0c10d23305b6fc2e837d8b4f99e78
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2018-12-13 14:42:14 +00:00
Dave Barach a5fb0ec6c3 Add VNET_BUFFER_F_AVAIL definitions
Add a check to make sure that the vlib and vnet buffer flag bit
definitions do not overlap.

The VNET_BUFFER_F_AVAIL1...8 definitions allow out-of-tree codes to:

  #define VNET_BUFFER_F_MY_USECASE VNET_BUFFER_F_AVAIL1

and so on. This avoids introducing irrelevant and/or proprietary bit
definitions into vnet/buffer.h, and hopefully minimizes merge pain for
everyone involved.

Change-Id: I5be4f61dceb81b5bfca005f6d609ade074af205b
Signed-off-by: Dave Barach <dave@barachs.net>
2018-12-04 12:04:37 +00:00
Dave Barach 7fff3d2054 Metadata / opaque formatting belongs in vpp
VPP graph dispatch trace record description:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Major Version | Minor Version | NStrings      | ProtoHint     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Buffer index (big endian)                                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   + VPP graph node name ...     ...               | NULL octet    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Buffer Metadata ... ...                       | NULL octet    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Buffer Opaque ... ...                         | NULL octet    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Buffer Opaque 2 ... ...                       | NULL octet    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | VPP ASCII packet trace (if NStrings > 4)      | NULL octet    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Packet data (up to 16K)                                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Graph dispatch records comprise a version stamp, an indication of how
many NULL-terminated strings will follow the record header, and a
protocol hint.

The buffer index allows downstream consumers of these data to easily
filter/track single packets as they traverse the forwarding
graph. FWIW, the 32-bit buffer index is stored in big endian format.

As of this writing, major version = 1, minor version = 0. Nstrings
will be either 4 or 5.

Here is the current set of protocol hints:

typedef enum
  {
    VLIB_NODE_PROTO_HINT_NONE = 0,
    VLIB_NODE_PROTO_HINT_ETHERNET,
    VLIB_NODE_PROTO_HINT_IP4,
    VLIB_NODE_PROTO_HINT_IP6,
    VLIB_NODE_PROTO_HINT_TCP,
    VLIB_NODE_PROTO_HINT_UDP,
    VLIB_NODE_N_PROTO_HINTS,
  } vlib_node_proto_hint_t;

Example: VLIB_NODE_PROTO_HINT_IP6 means that the first octet of packet
data SHOULD be 0x60, and should begin an ipv6 packet header.

Change-Id: Idf310bad80cc0e4207394c80f18db5f77c378741
Signed-off-by: Dave Barach <dave@barachs.net>
2018-11-30 20:18:54 +00:00
Eyal Bari ce55bcde5d vlib:init free list buffers vec
fixes a problem seen when dhcp proxy uses vlib_buffer_chain_linearize
function which tries to vlib_buffer_alloc zero buffers - which succeeds
if the buffers vector is initialized but otherwise crashes when trying to
update the _vec_len in vlib_buffer_alloc_from_free_list
solved by initializing the free_list buffers vec

Change-Id: I1186d7aac05e54864d72f3f144e1bef8064f8efa
Signed-off-by: Eyal Bari <ebari@cisco.com>
2018-11-25 15:30:13 +00:00
Dave Barach 1201a805db Add buffer tracing to the dispatch tracer
Change-Id: I56f25d653b71a25c70e6c5c1a93dd9c5158f2079
Signed-off-by: Dave Barach <dave@barachs.net>
2018-11-20 22:35:08 +00:00
Damjan Marion 9162c2d2e2 vlib: reset frame flags when frame is reused
Change-Id: I8f4843e7a961a1e6c3fd057554b31ae49fc9b328
Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-11-20 11:29:09 +00:00
Damjan Marion 142eb85200 vlib: add vlib_buffer_enqueue_to_single_next(...) function
Change-Id: I485dd07ea0fe032bdd5990567578e73e9bcffe1e
Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-11-20 10:57:26 +00:00
Eyal Bari d3d424180f dhcp4:(VPP-1483) linearize chained packets before handling
dhcp packets might (when flooded) arrive in chains of cloned buffers

Change-Id: Ifddecd656b6a5d6ba8cd94184f5c021684e35548
Signed-off-by: Eyal Bari <ebari@cisco.com>
2018-11-20 02:52:39 +00:00