Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vita Q4 2019 #109

Merged
merged 409 commits into from
Dec 13, 2019
Merged

Vita Q4 2019 #109

merged 409 commits into from
Dec 13, 2019

Conversation

alexandergall and others added 30 commits January 29, 2019 15:08
Take padding to minimum Ethernet frame size into account.
Implement semantics according to RFC6020, 9.6.  When validating a
configuration against a schema which contains

leaf foo {
  type enumeration {
    enum bar;
    enum baz;
  }
}

the resulting Lua table will contain the key "foo" whose value is the
string of the chosen enum in the configuration, e.g.

{
  foo = "baz"
}

It is debatable whether this should actually result in the numerical
value assigned to the name in the schema.  The name appears to be more
useful because the consumer of this table would have to reproduce the
same name-to-value mapping as the schema, which introduces a source of
possible errors.
The goal of this change is to simplify the loop structure of the Snabb
engine to make it more likely that the compiler can find and optimize
the packet-processing loops. In particular, it can help in the
situation when the program starts in an idle state with no packets to
process. In that case, we want to avoid that traces compiled for this
initial workload have a negative impact on the creation of traces for
the actual (non-idle) workload.

See snabbco#1414 for an analysis with
a simplified engine.
* lib/ljsyscall/syscall/linux/syscalls.lua: More robustly create
  multi-word bitmasks.

* src/lib/numa.lua: Remove facility for blacklisting kernel versions.
  Re-enable bind_to_numa_node generally.
By setting the "standard" option to a true value, the value returned
by the hash function will be the lower 32 bits of the 64-bit value
produced by the reference implementation. This option is not available
for the multi-hash implementation.
This commit makes four changes:

  (1) On the individual revision nodes in a schema, the revision date is
      now stored under `date` instead of `value`.

  (2) Schemas now have a `last_revision` property, indicating the date
      of the most recent revision.

  (3) This revision now gets serialized into compiled configurations.

  (4) When loading compiled configurations, we check that the compiled
      file's revision date corresponds to the what we are expecting.

Fixes snabbco#1208.
The file in question is too small for the minimum ethernet frame size;
with the CRC it becomes 58 bytes, which is smaller than the minimum
frame size of 64, so it gets padded as it goes out on the wire, which
later gets rejected on the receiver as its lengths don't make sense.  In
any case it doesn't test what it means to test, so remove it.
Detect version mismatch when loading compiled YANG configurations
Re-enable NUMA memory binding on newer kernels
Fix PCI affinity check for --preferred NUMA binding
This patch extends the NUMA module to be able to run some self-checks
when it is used to reserve a CPU for a data plane, for example checking
the CPU frequency scaling governor or the set of isolated CPUs.
Add more system performance diagnostics
This patch will print a warning if a network function tries to bind
to a CPU, but irqbalance is detected.  Irqbalance, installed by default
on Debian-derived systems, will modify CPU affinities for IRQ
handlers in an effort to spread out the IRQ-processing load among
CPUs.  However this is not what we want in Snabb; we do not want
data-plane CPUs to run IRQ handlers, and we do not want bug reports
coming from users that have this daemon installed.

See https://github.com/snabbco/snabb/blob/master/src/doc/performance-tuning.md#avoid-interrupts-on-data-plane-cpus, for more details.
Detect irqbalance presence and suggest remedy
 - do not assert the revision date unless schema has revisions

 - do not try to load as source any compiled configs (with magic number header)
   that are rejected (instead bail with an error)
This fixes a bug in which data_printer_from_grammar would not print choice case
members when an order is given to body_printer.

XXX: it is not clear to me why some invocations of body_printer take orderings,
since it seems that the pre-ordering always matches the internal ordering logic
of body_printer. \o/
This fixes a bug where packets would not be transmitted unless the tx queue was
full.
This fixes a bug where packets would not be transmitted unless the tx queue was
full.
This fixes a bug in which data_printer_from_grammar would not print choice case
members when an order is given to body_printer.

XXX: it is not clear to me why some invocations of body_printer take orderings,
since it seems that the pre-ordering always matches the internal ordering logic
of body_printer. \o/
Used to be that configurations read from the command line or stdin bypassed the
consistency checker.
This updates the consistency checkers to expand choices and visit the bodies of
all cases.
This removes the order parameter in the affected functions altogether. Test
suite passes so I am assuming this was dead code from the past.
@eugeneia eugeneia merged commit 93d43c5 into master Dec 13, 2019
eugeneia added a commit that referenced this pull request Dec 13, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants