>
> > static struct dp_netdev_port *dp_netdev_lookup_port(const struct
> dp_netdev *dp,
> > @@ -281,6 +281,15 @@ struct dp_netdev_actions
> *dp_netdev_flow_get_actions(
> > const struct dp_netdev_flow *);
> > static void dp_netdev_actions_free(struct dp_netdev_actions *);
> >
> > +/* Represents the PMD configuration on a cpu socket. */
> > +struct pmd_socket {
> > + struct dp_netdev *dp;
> > + struct latch exit_latch;
> > + struct pmd_thread *pmd_threads;
> > + int socket_id;
> > + int n_pmd_threads;
> > +};
> > +
> We should keep socket to core mapping in numa module rather than in
> dpif-netdev.
>
In my future patches (for per pmd cls/flowtable), i removed the pmd_socket.
I'll just move the change forward...
> I am not sure why exit latch needs to be per socket, it is global
> today, it should be ok for now, no?
>
>
I'll make the 'exit latch' per pmd thread, because, for this optimization:
- when dpdk port is deleted, if it is the last dpdk port on the socket,
all pmd threads on the socket will be removed,
- using global exit latch will cause all pmd threads removed,
> > static void *
> > pmd_thread_main(void *f_)
> > {
> > struct pmd_thread *f = f_;
> > - struct dp_netdev *dp = f->dp;
> > + struct dp_netdev *dp = f->socket->dp;
> > unsigned int lc = 0;
> > struct rxq_poll *poll_list;
> > + struct non_local_pmd_dev *dev_list;
> > unsigned int port_seq;
> > - int poll_cnt;
> > + int poll_cnt, dev_cnt;
> > int i;
> >
> > poll_cnt = 0;
> > + dev_cnt = 0;
> > poll_list = NULL;
> > + dev_list = NULL;
> >
> > - pmd_thread_setaffinity_cpu(f->id);
> > + pmd_thread_setaffinity_cpu(f->core_id);
> > reload:
> > poll_cnt = pmd_load_queues(f, &poll_list, poll_cnt);
> > + dev_cnt = pmd_get_non_local_pmd_dev(f, &dev_list, dev_cnt);
> > atomic_read(&f->change_seq, &port_seq);
> >
> > for (;;) {
> > @@ -1682,6 +1777,10 @@ reload:
> > dp_netdev_process_rxq_port(dp, poll_list[i].port,
> poll_list[i].rx);
> > }
> >
> > + for (i = 0; i < dev_cnt; i++) {
> > + netdev_dpdk_flush_non_local(dev_list[i].dev, f->core_id);
> > + }
> > +
>
> In transmit function we can flush if this is remote queue. To optimize
> remote queue check on every xmit, we can add remote flag to
> dpdk-netdev queue.
>
may i know more about the reason you want to flush for every remote tx pkt?
- is it for packet order concern?
i'm not sure how expensive it is to call the tx function? but still think
we
should batch the remote tx here,
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev