Re: [Gems-users] Trying to run multi-program


Date: Tue, 4 May 2010 11:35:35 -0500
From: sparsh mittal ISU <sparsh@xxxxxxxxxxx>
Subject: Re: [Gems-users] Trying to run multi-program
Hello
I have one issue regarding this. As I pointed out earlier, the utilization of CPU remains 50% for both the processes and the status of one process is shown as 'run' and that of another process as 'cpu0'. e.g. If I have app1 and app2 benchmarks, then
prstat -a has the output:
PID STATE     PRI                 CPU                      PROCESS
319    cpu0       0                     50%                      app1
320    run          0                     49%                      app2
322    cpu1       58                    0.3%                       prstat

Moreover, when I issue, ruby0.dump-stats, the miss per thousand instruction and CPI of two cores are completely different. It indicates, that perhaps, both the processes are running on the same processor. Also the prstat command itself executes on one processor and has very high priority.
I tried to see the output of processor_bind and it return 0 in both the cases. As the manual of processor_bind says, "Upon successful completion, 0 is returned. "
Would Javier or Dan or someone else give some suggestion?
Thanks a lot for your help.
Sparsh

On Tue, Apr 13, 2010 at 4:26 PM, Javier Merino <merinocj@xxxxxxxxx> wrote:
I usually spawn the processes and then processor_bind() them. Like:

#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <sys/processor.h>
#include <sys/procset.h>

static void exec_and_bind(char **argv, int proc_num) {
 pid_t child_pid = fork();

 if (child_pid)
   processor_bind(P_PID, child_pid, proc_num, NULL);
 else
   execv(argv[0], argv);
}

int main(void) {
 char *b1[3];
 char *b2[4];

 b1[0] = strdup("/path/to/bench1");
 b1[1] = strdup("arg1");
 b1[2] = NULL;

 b2[0] = strdup("/path/to/benchmark2");
 b2[1] = strdup("arg1");
 b2[2] = strdup("arg2");
 b2[3] = NULL;

 exec_and_bind(b1, 0);
 exec_and_bind(b2, 1);

 return 0;
}


Hope this helps,
Javi

Dan Gibson wrote:
> It takes a brilliant man to detect typos.
>
> I'm not sure that processor_bind() can be used by a non-parent process
> -- try having each process processor_bind() itself.
>
> Also, check the return codes of processor_bind() to see if it is
> successful or not.
>
> Regards,
> Dan
>
> On Tue, Apr 13, 2010 at 3:05 PM, sparsh mittal ISU <sparsh@xxxxxxxxxxx
> <mailto:sparsh@xxxxxxxxxxx>> wrote:
>
>     Thanks for the remark. Yes,that was a typo. (you are really
>     brilliant Dan). I corrected it and tried again. However the output
>     of prstat -a is
>     PID state cpu process
>     316 cpu0 50% app1
>     317 run    50% app2
>     324 cpu1 0.1% prstat
>
>     Thus, on cpu1, prstat is running, so, that may be the reason that
>     app2 is put on the run queue. The man prstat shows that cpu
>     utilization shows: "The percentage of recent CPU time used by the
>     process."  That means 50% of  time of  cpu0 is being used by app1.
>     But why not 100%?
>
>     Thanks
>     Sparsh
>     On Tue, Apr 13, 2010 at 2:15 PM, Dan Gibson <degibson@xxxxxxxx
>     <mailto:degibson@xxxxxxxx>> wrote:
>
>         It looks like you are binding both to processor 0. Was that a typo?
>
>
>         On Tue, Apr 13, 2010 at 2:13 PM, sparsh mittal ISU
>         <sparsh@xxxxxxxxxxx <mailto:sparsh@xxxxxxxxxxx>> wrote:
>
>             Hello
>             Thanks for the responses.
>             I think the number of processors should be power of two. So,
>             if I try to use processor_bind, then I have tried the
>             following program.
>
>             #include<sys/types.h>
>             #include <sys/processor.h>
>             #include <sys/procset.h>
>
>             int main()
>             {
>             processor_bind(272, 316, 0,NULL);
>             processor_bind(272, 317, 0, NULL);
>             return 0;
>             }
>
>             Here 316 and 317 are the PIDs of two benchmarks and 272 is
>             the PPID, as shown by command ps -el.
>             So, I compiled the program, by
>             gcc process.c -o procExe
>
>             and then I execute it
>             ./procExe
>
>             Is that all? I still see the CPU utilizations to be around
>             50% and never two processes are simultaneously running.
>             Thanks
>             Sparsh
>
>
>             On Tue, Apr 13, 2010 at 1:33 PM, Dan Gibson
>             <degibson@xxxxxxxx <mailto:degibson@xxxxxxxx>> wrote:
>
>                 I don't know the details, but somehow psrset_bind is
>                 stronger than processor_bind, though the latter allows
>                 'binding' to processor zero. I would call processor_bind().
>
>                 Regards,
>                 Dan
>
>                 2010/4/13 Javi Merino <merinocj@xxxxxxxxx
>                 <mailto:merinocj@xxxxxxxxx>>
>
>                     Dan Gibson wrote:
>                     > >From man psrset:
>                     > The default processor set (0) always exists and
>                     may not be destroyed.
>                     > All processes and processors at system init time
>                     start out in the
>                     > system default processor set. For this reason
>                     processor 0 may never be
>                     > removed from the default group. (Hence this
>                     feature is of no value on
>                     > a single processor system.)
>                     >
>                     > Hence, in order to have two bound processes, you
>                     need at least three
>                     > processors. What you have probably done is
>                     inadvertently bound both
>                     > processes to CPU 1.
>
>                     What I do is launch the benchmarks and then run a C
>                     program which
>                     basically does:
>
>                     processor_bind(P_PID, pid_of_bench1, 0, NULL);
>                     processor_bind(P_PID, pid_of_bench2, 1, NULL);
>
>                     I think this way you avoid the processor sets. I did
>                     this a while ago
>                     and can't remember the details, but I think this
>                     works and effectively
>                     binds the pids to processors 0 and 1. Is it wrong?
>
>                     Regards,
>                     Javi
>
>                     _______________________________________________
>                     Gems-users mailing list
>                     Gems-users@xxxxxxxxxxx <mailto:Gems-users@xxxxxxxxxxx>
>                     https://lists.cs.wisc.edu/mailman/listinfo/gems-users
>                     Use Google to search the GEMS Users mailing list by
>                     adding
>                     "site:https://lists.cs.wisc.edu/archive/gems-users/"
>                     to your search.
>
>
>
>
>
>                 --
>                 http://www.cs.wisc.edu/~gibson
>                 <http://www.cs.wisc.edu/%7Egibson> [esc]:wq!
>
>                 _______________________________________________
>                 Gems-users mailing list
>                 Gems-users@xxxxxxxxxxx <mailto:Gems-users@xxxxxxxxxxx>
>                 https://lists.cs.wisc.edu/mailman/listinfo/gems-users
>                 Use Google to search the GEMS Users mailing list by
>                 adding
>                 "site:https://lists.cs.wisc.edu/archive/gems-users/" to
>                 your search.
>
>
>
>
>
>             --
>             Thanks and Regards
>             Sparsh Mittal
>             Graduate Student
>             Electrical and Computer Engineering
>             Iowa State University, Iowa, USA
>
>             _______________________________________________
>             Gems-users mailing list
>             Gems-users@xxxxxxxxxxx <mailto:Gems-users@xxxxxxxxxxx>
>             https://lists.cs.wisc.edu/mailman/listinfo/gems-users
>             Use Google to search the GEMS Users mailing list by adding
>             "site:https://lists.cs.wisc.edu/archive/gems-users/" to your
>             search.
>
>
>
>
>
>         --
>         http://www.cs.wisc.edu/~gibson
>         <http://www.cs.wisc.edu/%7Egibson> [esc]:wq!
>
>         _______________________________________________
>         Gems-users mailing list
>         Gems-users@xxxxxxxxxxx <mailto:Gems-users@xxxxxxxxxxx>
>         https://lists.cs.wisc.edu/mailman/listinfo/gems-users
>         Use Google to search the GEMS Users mailing list by adding
>         "site:https://lists.cs.wisc.edu/archive/gems-users/" to your search.
>
>
>
>
>
>     --
>     Thanks and Regards
>     Sparsh Mittal
>     Graduate Student
>     Electrical and Computer Engineering
>     Iowa State University, Iowa, USA
>
>     _______________________________________________
>     Gems-users mailing list
>     Gems-users@xxxxxxxxxxx <mailto:Gems-users@xxxxxxxxxxx>
>     https://lists.cs.wisc.edu/mailman/listinfo/gems-users
>     Use Google to search the GEMS Users mailing list by adding
>     "site:https://lists.cs.wisc.edu/archive/gems-users/" to your search.
>
>
>
>
>
> --
> http://www.cs.wisc.edu/~gibson [esc]:wq!
>
>
>
> _______________________________________________
> Gems-users mailing list
> Gems-users@xxxxxxxxxxx
> https://lists.cs.wisc.edu/mailman/listinfo/gems-users
> Use Google to search the GEMS Users mailing list by adding "site:https://lists.cs.wisc.edu/archive/gems-users/" to your search.
>



_______________________________________________
Gems-users mailing list
Gems-users@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/gems-users
Use Google to search the GEMS Users mailing list by adding "site:https://lists.cs.wisc.edu/archive/gems-users/" to your search.





--
Thanks and Regards
Sparsh Mittal
Graduate Student
Electrical and Computer Engineering
Iowa State University, Iowa, USA
[← Prev in Thread] Current Thread [Next in Thread→]