是否可以在 SimGrid 中生成大量进程?

Is it possible to spawn big amount of processes in SimGrid?

我有生成 50000 个进程的主进程

int master(int argc, char* argv[])
{
  for (int i = 0; i < 10000; i++){
    string name = tostring(i);
    MSG_process_create(name.c_str(), some_code, NULL, MSG_host_self());
  }
  return 0;
}

但是当我运行这个代码时我有一个错误:

[0.000000] /home/ubuntu/Downloads/simgrid/src/simix/smx_context.cpp:187: [xbt/CRITICAL] Failed to protect stack: Cannot allocate memory

我该如何克服它或者它是不可能的?

来自http://simgrid.gforge.inria.fr/simgrid/3.13.90/doc/options.html#options_virt

如果您想突破代码的可伸缩性限制,您可能需要 减少 contexts/stack-size 项目。它的默认值为 8192(以 KiB 为单位), 而我们的 Chord 模拟适用于小至 16 KiB 的堆栈,对于 例如。

另外,您要确保(使用 valgrind)您的应用程序不会泄漏内存,因为这是您扩展进程数量最需要的。