> > > 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 dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev