Geir Magnusson Jr. wrote:
On Jan 12, 2007, at 7:53 AM, Gregory Shimansky wrote:
Elena Semukhina wrote:
I tried StackTest in jitrino debug mode on both SUSE9 linux 2 CPU
ia32 and
em64t machines. It passed. It is now excluded for linux x86_64 (probably
Geir has excluded it because it always passed for me).
I ran it on that platform and saw rather strange behavior. The test is
essentially the same as stress.Stack: both tests invoke a method
recursively
waiting for StackOverflowError. The difference is that the method is
void in
StackTest and boolean in stress.Stack. Another difference is that
StackTest
should never fail: it detects both throwing StackOverflowError and not
throwing it as normal situation. Doing that it passes even with
200000000
iterations with no StackOverflowError (!) (JIT) while on RI it gets
StackOverflowError after 650000 iterations. On drlvm linux ia32 it gets
exception after 8600 iterations. It also gets the exception in
interpreter
mode on em64t (about 2400 iterations).
Can this be correct behavior?
If you use SuSE9 on x86_64, then most likely it is because of
weirdness of SuSE9 installation. It has no hard or soft stack limit by
default (see ulimit -s). You can try to limit stack size like ulimit
-s 8192 and then this test should not give too many iterations. If you
upgrade to SuSE10, you will see that it has default stack limit 8192.
The current implementation of SOE in drlvm is that it takes stack size
from the system. If system has no limit, then stack has no limit as
well. It has been discussed in other threads about SOE that this is
not very good, but hasn't been fixed AFAIK.
I think that if we can find a way to have an "cononical environment" for
linux that get set before running the tests, that would be useful.
I agree. I think the easiest way would be to implement -Xss option for
drlvm and use it for those tests which actually depend on stack size
like StackTest and stress.Stack.
--
Gregory