From: Rashi Agarwal <Rashi.Agarwal@mobileum.com>
To: "users@dpdk.org" <users@dpdk.org>
Subject: CPU Affinity Not Working in RHEL8 with DPDK 20.05
Date: Wed, 26 Feb 2025 04:54:51 +0000 [thread overview]
Message-ID: <DM4PR14MB4862B3C1ABF3642E28E916B18DC22@DM4PR14MB4862.namprd14.prod.outlook.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 1152 bytes --]
Hi DPDK Community,
I am facing an issue where CPU affinity is not working as expected in RHEL8 with DPDK 20.05, while it works fine in RHEL7.
Problem Statement:
* When running my program with numactl -C4,5 ./testRTE on RHEL7, the worker threads correctly bind to the assigned cores.
* However, on RHEL8, the worker threads always bind to core 1, ignoring the specified CPU set.
Environment Details:
* DPDK Version: 20.05.0
* OS: RHEL8 (Issue) | RHEL7 (Works Fine)
* CPU Affinity Tool: numactl -C
Sample Program: Attached
Observations:
* In RHEL7, worker threads correctly bind to cores specified using numactl -C.
* In RHEL8, the threads always bind to core 1, ignoring the CPU set.
* Could DPDK be overriding the CPU affinity in RHEL8?
Questions:
1. Is there any known change in CPU affinity handling between RHEL7 and RHEL8 affecting DPDK?
2. Does DPDK override thread affinity when rte_eal_init() is called?
3. Is there any workaround or EAL flag to ensure that CPU affinity is respected?
Any insights or suggestions would be greatly appreciated.
Thanks,
Rashi Agarwal.
[-- Attachment #1.2: Type: text/html, Size: 11232 bytes --]
[-- Attachment #2: dpdk_test.cpp --]
[-- Type: text/plain, Size: 2469 bytes --]
#include <iostream>
#include "stdlib.h"
#include <fstream>
#include <string>
#include "unistd.h"
#include "time.h"
#include "math.h"
#include <pthread.h>
#include <csignal>
#include <rte_common.h>
#include <rte_eal.h>
#include <rte_ring.h>
#include <rte_ring_core.h>
using namespace std;
int keepRunning=1;
void signal_handler(int signum)
{
std::cout << "\nSignal (" << signum << ") received. Exiting..." << std::endl;
keepRunning = 0;
}
void init_dpdk()
{
/* DPDK initialization */
int instId = 12;
char procName[50] = {0} ;
char filePrefix[50] = {0} ;
sprintf(procName, "ipp-dpdk-opt-%d", instId) ;
sprintf(filePrefix, "--file-prefix=ipp-inst-%d", instId) ;
int dpdk_argc = 8; char *dpdk_argv[] = { procName, "-c", "0x2", "--no-huge", filePrefix ,"-m","64" , "--log-level=eal,8"};
int ret = rte_eal_init(dpdk_argc, dpdk_argv);
if(ret < 0)
{
cout << "DPDK initialization: rte_eal_init failed with code "<< ret << endl;
return ;
}
cout << "\n\n\n";
}
void init_ring()
{
for (int i=0; i<25; i++)
{
int size = pow(2,i) ;
cout << i+1 << " " << size -1 << endl; //" "<< rte_ring_get_memsize(size) << endl ;
char name [50];
sprintf (name,"test_ring-%d",i);
rte_ring_create(name, size-1, 0, RING_F_EXACT_SZ);
}
}
static void* thread_func1(void *arg)
{
while(keepRunning)
{
printf("this is thread1\n");
sleep(100);
}
return NULL;
}
static void* thread_func2(void *arg)
{
while(keepRunning)
{
printf("this is thread2\n");
sleep(100);
}
return NULL;
}
int main() {
std::cout << "##################### Starting the test ################ " << std::endl;
struct sigaction sig_action;
sig_action.sa_handler = signal_handler;
sigemptyset(&sig_action.sa_mask);
sig_action.sa_flags = 0;
sigaction(SIGINT, &sig_action, NULL);
init_dpdk();
// worker threads initializtion
pthread_t thread_id1, thread_id2;
pthread_attr_t thread_attr;
pthread_attr_init(&thread_attr);
pthread_create(&thread_id1, &thread_attr, &thread_func1,NULL);
pthread_setname_np(thread_id1, "WorkerThread1");
pthread_create(&thread_id2, &thread_attr, &thread_func2,NULL);
pthread_setname_np(thread_id2, "WorkerThread2");
while (keepRunning) {
pause();
}
std::cout << "##################### Edning the test ################ " << std::endl;
pthread_join(thread_id1, NULL);
pthread_join(thread_id2, NULL);
return 0;
}
next reply other threads:[~2025-02-26 4:55 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-26 4:54 Rashi Agarwal [this message]
2025-02-26 10:56 ` Rajesh Kumar
2025-02-27 3:28 ` Rashi Agarwal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DM4PR14MB4862B3C1ABF3642E28E916B18DC22@DM4PR14MB4862.namprd14.prod.outlook.com \
--to=rashi.agarwal@mobileum.com \
--cc=users@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).