[coyotos-dev] Hi + some stuff I found researching
Haplo
starfirex at comcast.net
Wed Jul 12 16:53:49 EDT 2006
No offense taken, this is good to know.
1.I really didn't think that would be the case. Massalin's claims
wouldn't lead one to believe that, but in that case I have to
completely agree.
This point is a real slap in the face to Linus only because of how
true it is ^^.
2-3.These are the points I was concerned with. It seems that the
worst case has played out on his concept, so the brute of it is no
longer applicable.
Oh well, just means coyotos is at a good point already.
4.Well, with points 1-3, 4 is kinda moot. If there's no benefit to
doing so then there's no real point to worry about the consequences
either. I suppose it was good to point out anyway, though. I see
since run-time variables are used in the code generation that it,
like currying, would be unverifiable. Guess I should have thought a
bit harder about that one :P.
It doesn't necessarily mean ALL of the ideas are not worthwhile
though. There are a few points of interest you didn't address.
A: Software feedback based scheduling. This seems like a good idea to
me. Priority based scheduling is just too limiting, and in the end it
all ends up "best guess" or the more common case is that most non-OS
associated apps are all given the same priority. Even if the user
can modify priorities, as is the case on most *nix systems, it's a
difficult process and automated solutions just end up reducing
multitasking performance, or worse starve processes it depends on for
resources. It also works VERY badly for real time multimedia
applications - games, media players, audio/video editing tools, where
the applications are very time and throughput sensitive. It simply
doesn't take into account that an application's resource needs WILL
vary at run-time, and doesn't account for services they depend on at
all.
B:Executable data structures. This has limited use but could still
provide improvement. In this case it would be more like instantiating
an object than dynamically generating code. The most specific example
of where this might be useful - that I can give at least - would be
capability register pages. If a page can only hold a certain number
of indices, then in-lined code that "knows" about the capabilities
it's managing could traverse them quickly and return the capability
at the selected index. Also, it could be used to link capability
pages together that are owned by the same process. For example a
process wants to invoke capability index x, so a retrieval request is
sent to capability page 1, which holds indices 0-y. If x <= y, the
index can be retrieved through a simple algorithm. If x > y, then the
request is modified to x = x-y, then passed onto the linked page,
which holds y+1 - y*2 (at maximum anyway). In this way each
capability executable page can have the same code, while allowing
efficient traversal. Again, I can't really determine that myself, but
it does seem like a good idea.
C:Something not really synthesis related that I didn't mention
earlier for various reasons. A self-healing layer like in Minix-3. It
seems like a good idea in any case, since according to the docs
almost all invocations can be resent anyway. The main difference is
that periodic pinging would be superfluous in coyotos, since coyotos
can detect abnormal timeouts already. This way it would simply invoke
the healing layer to resolve what ACTUALLY happened. Appropriate
action can be taken from there - either resend the request or restart
the driver THEN resend the request. In the rare outside case the
dependent process would still crash, but oh well? That's no better or
worse than not having it, but in the case of MOST processes it's an
improvement. Furthermore, the healing layer could also be made to
collect details about a driver crash in that event, which could be
sent to the developers so that they can fix it. I really don't see
any downsides to this.
On Jul 12, 2006, at 8:02 AM, Jonathan S. Shapiro wrote:
> Haplo, Sandro, all:
>
> First, welcome to Haplo, and thanks for your interest.
>
> Concerning synthesis, there are four overriding reasons NOT to do what
> the Synthesis kernel did:
>
> 1. Code complexity. The size of the Synthesis runtime compiler exceeds
> the total size of the Coyotos kernel. Bugs scale with lines of
> code, and
> compilers are complex code. We simply cannot afford the negative
> reliability consequences of this approach.
>
> 2. Performance. The synthesis numbers were collected before later work
> on microkernels became known. Having done the IA-32 optimization of
> the
> EROS IPC path myself, I can tell you that dynamic optimization just
> won't help -- pretty much every cycle there has been hand
> optimized. The
> other cases in the kernel are low frequency paths, and using this kind
> of hammer on them isn't justified -- they aren't slow now, and in any
> case they are paths that never run.
>
> 3. Fault Isolation. If you go back and look at the Synthesis papers
> as a
> total work, you will see that the fundamental source of
> optimization was
> combining things across layering boundaries in the software. The
> hidden
> cost of this is that you lose abstraction and isolation, which reduces
> robustness. The real victory of Synthesis, in its day, was network
> performance. Many things have changed since then:
>
> a) Network cards now have DMA and large FIFOs
> b) TCP/IP implementations have introduced zero copy ideas and
> have generally become better tuned
> c) Interrupt behavior associated with network cards has changed
>
> In today's conventional implementations -- even on EROS -- the
> limiting
> factor in network performance is either the main memory speed or
> the PCI
> transfer rate. Both are very close to the theoretical wire speed
> limit.
> Dynamic compilation simply won't help here.
>
> 4. Verification. It is just *barely* possible to verify something like
> the Coyotos kernel with enough work, but only because the code being
> executed is fixed. Introducing dynamic compilation would push us
> beyond
> what is possible (in principle) for any currently known verification
> technology.
>
>
> So in summary: it's complicated, it won't help, and it will reduce
> robustness.
>
> But please do not misunderstand! The Synthesis kernel was a brilliant
> exploration of ideas at a time when none of these outcomes were known.
> There are many *other* places in a system where these ideas are very
> appropriate.
>
>
> shap
>
>
>
> coyotos-dev mailing list
> coyotos-dev at smtp.coyotos.org
> http://www.coyotos.org/mailman/listinfo/coyotos-dev
More information about the coyotos-dev
mailing list