2016-07-28 21 views
0

In Plattform Datei habe ich nur einen Host:Gibt es Einschränkungen hinsichtlich der Anzahl der laufenden Prozesse auf dem Host?

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

Dann in worker.c I 101 (oder nimmt> 100) verarbeitet erwarten, dass jeder auf jedem Prozess Kern eines wird gestartet. Aber ich merkte, dass nur erste Prozesse können Aufgabe auszuführen oder schreiben mit 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; 
} 

Anderen Verfahren über 100 erste, die nicht in der Lage sind, zu verwalten und töten:

[ 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 Hier sind einige Code-Funktionen:

Haupt

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> 

Antwort

1

Es gibt tatsächlich ein internes Limit für die Größe eines Maxmin-Systems (der Kern von SimGrid), das 100 ist und in diesem Fall getroffen werden kann. Ich habe gerade ein Flag hinzugefügt, um dieses Limit konfigurierbar zu machen. Könntest du die letzte Version ziehen und versuchen, maxmin/concurrency_limit auf 1000 zu setzen und zu sehen, ob es dein Problem behebt?

1

die Anzahl des Prozesses, der auf einem Host gestartet werden kann, hat nichts mit der Anzahl der Kerne zu tun. Wie bei einer echten Maschine können Sie dank Time-Sharing-Mechanismen mehrere Prozesse "gleichzeitig" ausführen lassen. Es ist das gleiche hier. Wenn die Anzahl der laufenden Prozesse größer ist als die Anzahl der Kerne (sei es 1 oder mehr), müssen sie sich die Ressourcen teilen.

Die Ursache Ihres Problems ist woanders, aber Sie bieten kein vollständiges minimales Arbeitsbeispiel (Haupt-Deployment-Datei?) Und es ist schwer zu helfen.