[PATCH v5 v5 2/3] app: add topology aware test case
Varghese, Vipin
Vipin.Varghese at amd.com
Fri Apr 17 03:21:35 CEST 2026
[Public]
Sudhhendra and myself were able to connect over Slack. Adding his email address to the loop of reply
.
Sudhendra please check the reply posted below
> -----Original Message-----
> From: Varghese, Vipin <Vipin.Varghese at amd.com>
> Sent: Thursday, April 16, 2026 6:50 PM
> To: dev at dpdk.org; Tummala, Sivaprasad <Sivaprasad.Tummala at amd.com>
> Cc: konstantin.ananyev at huawei.com; wathsala.vithanage at arm.com;
> bruce.richardson at intel.com; viktorin at cesnet.cz; mb at smartsharesystems.com
> Subject: RE: [PATCH v5 v5 2/3] app: add topology aware test case
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> [Public]
>
> <snipped>
> >
> > Unable to find `Sudheendra Sampath` in dpdk mailing list and Slack.
> > Can you please connect with me email address or slack.
>
> Hi Sudheendra,
>
> Thank you for the suggestion and welcome to dpdk review too.
>
> My initial code design were
>
> ```
> #ifdef RTE_LIBHWLOC_PROBE
> +static int
> +get_same_domains(struct lcore_pair *lcp, uint32_t domain_sel) {
> + if (rte_topo_get_domain_count(domain_sel) == 0)
> + return 1;
> +
> + unsigned int id1 = RTE_MAX_LCORE, id2 = RTE_MAX_LCORE;
> + unsigned int domain = 0;
> +
> + RTE_TOPO_FOREACH_DOMAIN(domain, domain_sel) {
> + if ((id1 != RTE_MAX_LCORE) && (id2 != RTE_MAX_LCORE))
> + break;
> +
> + if (rte_topo_get_lcore_count_from_domain(domain_sel, domain) < 2)
> + continue;
> +
> + id1 = rte_topo_get_nth_lcore_from_domain(domain, 0, 0, domain_sel);
> + id2 = rte_topo_get_nth_lcore_from_domain(domain, 1, 0, domain_sel);
> + }
> +
> + if ((id1 == RTE_MAX_LCORE) || (id2 == RTE_MAX_LCORE))
> + return 2;
> +
> + if (id1 == id2)
> + return 3;
> +
> + lcp->c1 = id1;
> + lcp->c2 = id2;
> +
> + return 0;
> +}
> +
> +static int
> +get_two_domains(struct lcore_pair *lcp, uint32_t domain_sel) {
> + if (rte_topo_get_domain_count(domain_sel) < 2)
> + return 1;
> +
> + unsigned int id1 = RTE_MAX_LCORE, id2 = RTE_MAX_LCORE;
> + unsigned int domain = 0;
> +
> + RTE_TOPO_FOREACH_DOMAIN(domain, domain_sel) {
> + if ((id1 != RTE_MAX_LCORE) && (id2 != RTE_MAX_LCORE))
> + break;
> +
> + if (rte_topo_get_lcore_count_from_domain(domain_sel, domain) == 0)
> + continue;
> +
> + if (id1 == RTE_MAX_LCORE) {
> + id1 = rte_topo_get_nth_lcore_from_domain(domain,
> + 0, 0, domain_sel);
> + continue;
> + }
> + if (id2 == RTE_MAX_LCORE) {
> + id2 = rte_topo_get_nth_lcore_from_domain(domain,
> + 0, 0, domain_sel);
> + continue;
> + }
> + }
> +
> + if ((id1 == RTE_MAX_LCORE) || (id2 == RTE_MAX_LCORE))
> + return 2;
> +
> + if (id1 == id2)
> + return 3;
> +
> + lcp->c1 = id1;
> + lcp->c2 = id2;
> +
> + return 0;
> +}
> +#endif
> +
> /* Get cycle counts for dequeuing from an empty ring. Should be 2 or 3 cycles */
> static void test_empty_dequeue(struct rte_ring *r, const int esize, @@ -488,6
> +574,33 @@ test_ring_perf_esize_run_on_two_cores(
> if (run_on_core_pair(&cores, param1, param2) < 0)
> return -1;
> }
> +#ifdef RTE_LIBHWLOC_PROBE
> + if (rte_lcore_count() > 2) {
> + for (uint32_t d = 0; d < RTE_DIM(domain_types); d++) {
> + if (get_same_domains(&cores, domain_types[d]) == 0) {
> + printf("\n### Testing using same %s domain nodes ###\n",
> + (domain_types[d] == RTE_TOPO_DOMAIN_NUMA) ?
> "NUMA" :
> + (domain_types[d] == RTE_TOPO_DOMAIN_L4) ? "L4" :
> + (domain_types[d] == RTE_TOPO_DOMAIN_L3) ? "L3" :
> + (domain_types[d] == RTE_TOPO_DOMAIN_L2) ? "L2" :
> + (domain_types[d] == RTE_TOPO_DOMAIN_L1) ? "L1" :
> NULL);
> + if (run_on_core_pair(&cores, param1, param2) < 0)
> + return -1;
> + }
> +
> + if (get_two_domains(&cores, domain_types[d]) == 0) {
> + printf("\n### Testing using two %s domain nodes ###\n",
> + (domain_types[d] == RTE_TOPO_DOMAIN_NUMA) ?
> "NUMA" :
> + (domain_types[d] == RTE_TOPO_DOMAIN_L4) ? "L4" :
> + (domain_types[d] == RTE_TOPO_DOMAIN_L3) ? "L3" :
> + (domain_types[d] == RTE_TOPO_DOMAIN_L2) ? "L2" :
> + (domain_types[d] == RTE_TOPO_DOMAIN_L1) ? "L1" :
> NULL);
> + if (run_on_core_pair(&cores, param1, param2) < 0)
> + return -1;
> + }
> + }
> + }
> +#endif
> return 0;
> }
>
> ```
>
> Since it breaks the current function test format, I went ahead with current approach.
> I will re-introduce the domain iterator design in v6 for you. Please try it out and let me
> know.
>
> Regards
> Vipin Varghese
More information about the dev
mailing list