diff options
author | Santosh Shukla <santosh.shukla@linaro.org> | 2014-08-18 12:26:59 +0530 |
---|---|---|
committer | Santosh Shukla <sshukla@mvista.com> | 2014-08-18 12:52:51 +0530 |
commit | 21099651ba323b39e9743e3efbef1afe5cde31a1 (patch) | |
tree | 315d7eda4415a9c11bcc1dd16ac1cb58ecba7ef7 | |
parent | 7e2310e9daa6b7b5a547005c624a333927cd29d3 (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.c | 5 | ||||
-rw-r--r-- | example/isolation/readme | 20 | ||||
-rw-r--r-- | platform/linux-generic/odp_linux.c | 12 |
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; |