[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Reliability of RPC services
From: |
Marcus Brinkmann |
Subject: |
Re: Reliability of RPC services |
Date: |
Sat, 22 Apr 2006 19:24:59 +0200 |
User-agent: |
Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.7 (Sanjō) APEL/10.6 Emacs/21.4 (i486-pc-linux-gnu) MULE/5.0 (SAKAKI) |
Hi,
I am stating it up front: I have no intention of convincing you that
send-once rights are necessary. One reason is that I do not know if
they are necessary. Another reason is that I don't have time to make
a formally strong argument in their favor.
This mail is just intended to correct a couple of obvious
misunderstandings, and to ask for a clarification.
At Sat, 22 Apr 2006 10:22:25 -0400,
"Jonathan S. Shapiro" <address@hidden> wrote:
> 1. The behavior that you want can *only* be accomplished with reference
> counting.
This is not true. A send-once capability does not require reference
counting as only ever one reference is extant (guaranteed by move vs
copy semantics).
> 5. Note that reference counting doesn't really solve the problem either.
> A server could simply store an extra copy of the reply descriptor and
> forget about it for a very long time. The existence of this descriptor
> is sufficient to prevent the "last drop" message from being sent for an
> indefinite time.
It depends on what you perceive as the problem. I seem to have a much
narrower definition of the problem in mind than you.
It may be that the problem I am trying to solve is a non-problem. It
may also be that the solutions I am looking for are not sufficient to
construct the systems I am trying to construct. Both are interesting
issues, and I am looking at them as well. However, my suspicion is
that without any such mechanisms, no useful, persistent, fault
tolerant, user-extensible multi-server system can be built (for some
definition of useful, which includes running a browser and sharing
files with friends).
> 6. You will soon generalize this to RcvQ send capabilities, but in that
> case the problem is unsolvable because the message will commonly be
> delayed (therefore lost).
I have no intention to do so.
> > I think the following
> > condition should be sufficient: The kernel guarantees that a reply
> > message is sent _at the latest_ when the callee process is destroyed.
> > This should hold true independent of what the callee does between
> > being invoked and exiting. In particular, simply dropping the reply
> > capability should not change this guarantee (which in effect means
> > that the kernel has to invoke the reply capability when it is
> > dropped).
>
> Several problems:
>
> 1. This requires dynamic storage allocation in the kernel. Dynamic
> storage allocation in the kernel implies denial of resource
> vulnerabilities and makes any statement of kernel robustness impossible.
Can you elaborate why you think that dynamic storage allocation is
required?
> 2. Your description fails in the case where C calls S which forwards to
> T, because the exit of S will cause an improper reply.
My description (above) does not even include this case. You snipped
the following:
"Going back to the simple case of one caller and one callee, where the
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
callee does not invoke any other process, I think the following
condition should be sufficient: The kernel guarantees that a reply..."
If you combine this description with the idea of send-once
capabilities, which are moved, not copied, you get a description which
works with forwarding.
> 3. Your proposal seems to have the side effect (I am not certain) of
> dictating a hierarchical calling relationship. This is bad.
I am not sure what that is supposed to mean.
> > In short: I think overwriting a capability and destroying it should
> > behave the same with regards to this issue.
>
> So let me see if I have this right: you want to sent a death notice on
> overwrite.
I want an RPC mechanism that's "better" than UDP.
> So this implies that every IPC must check the destination slots to see
> if they cause such an overwrite, and must issue death notice calls on
> those capabilities. If the IPC payload contains up to N capabilities,
> and we assume that the death notice itself does not transfer a
> capability, then every IPC has just been multiplied by up to N IPCs.
The common case is that no capability that is overwritten is a valid
reply capability. The common case is thus N checks on memory that is
going to become hot anyway.
> This just won't work, Marcus. Technically it can be done, but the
> resulting system will perform much worse than Mach.
> > I am happy to defer discussion of implementation details, but I would
> > like to clarify the issue of (accidentially, maliciously) dropped
> > reply capabilities.
>
> I believe that I have offered a compelling argument for why it should
> not be done: in order to solve a very rare problem, your "highly robust"
> solution imposes a 400% overhead on the common case operation!
In fact, I didn't find the arguments compelling. What I would find a
complling argument is one of the following: (1) A strategy to
implement a useful multi-server operating system which has an RPC
service that is as reliable as UDP (for definition of useful, see
above ;) (2) A different strategy to make RPC mechanisms more
reliable.
> I am inclined to think that disk GC provides a better approach to the
> whole problem, but I haven't really thought about it enough to have a
> sensible opinion about this.
Disk GC may prove to be a good alternative.
Thanks,
Marcus
- Re: Reliability of RPC services, (continued)
- Re: Reliability of RPC services, Jonathan S. Shapiro, 2006/04/29
- Re: Reliability of RPC services, Bas Wijnen, 2006/04/29
- Re: Reliability of RPC services, Jonathan S. Shapiro, 2006/04/29
- Re: Reliability of RPC services, Bas Wijnen, 2006/04/30
- Re: Reliability of RPC services, Jonathan S. Shapiro, 2006/04/30
- Re: Reliability of RPC services, Marcus Brinkmann, 2006/04/30
- Re: Reliability of RPC services,
Marcus Brinkmann <=
- Re: Reliability of RPC services, Jonathan S. Shapiro, 2006/04/22
- Re: Reliability of RPC services, Bas Wijnen, 2006/04/22
- Re: Reliability of RPC services, Tom Bachmann, 2006/04/23
- Re: Reliability of RPC services, Bas Wijnen, 2006/04/23
- Re: Reliability of RPC services, Pierre THIERRY, 2006/04/23
- Re: Reliability of RPC services, Jonathan S. Shapiro, 2006/04/24
- Re: Reliability of RPC services, Pierre THIERRY, 2006/04/24
- Re: Reliability of RPC services, Jonathan S. Shapiro, 2006/04/24
- Re: Reliability of RPC services, Marcus Brinkmann, 2006/04/23
- Re: Reliability of RPC services, Jonathan S. Shapiro, 2006/04/29