Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Jun 2016 17:08:42 +0200
From:      Dominik Schoeffmann <schoeffm@in.tum.de>
To:        net@freebsd.org
Subject:   Netmap Checksum Offloading
Message-ID:  <57601DFA.2040008@in.tum.de>

next in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--c2ilmUOL4VmDEpGuPjGWmDn46sh7vDw5d
Content-Type: multipart/mixed; boundary="ojWM2RfT27D5rxalIH6m7sQf9oPQ8T9jk"
From: Dominik Schoeffmann <schoeffm@in.tum.de>
To: net@freebsd.org
Message-ID: <57601DFA.2040008@in.tum.de>
Subject: Netmap Checksum Offloading

--ojWM2RfT27D5rxalIH6m7sQf9oPQ8T9jk
Content-Type: multipart/mixed;
 boundary="------------070703060403080105060100"

This is a multi-part message in MIME format.
--------------070703060403080105060100
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Dear Netmap Developers,

during the course of my bachelor's thesis, I modified a packet generator
called MoonGen [1] in order to utilize netmap.
One key component was to flexibly offload checksums for different kinds
of packets (IPv4, UDP, TCP).
The ixgbe netmap patch was modified [2] in order to construct context
descriptors and suitable data descriptors. This is implemented in less
than 250 LoC (including pseudo-header calculations).
The man page states, that checksum offloading is available via ethtool,
although a solution inside the netmap API might be a cleaner way for
applications to actually use these features.
Attached is a graph showing the performance implication of using
offloading in the current implementation.
As can be seen, offloading has only a minor impact.
When regarding this data (and comparing it to other frameworks), please
keep in mind, that internally a lot of per-packet effort is needed due
to the software architecture of the packet generator.

The question being:
Would it not make sense to include checksum offloading inside of netmap
in order to accomodate applications operating on layer 3 and above?
As these programs need to calculate the checksums in software, it would
be just as fast to move these calculations to the kernel for NICs
without checksum offloading support (and the kernel would act as a librar=
y).
The problem which currently is imposed by the fact, that netmap exports
the complete ring, is that context descriptors disrupt the data
descriptors, which is unpleasant for the application.
But you may find the data interesting nevertheless.


Best Regards,
Dominik Schoeffmann



[1] https://github.com/dschoeffm/MoonGen/tree/netmap
[2] https://github.com/dschoeffm/netmap/tree/mg-chksum-offloading


--------------070703060403080105060100
Content-Type: application/pdf;
 name="netmap-offloading.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="netmap-offloading.pdf"

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
7BsPjuixdrLETSYLs2l2D/WNIA+UxstJx3IZ38EV4yhIPO/u9optT3MawrCmEmJHvhQ1D6yT
0d9eDbyKDAsy0n2lZ0r0WDtFYs1kATrN7s38Jk0/IeTvxl74khCvKPbW8VPChPv/3S8J31xy
PX956cf5n5e4n6/4md93lydYE86/XGJq57+B0c//uxzx/DV/MycVPFmtCH1jn18tJvxCrnFl
785/uORy/selJPq/X+TjOmgf/I/eAt98Rnn/M7cE+/t83whQhbcCuBXAceuptnnx8vPXL7xo
Xr6gw7WuwOPb8/wCC9aZWidDsoO/63zoI5A+4coUxQFoU+I08R6u1/kNV4IxxRdAbMKCAhNj
7twaAAtMPaw4m5m/IVMHTM75h3mz+KnTZ+YsH8S+Wv0SwK2T4kvraSW/SejNR79ZTRXqKAWH
v+NEuD/V/nJ5ivn86eWp1PMf4d9tP/8GZ1o+/x5+oG/s53/PIPwytWacjRVmIzi+vhxtmuH8
98tT5bn5r0vazx9sRt28/uCxBpjJ/XBjzQ4c64+/UqLOMA1xRPpYhHsXvxjGr3V4dNl0o6sB
NHpanE2St9EFZqM/dKTRRagb0UaXbRtdDaDWafGl9X50NaFXjC5sgrUPHF38S7R8vHZ07wzf
y6NnlzQ8bBXfpkQ3bOygR/T55RblZaXE0emNEndUHfRCiQeKTTdQGkADocXZJHkbKPyroDR0
oKCpaT5WPFBs20BpALdOii+t9wOlCb1moAosiREHqsL+0/PdgXrgYfuV0bpLcTxy0DUI7TZy
7KC/dX49LVMHmJo46kQY6VHo6l0XPrZ0PMkOOlxals0iJw5xwE55HFY6TXBR8WkGN5wawE2T
4kvT/XBqNq8Zzr6lNlfVgq+4xt3h/AG37R9hCHuR3TsmHcKGQ9juDuHn4f+AycSMCmVuZHN0
cmVhbQplbmRvYmoKNCAwIG9iagogICA0Mjk0CmVuZG9iagoyIDAgb2JqCjw8CiAgIC9FeHRH
U3RhdGUgPDwKICAgICAgL2EwIDw8IC9DQSAxIC9jYSAxID4+CiAgID4+CiAgIC9YT2JqZWN0
IDw8IC94NiA2IDAgUiA+PgogICAvRm9udCA8PAogICAgICAvZi0wLTAgNSAwIFIKICAgPj4K
Pj4KZW5kb2JqCjcgMCBvYmoKPDwgL1R5cGUgL1BhZ2UKICAgL1BhcmVudCAxIDAgUgogICAv
TWVkaWFCb3ggWyAwIDAgMzc1LjM4MzM2MiAyNTcuNjc5ODEgXQogICAvQ29udGVudHMgMyAw
IFIKICAgL0dyb3VwIDw8CiAgICAgIC9UeXBlIC9Hcm91cAogICAgICAvUyAvVHJhbnNwYXJl
bmN5CiAgICAgIC9JIHRydWUKICAgICAgL0NTIC9EZXZpY2VSR0IKICAgPj4KICAgL1Jlc291
cmNlcyAyIDAgUgo+PgplbmRvYmoKNiAwIG9iago8PCAvTGVuZ3RoIDkgMCBSCiAgIC9GaWx0
ZXIgL0ZsYXRlRGVjb2RlCiAgIC9UeXBlIC9YT2JqZWN0CiAgIC9TdWJ0eXBlIC9Gb3JtCiAg
IC9CQm94IFsgNjIgMTAxIDM0NSAyMzMgXQogICAvUmVzb3VyY2VzIDggMCBSCj4+CnN0cmVh
bQp4nF3STUrGQAwG4P2cIid4ze9k5gSC4EJdigtBEEQX4sLrm/aTOnVRGl7C5Jk2n42J0XO4
SRXTUiPo/pqunplev5pAZoTRd/Xd1PPWHp+qj+mlCdMtdUV2JWGnD5qJ6UFiHSOU3qsyiFbS
B7rKllRlXEn1skUlygYfjVQEJn1LrLo7qdZw3o7RNAz3aqlpMysxnmC1ShziY0vcUUdRU6lm
3aKHtl0pWGavYrvUoRW4rOCB/ZDDm4E+4+SdsJSTN+BpqzeQuXI10T1WrnZ45MJVVYRn27lM
/52xD/2DumGKn6SzbrtAtUaJnqBqODs7+PKhF6jlGVoDxzhBBzTGLxRTwydtu1Pv+kkremCc
0MHwLit61ty5roNK4kI60PWleN0GY5RqVZuA2Vd1JXFJjm2oqFvu6rv2A9OFk9gKZW5kc3Ry
ZWFtCmVuZG9iago5IDAgb2JqCiAgIDMxNQplbmRvYmoKOCAwIG9iago8PAogICAvRXh0R1N0
YXRlIDw8CiAgICAgIC9hMCA8PCAvQ0EgMSAvY2EgMSA+PgogICA+Pgo+PgplbmRvYmoKMTAg
MCBvYmoKPDwgL0xlbmd0aCAxMSAwIFIKICAgL0ZpbHRlciAvRmxhdGVEZWNvZGUKICAgL0xl
bmd0aDEgNjgyMAo+PgpzdHJlYW0KeJzlWIl/U1W+/527ZWna3jRJtxRIGprypJ0W0haoHYQn
RZERkUVTpEClCGWolrZCUVbZQihWEcFh9436KC7cXh0hRZ36hrJ05jFVGRVEBlzeKFOfTwcF
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
MCBvYmoKICAgMzU4CmVuZG9iagoxNCAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IK
ICAgL0ZvbnROYW1lIC9XU1JDQkwrUm9ib3RvLVJlZ3VsYXIKICAgL0ZvbnRGYW1pbHkgKFJv
Ym90bykKICAgL0ZsYWdzIDMyCiAgIC9Gb250QkJveCBbIC03MzYgLTI3MCAxMTQ4IDEwNTYg
XQogICAvSXRhbGljQW5nbGUgMAogICAvQXNjZW50IDkyNwogICAvRGVzY2VudCAtMjQ0CiAg
IC9DYXBIZWlnaHQgMTA1NgogICAvU3RlbVYgODAKICAgL1N0ZW1IIDgwCiAgIC9Gb250Rmls
ZTIgMTAgMCBSCj4+CmVuZG9iago1IDAgb2JqCjw8IC9UeXBlIC9Gb250CiAgIC9TdWJ0eXBl
IC9UcnVlVHlwZQogICAvQmFzZUZvbnQgL1dTUkNCTCtSb2JvdG8tUmVndWxhcgogICAvRmly
c3RDaGFyIDMyCiAgIC9MYXN0Q2hhciAxMjIKICAgL0ZvbnREZXNjcmlwdG9yIDE0IDAgUgog
ICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwogICAvV2lkdGhzIFsgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDU2NiAwIDAgMCAwIDU2MSA1NjEgNTYxIDU2MSA1NjEgNTYxIDU2MSAwIDU2
MSAwIDAgMCAwIDAgMCAwIDAgMCA2MjIgMCA2NTUgMCAwIDAgMCAyNzEgMCAwIDAgODczIDAg
MCA2MzAgMCAwIDAgMCA2NDggMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU0MyAwIDUyMyAwIDUy
OSAwIDAgNTUwIDI0MiAwIDUwNiAwIDg3NiA1NTEgNTcwIDU2MSAwIDAgNTE1IDMyNiA1NTEg
NDg0IDAgMCAwIDQ5NSBdCiAgICAvVG9Vbmljb2RlIDEyIDAgUgo+PgplbmRvYmoKMSAwIG9i
ago8PCAvVHlwZSAvUGFnZXMKICAgL0tpZHMgWyA3IDAgUiBdCiAgIC9Db3VudCAxCj4+CmVu
ZG9iagoxNSAwIG9iago8PCAvQ3JlYXRvciAoY2Fpcm8gMS4xNC4yIChodHRwOi8vY2Fpcm9n
cmFwaGljcy5vcmcpKQogICAvUHJvZHVjZXIgKGNhaXJvIDEuMTQuMiAoaHR0cDovL2NhaXJv
Z3JhcGhpY3Mub3JnKSkKPj4KZW5kb2JqCjE2IDAgb2JqCjw8IC9UeXBlIC9DYXRhbG9nCiAg
IC9QYWdlcyAxIDAgUgo+PgplbmRvYmoKeHJlZgowIDE3CjAwMDAwMDAwMDAgNjU1MzUgZiAK
MDAwMDAxMDg0OCAwMDAwMCBuIAowMDAwMDA0NDA5IDAwMDAwIG4gCjAwMDAwMDAwMTUgMDAw
MDAgbiAKMDAwMDAwNDM4NiAwMDAwMCBuIAowMDAwMDEwMzg4IDAwMDAwIG4gCjAwMDAwMDQ3
NzMgMDAwMDAgbiAKMDAwMDAwNDU0NiAwMDAwMCBuIAowMDAwMDA1MjcxIDAwMDAwIG4gCjAw
MDAwMDUyNDkgMDAwMDAgbiAKMDAwMDAwNTM0MyAwMDAwMCBuIAowMDAwMDA5NjM0IDAwMDAw
IG4gCjAwMDAwMDk2NTggMDAwMDAgbiAKMDAwMDAxMDA5NSAwMDAwMCBuIAowMDAwMDEwMTE4
IDAwMDAwIG4gCjAwMDAwMTA5MTMgMDAwMDAgbiAKMDAwMDAxMTA0MSAwMDAwMCBuIAp0cmFp
bGVyCjw8IC9TaXplIDE3CiAgIC9Sb290IDE2IDAgUgogICAvSW5mbyAxNSAwIFIKPj4Kc3Rh
cnR4cmVmCjExMDk0CiUlRU9GCg==
--------------070703060403080105060100--

--ojWM2RfT27D5rxalIH6m7sQf9oPQ8T9jk--

--c2ilmUOL4VmDEpGuPjGWmDn46sh7vDw5d
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAEBCAAGBQJXYB36AAoJEJiuUT5oYfea1VYP/iX/gu3TiUPUNkvt3evn1d6J
v47kDlUdkenQPt0LuJk4/DLw4DBrjdfGP1pA/O2s0Jq8+rQqXn1qMUvY1DgkP3RH
G43UtE6OWlMG9x3SlAlNfYo4nCNTfREGcE/iSpvC6GAzKkI9/9nlTvGTwhC+K+lO
vcP5i8B62YYpg599TbIUnzLSGoazy+SIOtnEYKFswMZOxS6E1/lgtSDlYobI+cv4
N1tvZrJ+ONXrJHgbP7pqki8qrwNfJoh4QQls+7rwp+U/CQvKmxLdGSCmaBHxT0qN
MuF7bITwbQuuguNECXd1EUgbfoAuUs8WQUR5oiFwEW7emzSpJ2AvgTiYkPstfi2O
322MMyZ4XDrB8P8RZbJmBP17b7lNtI4MmruZNu3ePvceX1eUQupLqNY87//LZQW7
aIqebKrkzguYhwR/Oa8Di7EET92P4vDsm9HSwGIIukVXpsNQnyN37/iuJ8dKwZtk
0TqobaOrSmUcwJps5BRRf08oxX88H+c/FDYo+lVtLDuwgbampx8n4mxM8P7GYoJA
YUJ3aCwhk2L3iRChCpQN6Q8BD3u8w1RviFiJcqBLrth9O3UczY0P4IJT/jSF0c6V
76qdzXmeFWPQw4RS1kCC255Y21qLqzCaIP/CxDlkGugQoSn8IhpXt2ivzf+rQEIy
jZyA5VwqTmn3dac99Eoh
=to2t
-----END PGP SIGNATURE-----

--c2ilmUOL4VmDEpGuPjGWmDn46sh7vDw5d--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?57601DFA.2040008>