Thread (76 messages) 76 messages, 5 authors, 2016-06-30

Re: [PATCH v3 00/20] vhost ABI/API refactoring

From: Panu Matilainen <hidden>
Date: 2016-06-30 09:05:23

On 06/30/2016 10:57 AM, Yuanhan Liu wrote:
On Thu, Jun 30, 2016 at 10:39:45AM +0300, Panu Matilainen wrote:
quoted
On 06/07/2016 06:51 AM, Yuanhan Liu wrote:
quoted
v3: - adapted the new vhost ABI/API changes to tep_term example, to make
     sure not break build at least.
   - bumped the ABI version to 3

NOTE: I created a branch at dpdk.org [0] for more conveinient testing:

   [0]: git://dpdk.org/next/dpdk-next-virtio for-testing


Every time we introduce a new feature to vhost, we are likely to break
ABI. Moreover, some cleanups (such as the one from Ilya to remove vec_buf
from vhost_virtqueue struct) also break ABI.

This patch set is meant to resolve above issue ultimately, by hiding
virtio_net structure (as well as few others) internaly, and export the
virtio_net dev strut to applications by a number, vid, like the way
kernel exposes an fd to user space.

Back to the patch set, the first part of this set makes some changes to
vhost example, vhost-pmd and vhost, bit by bit, to remove the dependence
to "virtio_net" struct. And then do the final change to make the current
APIs to adapt to using "vid".

After that, "vrtio_net_device_ops" is the only left open struct that an
application can acces, therefore, it's the only place that might introduce
potential ABI breakage in future for extension. Hence, I made few more
(5) space reservation, to make sure we will not break ABI for a long time,
and hopefuly, forever.
Been intending to say this for a while but seems I never actually got around
to do so:

This is a really fine example of how to refactor an API against constant ABI
breakages, thank you Yuanhan!
Panu, thanks!
quoted
Exported structs are one of the biggest
obstacles in keeping a stable ABI while adding new features, and while its
not always possible to hide everything to this extent, the damage (erm,
exposure) can usually be considerably limited by careful API design.
Agreed.
quoted
Since the first and the foremost objection against doing this in the DPDK
context is always "but performance!", I'm curious as to what sort of numbers
you're getting with the new API vs the old one? I'm really hoping other
libraries would follow suit after seeing that its possible to provide a
future-proof API/ABI without sacrificing performance :)
From my (limited) test, nope, I see no performance drop at all, not even a
little.
Awesome!

With that, hopefully others will see the light and follow its example. 
If nothing else, they ought to get a bit envious when you can add 
features left and right without ever having to wait for API/ABI break 
periods etc ;)

	- Panu -
	--yliu
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help