tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Google summer code 2016 project ideas



Hi Christos,

   Thanks for sharing the patch and the advise for the project!
I will study your patch carefully and use it to test the system.



Thanks, Christos.

2016-03-06 17:02 GMT-08:00 Christos Zoulas <christos%astron.com@localhost>:

> In article <CA+SXE9vg=p9vF=
> SoZuYU_1rzUu9LyJhMeff2qmWRm9e05d-LSA%mail.gmail.com@localhost>,
> Charles Cui  <charles.cui1984%gmail.com@localhost> wrote:
> >-=-=-=-=-=-
> >
> >One question about porting posix test suite onto netbsd.
> >Right now the suite can execute on Linux and mac OS(I have not tested
> >others),
> >there should be some fixes in Makefile to let it run on netbsd because it
> >cannot be compiled now.
> >My question is the output of this suite on Linux (and macOS) reports PASS
> >for some tests and FAILED for some others.
> >My question about the porting is after changing the makefile to make it
> run
> >on netbsd, shall we change the kernel to make all failed tests pass?
> >Or making all tests execute is the goal and we do not care about the
> result?
>
> For now just build and install gnu make from pkgsrc and use that to build.
> Once we make progress we can think about making the build more portable.
>
> Here are some patches that I've added...
>
> christos
>
> diff --git a/LDFLAGS b/LDFLAGS
> index aa701d9..81b7599 100644
> --- a/LDFLAGS
> +++ b/LDFLAGS
> @@ -14,3 +14,4 @@
>  # allow for the NPTL-specific compilation (used in some test cases)
>  # Note: this sometimes require the package nptl-devel.*.rpm to be
> installed.
>  #-I /usr/include/nptl -L /usr/lib/nptl -D_XOPEN_SOURCE=600 -lpthread -lrt
> -lm
> +-lpthread -lrt -lm
> diff --git a/conformance/interfaces/aio_write/7-1.c
> b/conformance/interfaces/aio_write/7-1.c
> index 8f13f30..3b7f819 100644
> --- a/conformance/interfaces/aio_write/7-1.c
> +++ b/conformance/interfaces/aio_write/7-1.c
> @@ -84,6 +84,8 @@ int main()
>         for (i=0; i<last_req-1; i++)
>         {
>                 err = aio_error(&aiocbs[i]);
> +               if (err != 0)
> +                   printf(TNAME " aio_error got %d\n", err);
>                 ret = aio_return(&aiocbs[i]);
>
>         }
> diff --git a/conformance/interfaces/lio_listio/1-1.c
> b/conformance/interfaces/lio_listio/1-1.c
> index c86e318..23ba2b8 100644
> --- a/conformance/interfaces/lio_listio/1-1.c
> +++ b/conformance/interfaces/lio_listio/1-1.c
> @@ -23,6 +23,7 @@
>
>  #define _XOPEN_SOURCE 600
>  #include <stdio.h>
> +#include <signal.h>
>  #include <unistd.h>
>  #include <string.h>
>  #include <errno.h>
> diff --git a/conformance/interfaces/mmap/11-2.c
> b/conformance/interfaces/mmap/11-2.c
> index 4ea16be..a284392 100644
> --- a/conformance/interfaces/mmap/11-2.c
> +++ b/conformance/interfaces/mmap/11-2.c
> @@ -21,6 +21,7 @@
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <unistd.h>
> +#include <signal.h>
>  #include <sys/mman.h>
>  #include <sys/types.h>
>  #include <sys/stat.h>
> diff --git a/conformance/interfaces/mmap/11-3.c
> b/conformance/interfaces/mmap/11-3.c
> index 7b3d26f..c88d39b 100644
> --- a/conformance/interfaces/mmap/11-3.c
> +++ b/conformance/interfaces/mmap/11-3.c
> @@ -20,6 +20,7 @@
>  #include <pthread.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> +#include <signal.h>
>  #include <unistd.h>
>  #include <sys/mman.h>
>  #include <sys/types.h>
> diff --git a/conformance/interfaces/mmap/27-1.c
> b/conformance/interfaces/mmap/27-1.c
> index 1a8e1d3..344db9c 100644
> --- a/conformance/interfaces/mmap/27-1.c
> +++ b/conformance/interfaces/mmap/27-1.c
> @@ -18,6 +18,7 @@
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <unistd.h>
> +#include <signal.h>
>  #include <sys/mman.h>
>  #include <sys/types.h>
>  #include <sys/stat.h>
> @@ -62,6 +63,12 @@ int main()
>  #endif
>
>    data = (char *) malloc(total_size);
> +  if (data == NULL)
> +  {
> +    printf(TNAME "Error in malloc(): %s\n",
> +            strerror(errno));
> +    exit(PTS_UNRESOLVED);
> +  }
>    snprintf(tmpfname, sizeof(tmpfname), "/tmp/pts_mmap_27_1_%d",
>             getpid());
>    unlink(tmpfname);
> diff --git a/conformance/interfaces/mmap/6-1.c
> b/conformance/interfaces/mmap/6-1.c
> index 7857f5c..e03dfbe 100644
> --- a/conformance/interfaces/mmap/6-1.c
> +++ b/conformance/interfaces/mmap/6-1.c
> @@ -26,6 +26,7 @@
>  #include <pthread.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> +#include <signal.h>
>  #include <unistd.h>
>  #include <sys/mman.h>
>  #include <sys/types.h>
> diff --git a/conformance/interfaces/mmap/6-2.c
> b/conformance/interfaces/mmap/6-2.c
> index a37f679..5d9d51b 100644
> --- a/conformance/interfaces/mmap/6-2.c
> +++ b/conformance/interfaces/mmap/6-2.c
> @@ -29,6 +29,7 @@
>  #include <pthread.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> +#include <signal.h>
>  #include <unistd.h>
>  #include <sys/mman.h>
>  #include <sys/types.h>
> diff --git a/conformance/interfaces/mmap/6-3.c
> b/conformance/interfaces/mmap/6-3.c
> index c0ab5db..bc66ad1 100644
> --- a/conformance/interfaces/mmap/6-3.c
> +++ b/conformance/interfaces/mmap/6-3.c
> @@ -27,6 +27,7 @@
>  #include <pthread.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> +#include <signal.h>
>  #include <unistd.h>
>  #include <sys/mman.h>
>  #include <sys/types.h>
> diff --git a/conformance/interfaces/munmap/1-1.c
> b/conformance/interfaces/munmap/1-1.c
> index 35f0eb4..328119a 100644
> --- a/conformance/interfaces/munmap/1-1.c
> +++ b/conformance/interfaces/munmap/1-1.c
> @@ -28,6 +28,7 @@
>  #include <sys/stat.h>
>  #include <sys/wait.h>
>  #include <fcntl.h>
> +#include <signal.h>
>  #include <string.h>
>  #include <errno.h>
>  #include "posixtest.h"
> diff --git a/conformance/interfaces/munmap/1-2.c
> b/conformance/interfaces/munmap/1-2.c
> index 3d4cc3a..77560b9 100644
> --- a/conformance/interfaces/munmap/1-2.c
> +++ b/conformance/interfaces/munmap/1-2.c
> @@ -23,6 +23,7 @@
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <unistd.h>
> +#include <signal.h>
>  #include <sys/mman.h>
>  #include <sys/types.h>
>  #include <sys/stat.h>
> diff --git a/conformance/interfaces/sched_yield/1-1.c
> b/conformance/interfaces/sched_yield/1-1.c
> index 7437e0a..670abef 100644
> --- a/conformance/interfaces/sched_yield/1-1.c
> +++ b/conformance/interfaces/sched_yield/1-1.c
> @@ -19,11 +19,16 @@
>   *  4. Launch a thread which call sched_yield() and check that the
> counter has
>   *     changed since the call.
>   */
> -#define LINUX
> -
> -#ifdef LINUX
> +#ifdef __linux__
>  #define _GNU_SOURCE
>  #endif
> +#ifdef __NetBSD__
> +#define _NETBSD_SOURCE
> +#endif
> +
> +#include <sys/types.h>
> +#include <sys/param.h>
> +#include <sys/wait.h>
>
>  #include <sched.h>
>  #include <stdio.h>
> @@ -31,18 +36,16 @@
>  #include <stdlib.h>
>  #include <signal.h>
>  #include <pthread.h>
> +#include <inttypes.h>
> +#include <stdint.h>
>  #include <errno.h>
> -#include <sys/wait.h>
>  #include "posixtest.h"
>
>  #ifdef BSD
> -# include <sys/types.h>
> -# include <sys/param.h>
>  # include <sys/sysctl.h>
>  #endif
>
>  #ifdef HPUX
> -# include <sys/param.h>
>  # include <sys/pstat.h>
>  #endif
>
> @@ -78,10 +81,10 @@ int get_ncpu() {
>         return ncpu;
>  }
>
> -#ifdef LINUX
>  int set_process_affinity(int cpu)
>  {
>         int retval = -1;
> +#if defined(CPU_ZERO)
>         cpu_set_t cpu_mask;
>
>         CPU_ZERO(&cpu_mask);
> @@ -91,12 +94,23 @@ int set_process_affinity(int cpu)
>                 fprintf (stderr, "Wrong cpu id: %d\n", cpu);
>                 return -1;
>         }
> -
> -//#ifndef P2_SCHED_SETAFFINITY
>         retval = sched_setaffinity(0, sizeof(cpu_mask), &cpu_mask);
> -//#else
> -//     retval = sched_setaffinity(0, &cpu_mask);
> -//#endif
> +#elif defined(cpuset_create)
> +       cpuset_t *cpu_mask = cpuset_create();
> +
> +       cpuset_zero(cpu_mask);
> +       if (cpu >= 0 && cpu <= cpuset_size(cpu_mask)) {
> +               cpuset_set(cpu, cpu_mask);
> +       } else {
> +               fprintf (stderr, "Wrong cpu id: %d\n", cpu);
> +               return -1;
> +       }
> +       retval = _sched_setaffinity(0, 0, cpuset_size(cpu_mask), cpu_mask);
> +       cpuset_destroy(cpu_mask);
> +#else
> +       #error "no cpuset"
> +#endif
> +
>         if (retval == -1)
>         perror("Error at sched_setaffinity()");
>
> @@ -106,6 +120,7 @@ int set_process_affinity(int cpu)
>  int set_thread_affinity(int cpu)
>  {
>         int retval = -1;
> +#if defined(CPU_ZERO)
>         cpu_set_t cpu_mask;
>
>         CPU_ZERO(&cpu_mask);
> @@ -115,26 +130,34 @@ int set_thread_affinity(int cpu)
>                 fprintf (stderr, "Wrong cpu id: %d\n", cpu);
>                 return -1;
>         }
> -//#ifndef P2_PTHREAD_SETAFFINITY
>         retval = pthread_setaffinity_np(pthread_self(),
>                         sizeof(cpu_mask), &cpu_mask);
> -//#else
> -//     retval = pthread_setaffinity_np(pthread_self(), &cpu_mask);
> -//#endif
> +#elif defined(cpuset_create)
> +       cpuset_t *cpu_mask = cpuset_create();
> +
> +       cpuset_zero(cpu_mask);
> +       if (cpu >= 0 && cpu <= cpuset_size(cpu_mask)) {
> +               cpuset_set(cpu, cpu_mask);
> +       } else {
> +               fprintf (stderr, "Wrong cpu id: %d\n", cpu);
> +               return -1;
> +       }
> +       retval = pthread_setaffinity_np(0, cpuset_size(cpu_mask),
> cpu_mask);
> +       cpuset_destroy(cpu_mask);
> +#else
> +       #error "no cpuset"
> +#endif
>          if (retval != 0)
>         fprintf (stderr, "Error at pthread_setaffinity_np():\n");
>         return retval;
>  }
>
> -#endif
>
>  void * runner(void * arg) {
>         int i=0, nc;
>         long result = 0;
> -#ifdef LINUX
>          set_thread_affinity(*(int *)arg);
> -        fprintf(stderr, "%ld bind to cpu: %d\n", pthread_self(),
> *(int*)arg);
> -#endif
> +        fprintf(stderr, "%jd bind to cpu: %d\n",
> (intmax_t)pthread_self(), *(int*)arg);
>
>         for(;i<LOOP;i++){
>                 nc = nb_call;
> @@ -154,10 +177,8 @@ void * runner(void * arg) {
>  }
>
>  void * busy_thread(void *arg){
> -#ifdef LINUX
>          set_thread_affinity(*(int *)arg);
> -        fprintf(stderr, "%ld bind to cpu: %d\n", pthread_self(),
> *(int*)arg);
> -#endif
> +        fprintf(stderr, "%jd bind to cpu: %d\n",
> (intmax_t)pthread_self(), *(int*)arg);
>          while(1){
>                  nb_call++;
>                 sched_yield();
> @@ -170,11 +191,9 @@ void * busy_thread(void *arg){
>  void buzy_process(int cpu){
>          struct sched_param param;
>
> -#ifdef LINUX
>          /* Bind to a processor */
>          set_process_affinity(cpu);
>          fprintf(stderr, "%d bind to cpu: %d\n", getpid(), cpu);
> -#endif
>          param.sched_priority = sched_get_priority_max(SCHED_FIFO);
>          if(sched_setscheduler(getpid(), SCHED_FIFO, &param) != 0) {
>                  perror("An error occurs when calling sched_setparam()");
> diff --git a/run_tests b/run_tests
> index 1e06b9e..e5b6318 100755
> --- a/run_tests
> +++ b/run_tests
> @@ -23,8 +23,8 @@ EOF
>  runtests()
>  {
>         for test in `ls -d $1`; do
> -               POSIX_TARGET=$test make build-tests
> -               POSIX_TARGET=$test make run-tests
> +               POSIX_TARGET=$test gmake build-tests
> +               POSIX_TARGET=$test gmake run-tests
>         done
>  }
>
> diff --git a/stress/mqueues/Makefile b/stress/mqueues/Makefile
> index 49e8e4a..2ca58dd 100644
> --- a/stress/mqueues/Makefile
> +++ b/stress/mqueues/Makefile
> @@ -4,7 +4,8 @@ ifndef POSIX_DIR_LIB
>  endif
>
>  INCLUDE = -I../../include
> -LIB=-lmqueue
> +#LIB=-lmqueue
> +LIB=-lrt
>
>  CC=gcc
>  CFLAGS=-Wall -O2 -g -I$(POSIX_DIR_INC) -L$(POSIX_DIR_LIB) -lpthread
> diff --git a/stress/mqueues/run.sh b/stress/mqueues/run.sh
> index 37f34d8..47c2cf6 100755
> --- a/stress/mqueues/run.sh
> +++ b/stress/mqueues/run.sh
> @@ -11,22 +11,24 @@
>  RunTest()
>  {
>         echo "TEST: " $1 $2
> -       TOTAL=$TOTAL+1
> +       TOTAL=$((TOTAL+1))
>         ./$1 $2
> -       if [ $? == 0 ]; then
> -               PASS=$PASS+1
> -               echo -ne "\t\t\t***TEST PASSED***\n\n"
> +       if [ $? = 0 ]; then
> +               PASS=$((PASS+1))
> +               echo "                  ***TEST PASSED***"
> +               echo
>         else
> -               FAIL=$FAIL+1
> -               echo -ne "\t\t\t***TEST FAILED***\n\n"
> +               FAIL=$((FAIL+1))
> +               echo "                  ***TEST FAILED***"
> +               echo
>         fi
>  }
>
>  # Main program
>
> -declare -i TOTAL=0
> -declare -i PASS=0
> -declare -i FAIL=0
> +TOTAL=0
> +PASS=0
> +FAIL=0
>
>  # Add lists of tests to these variables for execution
>  TESTS="multi_send_rev_1.test multi_send_rev_2.test"
> @@ -39,11 +41,11 @@ RunTest multi_send_rev_2.test 100
>
>
>  echo
> -echo -ne "\t\t****************\n"
> -echo -ne "\t\t* TOTAL:  " $TOTAL "\n"
> -echo -ne "\t\t* PASSED: " $PASS "\n"
> -echo -ne "\t\t* FAILED: " $FAIL "\n"
> -echo -ne "\t\t****************\n"
> +echo "         ****************"
> +echo "         * TOTAL:  " $TOTAL
> +echo "         * PASSED: " $PASS
> +echo "         * FAILED: " $FAIL
> +echo "         ****************"
>
>  exit 0
>
> diff --git a/stress/semaphores/Makefile b/stress/semaphores/Makefile
> index 387b7ff..113a382 100644
> --- a/stress/semaphores/Makefile
> +++ b/stress/semaphores/Makefile
> @@ -3,7 +3,7 @@ ifndef POSIX_DIR_LIB
>  endif
>
>  INCLUDE = -I../../include
> -LIB=-lposix1b
> +#LIB=-lposix1b
>
>  CC=gcc
>  CFLAGS=-Wall -O2 -g -I$(POSIX_DIR_INC) -L$(POSIX_DIR_LIB)
> diff --git a/stress/semaphores/run.sh b/stress/semaphores/run.sh
> index 8812b56..42fa5ae 100755
> --- a/stress/semaphores/run.sh
> +++ b/stress/semaphores/run.sh
> @@ -11,22 +11,24 @@
>  RunTest()
>  {
>         echo "TEST: " $1 $2
> -       TOTAL=$TOTAL+1
> +       TOTAL=$((TOTAL+1))
>         ./$1 $2
> -       if [ $? == 0 ]; then
> -               PASS=$PASS+1
> -               echo -ne "\t\t\t***TEST PASSED***\n\n"
> +       if [ $? = 0 ]; then
> +               PASS=$((PASS+1))
> +               echo "                  ***TEST PASSED***"
> +               echo
>         else
> -               FAIL=$FAIL+1
> -               echo -ne "\t\t\t***TEST FAILED***\n\n"
> +               FAIL=$((FAIL+1))
> +               echo "                  ***TEST FAILED***"
> +               echo
>         fi
>  }
>
>  # Main program
>
> -declare -i TOTAL=0
> -declare -i PASS=0
> -declare -i FAIL=0
> +TOTAL=0
> +PASS=0
> +FAIL=0
>
>  # Add lists of tests to these variables for execution
>  TESTS="multi_con_pro.test"
> @@ -37,11 +39,11 @@ echo "=========================================="
>  RunTest $TESTS 100
>
>  echo
> -echo -ne "\t\t****************\n"
> -echo -ne "\t\t* TOTAL:  " $TOTAL "\n"
> -echo -ne "\t\t* PASSED: " $PASS "\n"
> -echo -ne "\t\t* FAILED: " $FAIL "\n"
> -echo -ne "\t\t****************\n"
> +echo "         ****************"
> +echo "         * TOTAL:  " $TOTAL
> +echo "         * PASSED: " $PASS
> +echo "         * FAILED: " $FAIL
> +echo "         ****************"
>
>  exit 0
>
> diff --git a/stress/threads/fork/do-plot b/stress/threads/fork/do-plot
> index 3789b46..08797f6 100755
> --- a/stress/threads/fork/do-plot
> +++ b/stress/threads/fork/do-plot
> @@ -15,12 +15,12 @@
>  FILE=$1
>  TMP=$(mktemp -d)
>
> -function clean_up
> +clean_up()
>  {
>      rm -rf $TMP
>  }
>
> -function error
> +error()
>  {
>      cat 1>&2
>      clean_up
> diff --git a/stress/threads/fork/s-c1.c b/stress/threads/fork/s-c1.c
> index ba257fd..668d899 100644
> --- a/stress/threads/fork/s-c1.c
> +++ b/stress/threads/fork/s-c1.c
> @@ -130,7 +130,7 @@ int main ( int argc, char *argv[] )
>         mes_t sentinel;
>         mes_t *m_cur, *m_tmp;
>
> -       long CHILD_MAX = sysconf( _SC_CHILD_MAX );
> +       long MY_CHILD_MAX = sysconf( _SC_CHILD_MAX );
>         long my_max = 1000 * SCALABILITY_FACTOR ;
>
>         /* Initialize the measure list */
> @@ -140,8 +140,8 @@ int main ( int argc, char *argv[] )
>         /* Initialize output routine */
>         output_init();
>
> -       if ( CHILD_MAX > 0 )
> -               my_max = CHILD_MAX;
> +       if ( MY_CHILD_MAX > 0 )
> +               my_max = MY_CHILD_MAX;
>
>         pr = ( pid_t * ) calloc( 1 + my_max, sizeof( pid_t ) );
>
> @@ -151,7 +151,7 @@ int main ( int argc, char *argv[] )
>         }
>
>  #if VERBOSE > 1
> -       output( "CHILD_MAX: %d\n", CHILD_MAX );
> +       output( "CHILD_MAX: %d\n", MY_CHILD_MAX );
>
>  #endif
>
> @@ -267,12 +267,12 @@ int main ( int argc, char *argv[] )
>                 /* Parent */
>                 nprocesses++;
>
> -               /* FAILED if nprocesses > CHILD_MAX */
> +               /* FAILED if nprocesses > MY_CHILD_MAX */
>                 if ( nprocesses > my_max )
>                 {
>                         errno = 0;
>
> -                       if ( CHILD_MAX > 0 )
> +                       if ( MY_CHILD_MAX > 0 )
>                         {
>  #if VERBOSE > 0
>                                 output( "WARNING! We were able to create
> more than CHILD_MAX processes\n" );
>
>


Home | Main Index | Thread Index | Old Index