util/m5: Add a new function called pin to bind a program to a set of cores.
This is not m5 specific and this currently only works in linux.
This commit is contained in:
parent
ab593c69b6
commit
47e2b08893
1 changed files with 33 additions and 0 deletions
33
util/m5/m5.c
33
util/m5/m5.c
|
@ -28,6 +28,11 @@
|
||||||
* Authors: Nathan Binkert
|
* Authors: Nathan Binkert
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef linux
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <sched.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
@ -168,6 +173,31 @@ do_sw99param(int argc, char *argv[])
|
||||||
(param >> 12) & 0xfff, (param >> 0) & 0xfff);
|
(param >> 12) & 0xfff, (param >> 0) & 0xfff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef linux
|
||||||
|
void
|
||||||
|
do_pin(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (argc < 2)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
cpu_set_t mask;
|
||||||
|
CPU_ZERO(&mask);
|
||||||
|
|
||||||
|
const char *sep = ",";
|
||||||
|
char *target = strtok(argv[0], sep);
|
||||||
|
while (target) {
|
||||||
|
CPU_SET(atoi(target), &mask);
|
||||||
|
target = strtok(NULL, sep);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sched_setaffinity(0, sizeof(cpu_set_t), &mask) < 0)
|
||||||
|
err(1, "setaffinity");
|
||||||
|
|
||||||
|
execvp(argv[1], &argv[1]);
|
||||||
|
err(1, "execvp failed!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
struct MainFunc
|
struct MainFunc
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
|
@ -186,6 +216,9 @@ struct MainFunc mainfuncs[] = {
|
||||||
{ "loadsymbol", do_load_symbol, "<address> <symbol>" },
|
{ "loadsymbol", do_load_symbol, "<address> <symbol>" },
|
||||||
{ "initparam", do_initparam, "" },
|
{ "initparam", do_initparam, "" },
|
||||||
{ "sw99param", do_sw99param, "" },
|
{ "sw99param", do_sw99param, "" },
|
||||||
|
#ifdef linux
|
||||||
|
{ "pin", do_pin, "<cpu> <program> [args ...]" }
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
int numfuncs = sizeof(mainfuncs) / sizeof(mainfuncs[0]);
|
int numfuncs = sizeof(mainfuncs) / sizeof(mainfuncs[0]);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue