On 6/6/2018 11:56 AM, Willem de Bruijn wrote:
On Tue, Jun 5, 2018 at 4:38 AM, Amritha Nambiar
<amritha.namb...@intel.com> wrote:
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 <amritha.namb...@intel.com>
Signed-off-by: Sridhar Samudrala <sridhar.samudr...@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.

         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);

Reply via email to