主机上正在运行的进程数有限制吗?

时间:2016-07-28 11:10:31

标签: process modeling simgrid

在平台文件中,我只有一个主机:

        <host id="Worker1" speed="100Mf" core="101"/>

然后在worker.c中创建101(或&gt; 100)个进程,期望每个核心上的每个进程都将启动。但我注意到只有 100 第一个进程能够执行任务或使用XBT_INFO进行编写:

int worker(int argc, char *argv[])
{
    for (int i = 0; i < 101; ++i) {
        MSG_process_create("x", slave, NULL, MSG_host_self());
    }
    return 0;
}

int slave(){
    MSG_task_execute(MSG_task_create("kotok", 1e6, 0, NULL));
    MSG_process_kill(MSG_process_self());
    return 0;
}

100个以上的其他进程无法管理和杀死:

[  1.000000] (0:maestro@) Oops ! Deadlock or code not perfectly clean.
[  1.000000] (0:maestro@) 1 processes are still running, waiting for something.
[  1.000000] (0:maestro@) Legend of the following listing: "Process <pid> (<name>@<host>): <status>"
[  1.000000] (0:maestro@) Process 102 (x@Worker1): waiting for execution synchro 0x26484d0 (kotok) in state 2 to finish

更新 这里有一些代码函数:

int main(int argc, char *argv[])
{
  MSG_init(&argc, argv);

  MSG_create_environment(argv[1]);          /** - Load the platform description */
  MSG_function_register("worker", worker);
  MSG_launch_application(argv[2]);          /** - Deploy the application */

  msg_error_t res = MSG_main();             /** - Run the simulation */

  XBT_INFO("Simulation time %g", MSG_get_clock());

  return res != MSG_OK;
}

deployment.xml中

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
<platform version="4">

    <process host="Worker1" function="worker">
        <argument value="0"/>
    </process>

</platform>

2 个答案:

答案 0 :(得分:1)

可以在主机上启动的进程数与核心数无关。在真机上,由于时间共享机制,您可以“同时”运行多个进程。这里也一样。当正在运行的进程数大于核心数(1个或更多)时,它们必须共享资源。

您的问题的原因在其他地方,但您没有提供完整的最小工作示例(主要?部署文件?),并且很难提供帮助。

答案 1 :(得分:1)

对于maxmin系统(SimGrid的核心)的大小实际上有一个内部限制,它是100,在这种情况下可能会被命中。我刚添加了一个标志,以使此限制可配置。你可以拉最后一个版本,并尝试将maxmin / concurrency_limit设置为1000并查看它是否修复了你的问题?