void linsched_run_sim(int sim_ticks) { /* Run a simulation for some number of ticks. Each tick, * scheduling and load balancing decisions are made. The * order in which CPUs make their scheduler_tick calls * is randomized. Obviously, we could create tasks, * change priorities, etc., at certain ticks if we desired, * rather than just running a simple simulation. * (Tasks can also be removed by having them exit.) */ /* NOTE: The per-CPU "tick" is never disabled, like it might be in a * real system, when a CPU goes idle. Since even the most current * version of Linux maintains a periodic tick when there is * actual work to do, and disabling the tick when idle would * not change anything about how the scheduler behaves * (it only conserves energy, which is not going to help us here), * there is no need. */ // printf("Yeah-first_run\n"); int initial_jiffies = jiffies; for (jiffies = initial_jiffies; jiffies < initial_jiffies + sim_ticks; jiffies++) { cpumask_t cpu_processed_map = CPU_MASK_NONE; while (!cpus_full(cpu_processed_map)) { int active_cpu; /* Determine next active CPU, and set as processed. */ do { active_cpu = linsched_random() % NR_CPUS; //active_cpu = 1; } while (cpu_isset(active_cpu, cpu_processed_map)); cpu_set(active_cpu, cpu_processed_map); /* Call scheduler_tick for that CPU. */ linsched_change_cpu(active_cpu); // printf("Mainsimulation\n"); scheduler_tick(); /* may trigger a schedule() call */ /* First time executing a task? Do not need to * call schedule_tail, since we are not actually * performing a "real" context switch. */ } } }
static char * kdb_cpus_allowed_string(struct task_struct *tp) { static char maskbuf[NR_CPUS * 8]; if (cpus_equal(tp->cpus_allowed, cpu_online_map)) strcpy(maskbuf, "ALL"); else if (cpus_full(tp->cpus_allowed)) strcpy(maskbuf, "ALL(NR_CPUS)"); else if (cpus_empty(tp->cpus_allowed)) strcpy(maskbuf, "NONE"); else if (cpus_weight(tp->cpus_allowed) == 1) snprintf(maskbuf, sizeof(maskbuf), "ONLY(%d)", first_cpu(tp->cpus_allowed)); else cpulist_scnprintf(maskbuf, sizeof(maskbuf), tp->cpus_allowed); return maskbuf; }