From: LiSong <[email protected]> There is no guarantee that the LOOP of the child proecess can be certainly big enough on any device at any time. So if set_affinity function is available, use it to bind the test processes to a single CPU rather than using the LOOP.
Signed-off-by: Song.Li <[email protected]> --- .../conformance/interfaces/sched_setparam/2-1.c | 26 +++++++++++++++---- .../conformance/interfaces/sched_setparam/2-2.c | 26 +++++++++++++++---- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-1.c b/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-1.c index c548dd4..93f6443 100644 --- a/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-1.c +++ b/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-1.c @@ -29,6 +29,7 @@ * */ +#define _GNU_SOURCE #include <sched.h> #include <stdio.h> #include <signal.h> @@ -48,6 +49,8 @@ # include <sys/pstat.h> #endif +#include <affinity.h> + #define NB_LOOP 20000000 #define NB_LOOP_CHILD 200000000 /* shall be much greater than NB_LOOP */ @@ -119,11 +122,22 @@ int main() { int *child_pid; float ratio; - nb_child = get_ncpu(); - if (nb_child == -1) { - printf("Can not get the number of CPUs of your machine.\n"); - return PTS_UNRESOLVED; - } + /* Only use a single CPU and one child process when set_affinity is availaible + It's because no matter what value of the counter is set to, + There is no guarantee that the LOOP of the child can be certainly big enough on any device at any time. + */ + int rc = set_affinity(0); + if (rc) { + nb_child = get_ncpu(); + if (nb_child == -1) { + printf("Can not get the number of CPUs of your machine.\n"); + return PTS_UNRESOLVED; + } + } + else { + nb_child = 1; + } + child_pid = malloc(nb_child); param.sched_priority = (sched_get_priority_min(SCHED_FIFO) + @@ -208,4 +222,4 @@ int main() { return PTS_UNRESOLVED; } -} \ No newline at end of file +} diff --git a/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-2.c b/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-2.c index 2b71893..c17c5b6 100644 --- a/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-2.c +++ b/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/2-2.c @@ -29,6 +29,7 @@ * */ +#define _GNU_SOURCE #include <sched.h> #include <stdio.h> #include <signal.h> @@ -48,6 +49,8 @@ # include <sys/pstat.h> #endif +#include <affinity.h> + #define NB_LOOP 20000000 #define NB_LOOP_CHILD 200000000 /* shall be much greater than NB_LOOP */ @@ -119,16 +122,27 @@ int main() { int *child_pid; float ratio; - nb_child = get_ncpu(); - if (nb_child == -1) { - printf("Can not get the number of CPUs of your machine.\n"); - return PTS_UNRESOLVED; - } + /* Only use a single CPU and one child process when set_affinity is availaible + It's because no matter what value of the counter is set to, + There is no guarantee that the LOOP of the child can be certainly big enough on any device at any time. + */ + int rc = set_affinity(0); + if (rc) { + nb_child = get_ncpu(); + if (nb_child == -1) { + printf("Can not get the number of CPUs of your machine.\n"); + return PTS_UNRESOLVED; + } + } + else { + nb_child = 1; + } child_pid = malloc(nb_child); if (child_pid == NULL) { printf("malloc failed\n"); return PTS_UNRESOLVED; } + param.sched_priority = (sched_get_priority_min(SCHED_RR) + sched_get_priority_max(SCHED_RR)) / 2; @@ -211,4 +225,4 @@ int main() { return PTS_UNRESOLVED; } -} \ No newline at end of file +} -- 1.7.5.4 ------------------------------------------------------------------------------ Write once. Port to many. Get the SDK and tools to simplify cross-platform app development. Create new or port existing apps to sell to consumers worldwide. Explore the Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join http://p.sf.net/sfu/intel-appdev _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
