aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2011-11-10 15:39:39 -0800
committerBen Pfaff <blp@nicira.com>2011-11-28 09:19:08 -0800
commitf6d1465cec98fd7e83845d24fb394145bbbcf531 (patch)
tree7df1f6d18092cbd2b97dc057331fca7631efab37 /lib
parentc06bba01302e3dc1ec7808024bc37ce90956b49e (diff)
dpif-linux: Remove poll_fd_woke() optimization from dpif_linux_recv().
This optimization on its own provided about 37% benefit against a load of a single netperf CRR test, but at the same time it penalized ovs-benchmark by about 11%. We can get back the CRR performance loss, and more, other ways, so the first step is to revert this patch, temporarily accepting the performance loss.
Diffstat (limited to 'lib')
-rw-r--r--lib/dpif-linux.c47
1 files changed, 23 insertions, 24 deletions
diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c
index 88193c3b..4b4ac55b 100644
--- a/lib/dpif-linux.c
+++ b/lib/dpif-linux.c
@@ -1097,39 +1097,38 @@ dpif_linux_recv(struct dpif *dpif_, struct dpif_upcall *upcall)
for (i = 0; i < N_UPCALL_SOCKS; i++) {
struct nl_sock *upcall_sock;
+ int dp_ifindex;
+
dpif->last_read_upcall = (dpif->last_read_upcall + 1) &
(N_UPCALL_SOCKS - 1);
upcall_sock = dpif->upcall_socks[dpif->last_read_upcall];
- if (nl_sock_woke(upcall_sock)) {
- int dp_ifindex;
- for (;;) {
- struct ofpbuf *buf;
- int error;
+ for (;;) {
+ struct ofpbuf *buf;
+ int error;
- if (++read_tries > 50) {
- return EAGAIN;
- }
+ if (++read_tries > 50) {
+ return EAGAIN;
+ }
- error = nl_sock_recv(upcall_sock, &buf, false);
- if (error == EAGAIN) {
- break;
- } else if (error) {
- return error;
- }
+ error = nl_sock_recv(upcall_sock, &buf, false);
+ if (error == EAGAIN) {
+ break;
+ } else if (error) {
+ return error;
+ }
- error = parse_odp_packet(buf, upcall, &dp_ifindex);
- if (!error
- && dp_ifindex == dpif->dp_ifindex
- && dpif->listen_mask & (1u << upcall->type)) {
- return 0;
- }
+ error = parse_odp_packet(buf, upcall, &dp_ifindex);
+ if (!error
+ && dp_ifindex == dpif->dp_ifindex
+ && dpif->listen_mask & (1u << upcall->type)) {
+ return 0;
+ }
- ofpbuf_delete(buf);
- if (error) {
- return error;
- }
+ ofpbuf_delete(buf);
+ if (error) {
+ return error;
}
}
}