aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSantosh Shukla <santosh.shukla@linaro.org>2014-08-18 12:26:59 +0530
committerSantosh Shukla <sshukla@mvista.com>2014-08-18 12:52:51 +0530
commit21099651ba323b39e9743e3efbef1afe5cde31a1 (patch)
tree315d7eda4415a9c11bcc1dd16ac1cb58ecba7ef7
parent7e2310e9daa6b7b5a547005c624a333927cd29d3 (diff)
isolation: disable default odp cpuset
- Disable default odp thread cpuset. Use is-cpu-isolated.sh script to create cpuset for dplane, cplane for odp. - Use odp-on-isolated-cpu.sh script to test this application. - test script location [1] - Refer readme for instruction to use. [1] https://git.linaro.org/people/santosh.shukla/test-definitions.git/shortlog/refs/heads/isol-v2 Signed-off-by: Santosh Shukla <santosh.shukla@linaro.org>
-rw-r--r--example/isolation/odp_isolation.c5
-rw-r--r--example/isolation/readme20
-rw-r--r--platform/linux-generic/odp_linux.c12
3 files changed, 35 insertions, 2 deletions
diff --git a/example/isolation/odp_isolation.c b/example/isolation/odp_isolation.c
index 8d8fffc..1ade4c7 100644
--- a/example/isolation/odp_isolation.c
+++ b/example/isolation/odp_isolation.c
@@ -214,6 +214,11 @@ int main(int argc, char *argv[])
thr_id = odp_thread_create(0);
odp_init_local(thr_id);
+ /*
+ * create dummy dp thread and don't pin them on any core,
+ * use odp-on-isolated-cpu.sh script to define dplane cpuset
+ * and to pin, run app on them, Refer readme.
+ */
for (i=0; i<num_workers; i++) {
first_core = atoi(args.core_name[i]);
diff --git a/example/isolation/readme b/example/isolation/readme
new file mode 100644
index 0000000..d49d61a
--- /dev/null
+++ b/example/isolation/readme
@@ -0,0 +1,20 @@
+
+README on How-to run odp app on isolated core for no_hz_full kernel mode.
+
+- Disbale timer init in odp application.
+- avoid using odp's cpuset. Let odp thread launch unpinned.
+- use odp-on-isolated-cpu.sh script to pin odp dp thread to
+ dplane cpuset.
+
+- download my local test-definition repo link [1]
+- copy odp_isolation binary to /usr/local/bin
+- run ./common/scripts/odp-on-isolated-cpu.sh
+Or
+- ./common/scripts/odp-on-isolated-cpu.sh 1,2 "odp_isolation -l 1,2"
+- Above script shows isolation duration, before / after interrupt count.
+
+Known issue :
+- x86 hw generates spurious ipi lead to break no_hz_full isolation (todo).
+
+[1] https://git.linaro.org/people/santosh.shukla/test-definitions.git/shortlog/refs/heads/isol-v2
+
diff --git a/platform/linux-generic/odp_linux.c b/platform/linux-generic/odp_linux.c
index 6e2b448..7e853c7 100644
--- a/platform/linux-generic/odp_linux.c
+++ b/platform/linux-generic/odp_linux.c
@@ -22,6 +22,11 @@
#include <odp_debug.h>
+#define NO_HZ_FULL_ISOL /*
+ * don't use odp cpuset.
+ * enable this for odp isolation mode
+ */
+
typedef struct {
int thr_id;
void *(*start_routine) (void *);
@@ -49,7 +54,9 @@ void odp_linux_pthread_create(odp_linux_pthread_t *thread_tbl, int num,
int first_core, void *(*start_routine) (void *), void *arg)
{
int i;
+#ifndef NO_HZ_FULL_ISOL
cpu_set_t cpu_set;
+#endif
odp_start_args_t *start_args;
int core_count;
int cpu;
@@ -62,16 +69,17 @@ void odp_linux_pthread_create(odp_linux_pthread_t *thread_tbl, int num,
memset(thread_tbl, 0, num * sizeof(odp_linux_pthread_t));
for (i = 0; i < num; i++) {
+ cpu = (first_core + i) % core_count;
+#ifndef NO_HZ_FULL_ISOL
pthread_attr_init(&thread_tbl[i].attr);
CPU_ZERO(&cpu_set);
- cpu = (first_core + i) % core_count;
CPU_SET(cpu, &cpu_set);
pthread_attr_setaffinity_np(&thread_tbl[i].attr,
sizeof(cpu_set_t), &cpu_set);
-
+#endif
start_args = malloc(sizeof(odp_start_args_t));
memset(start_args, 0, sizeof(odp_start_args_t));
start_args->start_routine = start_routine;