From patchwork Mon Oct 27 18:01:14 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Herbert X-Patchwork-Id: 403714 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id E8E40140081 for ; Tue, 28 Oct 2014 05:02:17 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752468AbaJ0SCL (ORCPT ); Mon, 27 Oct 2014 14:02:11 -0400 Received: from mail-pd0-f169.google.com ([209.85.192.169]:59776 "EHLO mail-pd0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751718AbaJ0SCJ (ORCPT ); Mon, 27 Oct 2014 14:02:09 -0400 Received: by mail-pd0-f169.google.com with SMTP id y10so1769132pdj.28 for ; Mon, 27 Oct 2014 11:02:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:subject:date:message-id; bh=JYT367kb7XCkEYlJANHiV/TyE2nzW93VbKFxr2JsUmM=; b=JP9A/5IWDXejXJiu0jRxzbZYKWqqE+YPMWG0rXrjGPdZaQXzSgExXELq57z0E2pzd+ R05WkuY6IGif2U5AScxTHm+I5u2XO2dFxsJy4CaaXw5bgPuLgTipN1pcJLXkopVWlxCr 5PH+RsQsedR151psxECOuYcVNmpo+ZWbEjazcS6HBijy12KlxlVBwUecUy9a5yQ2vWLo udIDGVoF6CnnwtSZNjy68cpGQYM8nzxgacgAR7mmM3s5rbB/GZYxcfctHWyLuz4V/oIj OitWgzul5ITZDw62KPeaAIq7eOu/DiHKbJMOVkrG5x1zT7o8/1le2H5yMDRdVb4/hxgb SZuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=JYT367kb7XCkEYlJANHiV/TyE2nzW93VbKFxr2JsUmM=; b=WG1pbmcqtlKHY07IGpqNovTvgkkPlPi+hhC+N9vRZj92aJV3Kv2WpWkjtZ4k7Y/Hgw XTmiWQb6K8FsrSy59ABPzHRaBx9Xi5TUVd4wyycj+/JQBDx/IWri6lKwvULkoennGnid vY91SsaWt85e25nL0UXjCPmCGwj06pn3TPff3pTDdRlM5RAFLyY1LRYNaBf/XxcjFTGm DFJpOavgoyML+c3pW5Pek9MisZTAbk+RThL+RBzoxfFbNZEogT2cQKNbGrpf2ahWjHxJ UQsWKSgOv2fsF26pzm9JUeiyZO8RwOvFxX5qz0nViyDImRROHS1HCA2CD8fg/i9krMNb 2JNg== X-Gm-Message-State: ALoCoQm9bqowPr991i4fOQa+IdXRRqXl83+oGastXnVYIGVlNMQTpGJ0nw26QXtRZyXofjjv4IL4 X-Received: by 10.68.87.37 with SMTP id u5mr5792380pbz.128.1414432928635; Mon, 27 Oct 2014 11:02:08 -0700 (PDT) Received: from tomh.mtv.corp.google.com ([172.18.117.126]) by mx.google.com with ESMTPSA id xf1sm11450572pbb.18.2014.10.27.11.02.07 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 27 Oct 2014 11:02:08 -0700 (PDT) From: Tom Herbert To: davem@davemloft.net, netdev@vger.kernel.org Subject: [PATCH net-next 1/2] udp: Record RPS flow in socket operations Date: Mon, 27 Oct 2014 11:01:14 -0700 Message-Id: <1414432875-23795-1-git-send-email-therbert@google.com> X-Mailer: git-send-email 2.1.0.rc2.206.gedb03e5 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add calls to sock_rps_record_flow for udp_sendmsg, udp_sendpage and udp_recvmsg. This enables RFS for connected UDP sockets. Tested: Ran netperf UDP_RR with 200 flows, with and without UDP RSS enabled Before fix: No RSS Client (connected UDP) 36.87% CPU utilization Server (unconnected UDP) 33.64% CPU utilization 256/440/687 90/95/99% latencies 727273 tps UDP RSS Client 79.59% CPU utilization Server 78.83% CPU utilization 116/159/226 90/95/99% latencies 1.60974e+06 tps After fix: No RSS Client 44.38% CPU utilization Server 50.46% CPU utilization 192/245/343 90/95/99% latencies 1.01413e+06 UDP RSS Client 79.98% CPU utilization Server 80.35% CPU utilization 113/158/230 90/95/99% latencies 1.60622e+06 tps Signed-off-by: Tom Herbert --- net/ipv4/udp.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index cd0db54..9a0d346 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -881,6 +881,8 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, struct sk_buff *skb; struct ip_options_data opt_copy; + sock_rps_record_flow(sk); + if (len > 0xFFFF) return -EMSGSIZE; @@ -1113,6 +1115,8 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset, struct udp_sock *up = udp_sk(sk); int ret; + sock_rps_record_flow(sk); + if (flags & MSG_SENDPAGE_NOTLAST) flags |= MSG_MORE; @@ -1253,6 +1257,8 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, int is_udplite = IS_UDPLITE(sk); bool slow; + sock_rps_record_flow(sk); + if (flags & MSG_ERRQUEUE) return ip_recv_error(sk, msg, len, addr_len);