<br>
<br><tt><font size=2>Arnd Bergmann &lt;arnd.bergmann@de.ibm.com&gt; wrote
on 10/10/2006 08:31:11 AM:<br>
<br>
&gt; On Monday 09 October 2006 22:44, Luke Browning wrote:<br>
&gt; &gt; How can we determine the number of installed spus to limit the
size of the <br>
&gt; &gt; gang? &nbsp; Should we just add a new check to spu_create(thread)
that fails <br>
&gt; &gt; when the number of spes threads in the gang is greater than the
number of <br>
&gt; &gt; installed spus.<br>
&gt; <br>
&gt; (cc: ing the mailing list, maybe someone has better ideas)<br>
&gt; <br>
&gt; I guess we could fail both the creating of threads in a gang<br>
&gt; and the creation of nonschedulable contexts if there is not<br>
&gt; enough space.<br>
&gt; <br>
&gt; That means we have to add housekeeping to the kernel for the<br>
&gt; number of non-pinned SPUs that is available, as well as recording<br>
&gt; the number of pinned SPUs in order to determine the maximum size<br>
&gt; of a gang.<br>
</font></tt>
<br><tt><font size=2>Not sure what you mean by pinned-SPU? Is your response
specific to </font></tt>
<br><tt><font size=2>libspe 2.0 or 1.2?</font></tt>
<br>
<br><tt><font size=2>&gt; <br>
&gt; The simpler alternative would be that we simply allow the users to<br>
&gt; specify impossible situations, e.g. pinning more than the physically<br>
&gt; available SPUs or creating a gang that is larger than that number.<br>
&gt; <br>
&gt; As a result, the spu_run() call could simply block interruptibly,<br>
&gt; until either the user kills the task or the condition becomes possible<br>
&gt; when something else exits.</font></tt>
<br>
<br><tt><font size=2>This adds a lot of complexity to affinity scheduling
because we assume</font></tt>
<br><tt><font size=2>one spe thread per physical spu. &nbsp;We don't want
two spe threads to be</font></tt>
<br><tt><font size=2>queued to the same spu. </font></tt>
<br><tt><font size=2><br>
&gt; <br>
&gt; I'd prefer the simpler solution, but it's a tradeoff, because users<br>
&gt; don't notice early. We should definitely not allow creating more<br>
&gt; threads in a gang than what is physically possible, but that only<br>
&gt; depends on the number of SPE nodes in the device tree and is easy<br>
&gt; to determine.<br>
</font></tt>
<br><tt><font size=2>agreed. Are you recommending modifying spe_getgroup_max()
&lt;spelling&gt; </font></tt>
<br><tt><font size=2>in the library to return the number of 'available'
spus instead of </font></tt>
<br><tt><font size=2>the current hardcoded value (16). Note available does
not include </font></tt>
<br><tt><font size=2>security isolated spus.</font></tt>
<br>
<br><tt><font size=2>&gt; <br>
&gt; On a hypervisor system that does not have a fixed number of SPUs<br>
&gt; assigned to a partition, we may need to have some way to communicate<br>
&gt; the maximum number of SPUs to Linux through some hcall or device tree<br>
&gt; entry.<br>
&gt; <br>
</font></tt>
<br><tt><font size=2>Are you thinking of micro-partitioning of spu processors
here? Is </font></tt>
<br><tt><font size=2>anybody actually discussing that right now? &nbsp;I
hope not as we don't </font></tt>
<br><tt><font size=2>have a clear understanding of scheduling concurrency
dynamics yet in</font></tt>
<br><tt><font size=2>the new scheduler, ie. page fault resolution, locking,
... </font></tt>
<br>
<br><tt><font size=2>Luke</font></tt>