主机上 运行 进程的数量是否有任何限制?
Is there any limitations to number of running processes on host?
在平台文件中我只有一个主机:
<host id="Worker1" speed="100Mf" core="101"/>
然后在 worker.c 中我创建了 101(或 > 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>
主机上可启动的进程数与内核数无关。与在真机上一样,由于分时机制,您可以有多个进程 运行 "simultaneously"。这里也一样。当 运行 个进程的数量大于内核的数量(1 个或更多)时,它们必须共享资源。
你的问题的原因在别处,但你没有提供完整的最小工作示例(主要?部署文件?)并且很难提供帮助。
maxmin系统(SimGrid的核心)的大小实际上有一个内部限制,即100,在这种情况下可能会被击中。我刚刚添加了一个标志来使这个限制可配置。你可以拉出最后一个版本,然后尝试将 maxmin/concurrency_limit 设置为 1000,看看它是否能解决你的问题?
在平台文件中我只有一个主机:
<host id="Worker1" speed="100Mf" core="101"/>
然后在 worker.c 中我创建了 101(或 > 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>
主机上可启动的进程数与内核数无关。与在真机上一样,由于分时机制,您可以有多个进程 运行 "simultaneously"。这里也一样。当 运行 个进程的数量大于内核的数量(1 个或更多)时,它们必须共享资源。
你的问题的原因在别处,但你没有提供完整的最小工作示例(主要?部署文件?)并且很难提供帮助。
maxmin系统(SimGrid的核心)的大小实际上有一个内部限制,即100,在这种情况下可能会被击中。我刚刚添加了一个标志来使这个限制可配置。你可以拉出最后一个版本,然后尝试将 maxmin/concurrency_limit 设置为 1000,看看它是否能解决你的问题?