Re: [net-next PATCH v3 3/5] net: Enable Tx queue selection based on Rx queues
From: "Samudrala, Sridhar" <sridhar.samudrala@intel.com>
Date: 2018-06-06 19:08:04
On 6/6/2018 11:56 AM, Willem de Bruijn wrote:
On Tue, Jun 5, 2018 at 4:38 AM, Amritha Nambiar [off-list ref] wrote:quoted
This patch adds support to pick Tx queue based on the Rx queue(s) map configuration set by the admin through the sysfs attribute for each Tx queue. If the user configuration for receive queue(s) map does not apply, then the Tx queue selection falls back to CPU(s) map based selection and finally to hashing. Signed-off-by: Amritha Nambiar <redacted> Signed-off-by: Sridhar Samudrala <sridhar.samudrala@intel.com> --- int sysctl_tcp_max_orphans __read_mostly = NR_FILE;@@ -5574,6 +5575,7 @@ void tcp_finish_connect(struct sock *sk, struct sk_buff *skb) if (skb) { icsk->icsk_af_ops->sk_rx_dst_set(sk, skb); security_inet_conn_established(sk, skb); + sk_mark_napi_id(sk, skb); }This and the call below should be in a standalone patch, as the mark changes are not rxq-xps specific. Is the additional earlier marking really required?
The additional earlier marking in tcp_finish_connect() allows a client app to do SO_INCOMING_NAPI_ID after a a connect() call to get the right queue association for a socket. The marking in tcp_conn_request() allows syn-ack to go on the right tx-queue associated with the queue on which syn is received.
I would separate out the entire rxq caching with sk_rx_queue_mapping from the refactoring of get_xps_queue. The two changes are quite independent.quoted
tcp_init_transfer(sk, BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB);@@ -6402,6 +6404,7 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops, tcp_rsk(req)->snt_isn = isn; tcp_rsk(req)->txhash = net_tx_rndhash(); tcp_openreq_init_rwin(req, sk, dst); + sk_mark_rx_queue(req_to_sk(req), skb);