[ofa-general] Re: [PATCH] opensm & osm_console: modified console framework to support multiple connections
Sasha Khapyorsky
sashak at voltaire.com
Thu Nov 1 16:49:56 PDT 2007
On 15:06 Thu 01 Nov , Timothy A. Meier wrote:
> Sasha Khapyorsky wrote:
> > Hi Tim,
> >
> > On 10:53 Thu 01 Nov , Timothy A. Meier wrote:
> >
> >>> I think we need to close threading issue first. Then patch series of 2
> >>> looks fine for me.
> >>>
> >>>
> >> I really think the "thread-per-session" would be a more flexible and
> >> powerful
> >> design. Setting up and maintaining threads might seem more complex at
> >> first,
> >> but it makes servicing requests/commands much more simple because
> >> everything is
> >> in its own context.
> >>
> >
> > And require proper locking, thread termination handling, etc.. Which is
> > not always easy even with full featured pthread library, and especially
> > hard with limited cl_thread*() primitives... I didn't analyze submitted
> > code in this aspect - just tried to save the time... :)
> >
> >
> Understood. I will be careful, I promise. ;^)
>
> [Fortunately I have other source code to examine.]
> >> The previous Console used a polling mechanism, and I found an edge case
> >> condition
> >> which allowed one connection to block the other.
> >>
> >
> > How? There is no "blocking" commands? Right?
> >
> >
> You are right, no blocking "commands" (this is a requirement).
>
> As I said, it is sort of an edge case, but it illustrates the vulnerability
> of connections in a single threaded model interfering with each other
> (not intentional of course).
>
> osm_console.c: handle_osm_connection() method
>
> when a second connection is attempted (and successfully made within the
> same thread) a blocking io call is used (getline()) to query the user
> about killing the other connection. If this goes unanswered, the original
> connection is blocked.
Seems like usage bug. This should not be used without select() or
poll().
> Fundamentally, using a thread-per-session design formalizes the need
> to keep session specific data/resources separate. In a single threaded
> design, it would be more difficult to implement and enforce this policy.
It is just matter of design style - at least personally I don't need
such enforcements.
> >> Thread-per-session (or thread
> >> per connection) makes it difficult for one session to influence another.
> >>
> >> The number of threads/connections would be limited. Other than the normal
> >> multi-threading issues, are there other thread hazards in OFED/OpenSM
> >> that I
> >> need to be aware of?
> >>
> >
> > Another reason is to not get too much cpus from another OpenSM threads
> > (which mainly are responsible for IB MADs processing).
> >
> >
> I agree. The maximum # of connections is a #define and currently set to 5
> (4 useful, and 1 just to provide feedback that no more connections are
> available).
>
> There will be a couple of connection management commands (something like
> "usage"
> and "kill", etc..) to make sure sessions don't get out of control. In
> general,
> I don't expect much of a CPU load, or any additional burden on OpenSM.
>
> In any case, a single-threaded, multi-connection design would also need to
> be
> sensitive to the CPU load it places on the system.
Single thread cannot load more than 1 CPU on typically multiprocessors
machine.
> > Sasha
> >
> >
> Finally, a multi-threaded design would remove the non-blocking io
> restriction/requirement. Individual threads would be free to block
> (if they choose) and would only block themselves. This would allow
> for some more rich (multi-input) commands. Specifically, I need
> something like this to accept ACC/PW info when authenticating/authorizing
> over SSL/TSL.
>
> Other concerns? Convinced yet?
I am not really convinced and feel you are also not. I think it is better
to start from something now - it will be possible to rework things later.
Sasha
More information about the general
mailing list