2016-07-28 3 views
0

В платформе файл у меня есть только один хост:Существуют ли ограничения на количество запущенных процессов на хосте?

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

Тогда в worker.c я создаю 101 (или> 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:[email protected]) Oops ! Deadlock or code not perfectly clean. 
[ 1.000000] (0:[email protected]) 1 processes are still running, waiting for something. 
[ 1.000000] (0:[email protected]) Legend of the following listing: "Process <pid> (<name>@<host>): <status>" 
[ 1.000000] (0:[email protected]) Process 102 ([email protected]): waiting for execution synchro 0x26484d0 (kotok) in state 2 to finish 

UPDATE Здесь некоторые кодовые функции:

основная

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> 

ответ

1

Фактически существует внутренний предел для размера системы maxmin (ядро SimGrid), которая равна 100, и в этом случае может быть удалена. Я просто добавил флаг, чтобы сделать этот лимит настраиваемым. Не могли бы вы вытащить последнюю версию и попробовать установить maxmin/concurrency_limit на 1000 и посмотреть, исправляет ли она вашу проблему?

1

число процесса, который может быть запущен на хосте не имеет ничего общего с количеством ядер. Как и на реальной машине, вы можете запускать несколько процессов одновременно, благодаря механизмам разделения времени. Здесь то же самое. когда количество запущенных процессов больше, чем количество ядер (1 или более), они должны совместно использовать ресурсы.

Причина вашей проблемы в другом месте, но вы не предоставляете полный минимальный рабочий пример (основной файл развертывания?), И это сложно.

Смежные вопросы