[ovs-dev] [PATCH v2 18/19] dpif-netdev: Centralized threads and queues handling code.
Daniele Di Proietto
diproiettod at vmware.com
Tue Dec 6 23:59:53 UTC 2016
On 06/12/2016 04:48, "Ilya Maximets" <i.maximets at samsung.com> wrote:
>On 03.12.2016 05:14, Daniele Di Proietto wrote:
>> +/* Assign pmds to queues. If 'pinned' is true, assign pmds to pinned
>> + * queues and marks the pmds as isolated. Otherwise, assign non isolated
>> + * pmds to unpinned queues.
>> + *
>> + * The function doesn't touch the pmd threads, it just stores the assignment
>> + * in the 'pmd' member of each rxq. */
>> +static void
>> +rxq_scheduling(struct dp_netdev *dp, bool pinned) OVS_REQUIRES(dp->port_mutex)
>> +{
>> + struct dp_netdev_port *port;
>> + struct rr_numa_list rr;
>> +
>> + rr_numa_list_populate(dp, &rr);
>> +
>> + HMAP_FOR_EACH(port, node, &dp->ports) {
>> + struct rr_numa *numa;
>> + int numa_id;
>> +
>> + if (!netdev_is_pmd(port->netdev)) {
>> + continue;
>> + }
>> +
>> + numa_id = netdev_get_numa_id(port->netdev);
>> + numa = rr_numa_list_lookup(&rr, numa_id);
>> +
>> + for (int qid = 0; qid < port->n_rxq; qid++) {
>> + struct dp_netdev_rxq *q = &port->rxqs[qid];
>> +
>> + if (pinned && q->core_id != RXQ_CORE_UNPINNED) {
>> + struct dp_netdev_pmd_thread *pmd;
>> +
>> + pmd = dp_netdev_get_pmd(dp, q->core_id);
>> + if (!pmd) {
>> + VLOG_WARN("There is no PMD thread on core %d. Queue "
>> + "%d on port \'%s\' will not be polled.",
>> + q->core_id, qid, netdev_get_name(port->netdev));
>> + } else {
>> + q->pmd = pmd;
>> + pmd->isolated = true;
>> + dp_netdev_pmd_unref(pmd);
>> + }
>> + } else if (!pinned && q->core_id == RXQ_CORE_UNPINNED) {
>> + if (!numa) {
>> + VLOG_WARN("There's no available (non isolated) pmd thread"
>> + "on numa node %d. Queue %d on port \'%s\' will"
>> + "not be polled.",
>
>Spaces lost while splitting the string.
Fixed, thanks
>
>> + numa_id, qid, netdev_get_name(port->netdev));
>> + } else {
>> + q->pmd = rr_numa_get_pmd(numa);
>> + }
>> + }
>> + }
>> + }
>> +
More information about the dev
mailing list