On Thu, Oct 8, 2015 at 7:35 PM, Alexei Starovoitov <a...@plumgrid.com> wrote: > On 10/8/15 5:50 PM, Devon H. O'Dell wrote: >>> >>> with the amount of skb_sender_cpu_clear() all over the code base >>> >I wonder whether there is a better solution to all of these. >> >> I think there is. We found that splitting the union of sender_cpu and >> napi_id solved the issue for us. In general, I think this is an OK >> solution as long as the following hold: >> >> * skbs are always allocated via kzalloc >> * out -> out cloned skbs are always cloned on the same CPU >> * an extra four bytes in skbuff isn't a bad thing > > > I'm pretty sure extending sk_buff for this is not acceptable.
That's unfortunate. > I was thinking may be we can use sign bit to distinguish between > napi_id and sender_cpu. > Like: > if ((int)skb->sender_cpu >= 0) > skb->sender_cpu = - (raw_smp_processor_id() + 1); > and inside get_xps_queue() use it only if it's negative. I like the idea, but it seems unnecessarily magical. What about using a bitfield? Then there's just an option bit that is either OPTION_NAPI_ID or OPTION_SENDER_CPU. Then the check to set sender_cpu in netdev_pick_tx becomes if (skb->sender_napi_option == OPTION_NAPI_ID || skb->sender_cpu == 0) ... > Then we can remove skb_sender_cpu_clear() from everywhere. > Adding a check to napi_hash_add() to make sure that napi_id is not > negative is probably ok too. We could change this to check that sender_napi_option would be OPTION_NAPI_ID with the bitfield idea. My names are probably bad, but I think the idea is less magical (and is effectively the same thing you are proposing). > Thoughts? --dho -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html