Folks,
I have a Makefile that defines multiple targets, including these two (for
building OVS with DPDK support):
config-ovs:
cd $(OVS_DIR) && ./boot.sh && ./configure
--with-dpdk=$(DPDK_BUILD) \
--disable-ssl --enable-silent-rules && cd $(ROOT_DIR)
ovs:
$(MAKE) -C $(OVS_DIR) -j $(NUMPROC)
If I use these targets as is I get roughly the performance I'd expect. However,
if I modify this slightly (to hide compile-time warnings) like so:
export OVS_CFLAGS := -Wno-bad-function-cast -Wno-cast-align
ovs:
$(MAKE) -C $(OVS_DIR) CFLAGS="$(OVS_CFLAGS)" -j $(NUMPROC)
then performance takes ~3x hit (12,751,368 pps -> 4,480,900 pps). I've tried
the following combinations and all cause the same issue:
$(MAKE) -C $(OVS_DIR) CFLAGS="$(OVS_CFLAGS)" -j $(NUMPROC)
$(MAKE) -C $(OVS_DIR) CFLAGS+="$(OVS_CFLAGS)" -j $(NUMPROC)
$(MAKE) -C $(OVS_DIR) CFLAGS="" -j $(NUMPROC)
$(MAKE) -C $(OVS_DIR) CFLAGS+="" -j $(NUMPROC)
Just in case, I also tried passing CFLAGS to the 'configure' step instead.
However, once again I saw performance issues:
config-ovs:
cd $(OVS_DIR) && ./boot.sh && ./configure
--with-dpdk=$(DPDK_BUILD) \
--disable-ssl --enable-silent-rules CFLAGS="$(OVS_CFLAGS)" && \
cd $(ROOT_DIR)
Combined, these results add to the theory that it's not the specific CFLAGS but
rather the use of the 'CFLAGS' argument that is problematic. Based on this
patch I would have expected this to work:
http://openvswitch.org/pipermail/dev/2014-September/045494.html
To confirm this theory, I modified the '--with-dpdk' rule in 'acinclude.m4' to
add these flags (thus skipping CFLAGS altogether). There is no performance
penalty here. This, however, does not look like something people would like
included otherwise it would be have been done already? :)
diff --git a/acinclude.m4 b/acinclude.m4
index c2f45ce..3b95db8 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -204,7 +204,7 @@ AC_DEFUN([OVS_CHECK_DPDK], [
CFLAGS="$ovs_save_CFLAGS"
LDFLAGS="$ovs_save_LDFLAGS"
OVS_LDFLAGS="$OVS_LDFLAGS -L$DPDK_LIB_DIR"
- OVS_CFLAGS="$OVS_CFLAGS -I$DPDK_INCLUDE"
+ OVS_CFLAGS="$OVS_CFLAGS -I$DPDK_INCLUDE -Wno-bad-function-cast
-Wno-cast-align"
# DPDK 1.7 pmd drivers are not linked unless --whole-archive is
used.
#
Has anyone any suggestions for why performance is affected like this? To me, it
looks like optimizations aren't being applied and perhaps CFLAGS is being
overridden, but I don't know how to prevent this from happening. This issue
would likely affect performance in Travis (assuming it matters there), seeing
as a similar approach is adopted in '.travis/build.sh'.
Cheers,
Stephen
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev