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

Release v0.6.0 #487

Merged
merged 97 commits into from
Oct 4, 2018
Merged

Release v0.6.0 #487

merged 97 commits into from
Oct 4, 2018

Conversation

gshimansky
Copy link
Contributor

New NFF-Go release version 0.6.0

ifilippov and others added 30 commits June 18, 2018 11:55
Now all flows have flexible number of intermediate rings which
depends on RSS queues number. Packets for same sessions
follow exact same routes.

Scheduler now has one more notion - flow function instance (ffi),
main concepts of new scheduler are:
1) Flow Function - covering structure, includes name,
working function, parameters, user contexts and other general information.
Different flow functions are completely different and can't be compared to each other.
2) Flow function instance - structure for working at different RSS flows.
Contains determination of current RSS flow.
Instances of one flow function are absolutely independent:
different cores, mempools, input/output rings and handled sessions.
3) Instance clone - structure for one process that is done useful work.
Contains determination of core and start/stop/report flags/channels.
Clones of one instance work at different cores. However they are not independent:
They share input/output rings, high level protocol sessions and lines in various tables.

Added new user options:
RestrictedCloning - forbids scheduler to add more that one clone per instance which can result to reordering
MaxInIndex - limits instance number per flow function. Can various from 1 to RSS restriction

Changed constants:
As now we have one mempool per each instance we limit default size:
mempool - 8191 instead of 4*8191
ring - 64 * burstSize instead of 256 * burstSize

Details:
Each flow has constant number of parallel rings.
Flows which started with receive have MaxInIndex parallel rings
Other flows like KNI, generate, PCAP read have 1 parallel ring
Merge will merge parallel rings by their numbers:
flows with 1 and 16 rings will merge as first to first ring
Basicaly all functions have one instance and one clone. This instance
handles all input parallel rings. If some function can't handle input flow
scheduler will add additional instance and divide input parallel rings
like half and half. If there is only on input ring and instance still
can't handle it scheduler will add clones (if this is permitted by user).

Pluses:
No reordering, flow locality
No locks for the same lines per session in any intermediate tables
Can reassemble high level protocols like TCP or HTML
Faster scheduler (working independently with each instance)

Minuses:
Memory usage for additional mempools and rings.
Increased number of rings between Flow Functions based on RSS
Switched to virtio network cards in VMs because they are the most stable
Fixed pktgen URL and directory after dpdk site redesign
Added speed regulation to generator, ability to generate imix, fixed errors
Made debug build mode through makefile
Refactored packet initialization to remove duplicate code.
Fix number of report channels
Added assertion about minimal generate target speed
Extracted API for generator creation to get packets back.
Extracted generator to examples, updated readme, renamded generator
Fixed generator performance problems
ifilippov and others added 25 commits September 10, 2018 16:04
Trivial version bump for fedora image
Implemented DHCP client functionality to acquire IPv4 address
* [devices] move devices package from crimea to nff-go
* [devices] add a devbind example
- Implemented Neighbor Discovery responce to neighbor solicitation message
- Implemented Neighbor Solicitation and Advertisement messages for IPv6
- Implemented port forwarding to IPv6 addresses
- Implemented IPv6 packets forwarding to KNI interfaces
- Implemented DHCPv6
- Added missing IPv6 support to GRPC configuration
- Fixes for DHCPv6 and KNI interopration
- Set local addresses on KNI interfaces when they are received from DHCP
  or set by GRPC.
- If KNI is present, all forwarded traffic directed at local IPs is
  directed to KNI now, so port forwarding with zero address is kinda
  obsolete now.
- Fixed checksum and icmpv6 tests
Implemented IPv6 NAT with DHCPv6, ND and port forwarding
Changed ICMPv6 checksum calculation to be consistent with other checksum
calculation functions. Now it is not necessary to zero out checksum
field in the header before calling checksum calculation.
Fixed CI tests on ICMPv6 checksums
Signed-off-by: Lehner Florian <dev@der-flo.net>
Removed NAT example because it is moved to nff-go-nat repository
Added go.mod for dependency tracking
Signed-off-by: Lehner Florian <dev@der-flo.net>
@gshimansky gshimansky requested a review from aregm October 4, 2018 15:37
@aregm aregm merged commit e30524b into master Oct 4, 2018
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.

6 participants