Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 15 Sep 2007 22:25:29 -0700
From:      "Kip Macy" <kip.macy@gmail.com>
To:        "Daniel Eischen" <deischen@freebsd.org>,  "Kurt Miller" <kurt@intricatesoftware.com>, java@freebsd.org,  "Kris Kennaway" <kris@freebsd.org>, performance@freebsd.org,  freebsd-java@freebsd.org
Subject:   Re: Massive performance loss from OS::sleep hack
Message-ID:  <b1fa29170709152225x5a57a30fm7efbd6e331cfff28@mail.gmail.com>
In-Reply-To: <Pine.GSO.4.64.0709160030580.3591@sea.ntplx.net>
References:  <46EC1B55.4060202@FreeBSD.org> <200709152250.50879.kurt@intricatesoftware.com> <Pine.GSO.4.64.0709160030580.3591@sea.ntplx.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Or more likely they'll continue to maintain a sched_yield that isn't
posix compliant. We may just want to add some sort of interface so the
jvm can tell the kernel that sched_yield should be non-compliant for
the current process.



On 9/15/07, Daniel Eischen <deischen@freebsd.org> wrote:
> On Sat, 15 Sep 2007, Kurt Miller wrote:
> >
> > Hello Kris,
> >
> > I recall why I added the os_sleep() call. While working on the
> certification
> > testing one of the JCK tests was deadlocking. The test itself was faulty
> in
> > that it created a high priority thread in a tight yield loop. Since
> > pthread_yield() on a single processor system will not yield to lower
> > priority threads, the higher priority thread effectively blocked the
> > lower priority thread from running and the test deadlocked.
> >
> > I filed a formal appeal to have the JCK test corrected. However since the
> > api states:
> >
> >   http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html#yield()
> >    "Causes the currently executing thread object to temporarily pause
> >     and allow other threads to execute."
> >
> > the appeal was denied. I further argued that many publications written
> > by or or-authored by Sun employees state that Thread.yield() can not
> > be relied upon in this fashion:
>
> [ ... ]
>
> It's odd that Sun would take this position since the POSIX behavior
> for sched_yield() is:
>
>        The sched_yield() function shall force the running thread to
>        relinquish the processor until it again becomes the head of its
>        thread list.  It takes no arguments.
>
> The "its thread list" mentioned above is the list of threads for its
> given priority.  POSIX has a notion of a list of threads for each
> given priority; in SCHED_RR and SCHED_FIFO scheduling the higher
> priority threads will always run before lower priority threads.
>
> Sun's defined Java behavior, or their interpretation, of Thread.yield()
> is not obtainable on a POSIX compliant system using sched_yield()
> (or pthread_yield()).  Even using scope system threads or libthr,
> the kernel scheduler should run the higher priority threads before
> lower priority threads.
>
> I suspect that Sun will eventually be forced to change their
> documented behavior for Thread.yield().
>
> --
> DE
> _______________________________________________
> freebsd-performance@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-performance
> To unsubscribe, send any mail to
> "freebsd-performance-unsubscribe@freebsd.org"
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?b1fa29170709152225x5a57a30fm7efbd6e331cfff28>