* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux
@ 2008-08-21 19:42 Vladislav Bolkhovitin
2008-08-21 23:19 ` FUJITA Tomonori
` (2 more replies)
0 siblings, 3 replies; 34+ messages in thread
From: Vladislav Bolkhovitin @ 2008-08-21 19:42 UTC (permalink / raw)
To: ksummit-2008-discuss
Cc: James Bottomley, FUJITA Tomonori, Nicholas A. Bellinger,
scst-devel, linux-scsi, Bart Van Assche
(My apologies that I'm late to this discussion. I wasn't subscribed to
ksummit-2008-discuss, so wasn't aware about it. Big thanks to Nicholas
who pointed me on it. For the same reason I will reply to all related
messages at once. Sorry, I wasn't able to restore all the CC's. I hope,
nobody would object that I added scst-devel and linux-scsi mailing lists
on CC. I added them, because I understand that ksummit-2008-discuss
mailing list isn't the best place for such discussion.)
> The main complaint about STGT is that it's mostly based in user space.
> With the big objection being that this makes it hard to share the
> in-kernel packet processing pieces between the in-kernel initiators and
> the in-user targets. (Conversely, this in userspace thing is one reason
> why developers like STGT: it's easy to get at the protocol stacks and
> inject things).
Unfortunately, you keep ignoring the essential point that STGT is
fundamentally based on microkernel-like distributed processing
architecture, from which Linux gone from the very beginning, because it
makes things a lot more complicated for virtually no gain. See below
about buffers memory manager problem as an example of such
overcomplication. As soon as there is a boundary in processing, there
are immediately all that boundary related troubles.
> The solution that seemed to secure agreement at the storage summit was
> to enhance STGT with the in-kernel pieces of SCST to allow for both
> in-user and in-kernel targets depending on what the stack user
> wanted ... but I've seen no patches for this.
No surprises, because it is practically impossible. A SCSI target core,
basically, consist from 3 parts: (1) SCSI target state machine, (2)
buffers memory manager and (3) commands execution backend. The
fundamental difference between SCST and STGT, which makes them so widely
incompatible is the buffers memory manager. In SCST it's fully in the
kernel, but for STGT it's in the user space. Direct consequence of this
that the user space must be able to see buffers, so many optimizations,
like putting pages directly to page cache, are impossible for security
reasons. Additionally, the buffers memory manager is a central piece of
code around which the whole SCSI target engine is built. Parts of code
from SCST would be compatible with STGT only when the whole memory
manager would be moved in STGT from user space to kernel space together
with all related SCSI target state machine states, which in turn carry
almost all other target states to the kernel. But then the questions
would arise: "What's left for user space?" and "What's the difference
with SCST"?
> The problem is that there are two separate constituencies for a target
> mode implementation
>
> 1. People who need target mode to hack on storage fabrics. For them
> a user mode implementation is much more easily hackable than a
> kernel one.
> 2. People who want maximal efficiency in the target. For them,
> shoving everything into the kernel seems to be the best thing to
> do.
>
> The problem is that the currently upstream STGT implementation satisfies
> the first constituency. The loud clamour for upstreaming SCST is to
> satisfy the second. Amazingly enough, I think both constituencies have
> a right to a solution. I also don't think two separate solutions with
> non overlapping code bases in the kernel is the right thing to do, so
> what I'd like is for us to evolve the existing solution into something
> that will work for both (by taking pieces of the out of SCST and placing
> them into STGT).
>
> The problem is that proponents of constituency number 2 term the code
> for constituency 1 "flawed" because they don't see anything in user
> space satisfying their efficiency need. Until we can get past this
> either 1 or 2 mentality there is going to be no progress because
> "progress" is offered as take it or leave it solutions for either
> constituency.
>
> The solution I offered that I think might satisfy both is the ability to
> run pieces of the current STGT in-kernel to get the efficiency gains. I
> haven't heard any other solutions proposed that would satisfy both ...
> unless I've missed something?
James, you missed that SCST for a long time has support for implementing
backstorage devices in the user space. This is provided through
backstorage device handler called scst_user. You can find its interface
description in http://scst.sourceforge.net/scst_user_spec.txt and the
example code in http://scst.sourceforge.net/handler_fileio_tgt.html. And
one interesting point about it that it's more efficient than STGT,
because SCST has memory manager in kernel, which eliminates the need in
constant malloc()/get_user_pages()/free() calls on each SCSI command and
allows on average only one context switch and one user-kernel switch per
command. At least two companies sell VTLs based on SCST/scst_user and
several developing their products.
Thus, SCST satisfies both kinds of people: ones who need maximal
efficiency and ones who want more easily hackable implementation of
their devices.
If all necessary pieces of STGT moved in the kernel, it would become
pretty much the same as SCST at the moment. Then, for what all that
effort would be? How many years would it take? Wouldn't it be simpler to
grab already existing program, than to solve already solved problems one
more time?
> The basic comment is that since we've already discussed it at the
> storage summit, and there's been no code progress at all since that
> time, what benefit is to be gained by airing it with a wider audience
> (particularly a less storage centric one)?
Related to SCST, I'm going to submit it together with 3 target drivers
(for iSCSI, FC and SRPT transports) for review and inclusion after I
return from vacation in the second half of September. Almost all is
already ready for that, I simply don't want to disappear in the middle
of discussion.
> Should the generic target mode be based on SCSI (like SCST), or, should
> it sit _ABOVE_ drivers/scsi, and allow for a generic method for both
> SCSI and non SCSI based transports.
I proposed for a SCSI target a separate subsystem, which I described in
http://lkml.org/lkml/2008/5/2/348 and http://lkml.org/lkml/2008/5/4/160.
There is almost no common between regular (initiator) SCSI and target
subsystems. Relations between them similar to relations between regular
SCSI and block subsystems. Hence, there is no point to keep them
together. It would be better if they are separated with separate
maintainers.
> I believe the LIO-Core algoritims
> for allocation of linked list pages subsystem dependent memory are ideal
> for the latter, which is what should be the princaple topic discussion
> regardless kernel-level generic target mode infrastructure. That is,
> common code that can be used for both target mode iSCSI, FC, FCoE,
> PSCSI, AoE and SATA.
I've also thought how to make SCST core useful for non-SCSI transports,
namely AoE. It seems to me that the best way would be if for all AoE
commands AoE target driver (let's use SCSI terms) would submit to SCST
core the corresponding generated by it SCSI CDBs. Since ATA can be
considered as a functional subset of SCSI, such approach should work
pretty well. Other transports (FCoE and SATA) are, basically, SCSI, so
they can be used directly.
> Hmm, really? STGT development is more active IET.
Tomo-san, be honest. It was *you*, who stopped the IET development,
forcing people to switch to STGT. There is no point to prepare patches
for IET, if they will never get merged.
> That sounds like a perfect topic for the scsi mailing list, why not take
> it there right now and get it resolved this week?
I agree. Simply there are too few people who simply understand what
"SCSI target" means and there are no big chances to have sufficient
amount of them there.
Vlad
^ permalink raw reply [flat|nested] 34+ messages in thread* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-21 19:42 [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux Vladislav Bolkhovitin @ 2008-08-21 23:19 ` FUJITA Tomonori 2008-08-22 19:01 ` Vladislav Bolkhovitin 2008-08-21 23:31 ` [Ksummit-2008-discuss] " Mike Christie 2008-08-22 0:26 ` [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux Arjan van de Ven 2 siblings, 1 reply; 34+ messages in thread From: FUJITA Tomonori @ 2008-08-21 23:19 UTC (permalink / raw) To: vst Cc: ksummit-2008-discuss, linux-scsi, bart.vanassche, James.Bottomley, scst-devel On Thu, 21 Aug 2008 23:42:51 +0400 Vladislav Bolkhovitin <vst@vlnb.net> wrote: > > Hmm, really? STGT development is more active IET. > > Tomo-san, be honest. It was *you*, who stopped the IET development, > forcing people to switch to STGT. There is no point to prepare patches > for IET, if they will never get merged. I stopped working on IET but it doesn't mean that I force others to stop working on IET. Arne said that he merges patches. ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-21 23:19 ` FUJITA Tomonori @ 2008-08-22 19:01 ` Vladislav Bolkhovitin 2008-08-23 2:35 ` FUJITA Tomonori 0 siblings, 1 reply; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-22 19:01 UTC (permalink / raw) To: FUJITA Tomonori Cc: ksummit-2008-discuss, linux-scsi, bart.vanassche, James.Bottomley, scst-devel FUJITA Tomonori wrote: > On Thu, 21 Aug 2008 23:42:51 +0400 > Vladislav Bolkhovitin <vst@vlnb.net> wrote: > >>> Hmm, really? STGT development is more active IET. >> Tomo-san, be honest. It was *you*, who stopped the IET development, >> forcing people to switch to STGT. There is no point to prepare patches >> for IET, if they will never get merged. > > I stopped working on IET but it doesn't mean that I force others to > stop working on IET. Arne said that he merges patches. Well, how about declaring unlimited code freeze for all core parts? Has anybody, except you, had a right to merge patches to IET? Which %% of coming non-trivial patches have you merged in the last few years? Near zero? For instance, how many not too bad patches from Ross S. W. Walker were silently ignored? He didn't received even small comments, which made him so frustrated, so he stopped all the development activities? Vlad ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-22 19:01 ` Vladislav Bolkhovitin @ 2008-08-23 2:35 ` FUJITA Tomonori 2008-08-27 18:00 ` Vladislav Bolkhovitin 0 siblings, 1 reply; 34+ messages in thread From: FUJITA Tomonori @ 2008-08-23 2:35 UTC (permalink / raw) To: vst Cc: fujita.tomonori, ksummit-2008-discuss, bart.vanassche, James.Bottomley, scst-devel, linux-scsi On Fri, 22 Aug 2008 23:01:51 +0400 Vladislav Bolkhovitin <vst@vlnb.net> wrote: > FUJITA Tomonori wrote: > > On Thu, 21 Aug 2008 23:42:51 +0400 > > Vladislav Bolkhovitin <vst@vlnb.net> wrote: > > > >>> Hmm, really? STGT development is more active IET. > >> Tomo-san, be honest. It was *you*, who stopped the IET development, > >> forcing people to switch to STGT. There is no point to prepare patches > >> for IET, if they will never get merged. > > > > I stopped working on IET but it doesn't mean that I force others to > > stop working on IET. Arne said that he merges patches. > > Well, how about declaring unlimited code freeze for all core parts? Why is it difficult for you to understand what I wrote? I wrote again: I stopped working on IET but it doesn't mean that I force others to stop working on IET. > Has anybody, except you, had a right to merge patches to IET? Nobody asked me to give a right to merge patches to IET. When Arne asked me, I was happy to give it him because he has a good knowledge of IET code. > Which %% of > coming non-trivial patches have you merged in the last few years? Near > zero? Probably, near zero because I stopped working on IET. What does 'stop working on something' mean for you? > For instance, how many not too bad patches from Ross S. W. Walker > were silently ignored? He didn't received even small comments, which > made him so frustrated, so he stopped all the development activities? Several days ago on the mailing list, I saw that Ross works on IET with Arne. I have no idea why you think that you know better than me about the project that I had maintained. But can you please stop talking about wrong information? I can just ignore your wrong statements (I often did) but I don't like to see other people misunderstanding. Thanks, ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-23 2:35 ` FUJITA Tomonori @ 2008-08-27 18:00 ` Vladislav Bolkhovitin 0 siblings, 0 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-27 18:00 UTC (permalink / raw) To: FUJITA Tomonori; +Cc: James.Bottomley, linux-scsi, scst-devel FUJITA Tomonori wrote: >>>>> Hmm, really? STGT development is more active IET. >>>> Tomo-san, be honest. It was *you*, who stopped the IET development, >>>> forcing people to switch to STGT. There is no point to prepare patches >>>> for IET, if they will never get merged. >>> I stopped working on IET but it doesn't mean that I force others to >>> stop working on IET. Arne said that he merges patches. >> Well, how about declaring unlimited code freeze for all core parts? > > Why is it difficult for you to understand what I wrote? I wrote again: > > I stopped working on IET but it doesn't mean that I force others to > stop working on IET. You stopped working on it, but you didn't stop maintaining it, did you? The were neither announcement of it, nor request for somebody else to do the maintainership work. So, for everybody you remained the maintainer and the only person who can accept or reject patches. >> Has anybody, except you, had a right to merge patches to IET? > > Nobody asked me to give a right to merge patches to IET. When Arne > asked me, I was happy to give it him because he has a good knowledge > of IET code. Great position! You put yourself as misunderstood. But the problem that everybody misunderstood you and it's really hard to believe that you wasn't aware of it. In fact, it was *you* who should have asked about the replacement. It's pretty regular practice in Open Source, when people get bored of some project and gracefully pass its maintainership to someone other. >> Which %% of >> coming non-trivial patches have you merged in the last few years? Near >> zero? > > Probably, near zero because I stopped working on IET. What does 'stop > working on something' mean for you? > > >> For instance, how many not too bad patches from Ross S. W. Walker >> were silently ignored? He didn't received even small comments, which >> made him so frustrated, so he stopped all the development activities? > > Several days ago on the mailing list, I saw that Ross works on IET > with Arne. > > > I have no idea why you think that you know better than me about the > project that I had maintained. But can you please stop talking about > wrong information? I can just ignore your wrong statements (I often > did) but I don't like to see other people misunderstanding. This isn't only my impression, this is rather what people using IET think. Everyone after digging in IET mailing list archive can find the evidences. For instance, see this e-mail: http://www.nabble.com/forum/ViewPost.jtp?post=13776875&framed=y You didn't disprove it, although definitely read, because you replied on the later message in that thread. So, what one should think after that and after seeing a lot of good patches going to nowhere and only trivial ones merged? > Thanks, > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Scst-devel mailing list > Scst-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/scst-devel > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-21 19:42 [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux Vladislav Bolkhovitin 2008-08-21 23:19 ` FUJITA Tomonori @ 2008-08-21 23:31 ` Mike Christie 2008-08-21 23:53 ` James Bottomley ` (2 more replies) 2008-08-22 0:26 ` [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux Arjan van de Ven 2 siblings, 3 replies; 34+ messages in thread From: Mike Christie @ 2008-08-21 23:31 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: ksummit-2008-discuss, James Bottomley, FUJITA Tomonori, Nicholas A. Bellinger, scst-devel, linux-scsi, Bart Van Assche snip >> non overlapping code bases in the kernel is the right thing to do, so >> what I'd like is for us to evolve the existing solution into something >> that will work for both (by taking pieces of the out of SCST and placing >> them into STGT). >> snip > > James, you missed that SCST for a long time has support for implementing > backstorage devices in the user space. This is provided through > backstorage device handler called scst_user. You can find its interface Does scst support moving the scsi state machine there? I think that is what James meant by some of his comments, but I do not think this detail is too important. If you can, great one less todo item. > > If all necessary pieces of STGT moved in the kernel, it would become > pretty much the same as SCST at the moment. In the top paragraph James is saying to move scst into stgt, so it seems like we can do the following: 1. You and with Nick battle each other about what are the best pieces of scst and his target and what should go upstream. 2. Do a ibm vscsi target for the new framework since that is the only upstream kernel target right now. For qla2xxx, we can forget the patches we sent qlogic and use what comes with the common framework since scst has one already. 3. Start sending patches for common code like scatterlist improvements and scatterlist memory reservations. 4. Send patches for new target infrastructure core code for review and cleanup. And send ibm vscsi target driver for an example and to make sure there are no functionality regressions. The latter should not be too hard because stgt does not have many features right? :) 5. When common code is merged and new core target infrastructure is through the review process we can just swap out the new code for stgt and name it whatever you want. Tomo and I can handle trying to modify the new framework to support putting a scsi state machine in userspace and sharing that with kernel code. Right now the primary targets for stgt that users are deploying are are completely in userspace, so we do not have much to worry about. There are ibm vscsi users, but they are a lot smaller in number compared to iscsi. I would bet the ibmvscsi would prefer to use the kernel target we make too. Our userspace tools will also be able to support both kernel space and userspace targets with little trouble so distros that have stgt will not notice any differences. Surely this will be faster than writing all these mails and wasting time on this :) I think James also said something about moving STGT in-kernel to get performance gains, but I do not think it means that we have to push exact code that sits in Tomo's git tree from usrspace into the kernel. If along the way we replace it with scst or Nick's code and we end up with a variant of scst or Nicks code that can still support userspace targets then I do not think any one is going to make long threads like these have resulted in :) Will this work for everyone? ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-21 23:31 ` [Ksummit-2008-discuss] " Mike Christie @ 2008-08-21 23:53 ` James Bottomley 2008-08-22 19:00 ` Vladislav Bolkhovitin 2008-08-22 18:59 ` [Ksummit-2008-discuss] " Vladislav Bolkhovitin 2008-08-25 21:59 ` [Ksummit-2008-discuss] " Nicholas A. Bellinger 2 siblings, 1 reply; 34+ messages in thread From: James Bottomley @ 2008-08-21 23:53 UTC (permalink / raw) To: Mike Christie Cc: Vladislav Bolkhovitin, ksummit-2008-discuss, FUJITA Tomonori, Nicholas A. Bellinger, scst-devel, linux-scsi, Bart Van Assche On Thu, 2008-08-21 at 18:31 -0500, Mike Christie wrote: > I think James also said something about moving STGT in-kernel to get > performance gains, but I do not think it means that we have to push > exact code that sits in Tomo's git tree from usrspace into the kernel. > If along the way we replace it with scst or Nick's code and we end up > with a variant of scst or Nicks code that can still support userspace > targets then I do not think any one is going to make long threads like > these have resulted in :) I meant actually allowing performance critical pieces to work either in-user or in-kernel. How, I'm not sure ... if we could use the same code for both, that would be brilliant ... if we have to have separate pieces, that will be OK. The error injection and transport debug people think it's important to have the state machine in user space for fast prototyping and debugging, so I'm not going to take this away from them. > Will this work for everyone? Sounds like a plan. (However, it also sounds suspiciously like the last plan we had from the storage summit which didn't actually attract any implementers ...) James ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-21 23:53 ` James Bottomley @ 2008-08-22 19:00 ` Vladislav Bolkhovitin 2008-08-22 19:13 ` James Bottomley 0 siblings, 1 reply; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-22 19:00 UTC (permalink / raw) To: James Bottomley Cc: Mike Christie, linux-scsi, ksummit-2008-discuss, Nicholas A. Bellinger, FUJITA Tomonori, scst-devel James Bottomley wrote: > On Thu, 2008-08-21 at 18:31 -0500, Mike Christie wrote: >> I think James also said something about moving STGT in-kernel to get >> performance gains, but I do not think it means that we have to push >> exact code that sits in Tomo's git tree from usrspace into the kernel. >> If along the way we replace it with scst or Nick's code and we end up >> with a variant of scst or Nicks code that can still support userspace >> targets then I do not think any one is going to make long threads like >> these have resulted in :) > > I meant actually allowing performance critical pieces to work either > in-user or in-kernel. How, I'm not sure ... if we could use the same > code for both, that would be brilliant ... if we have to have separate > pieces, that will be OK. > > The error injection and transport debug people think it's important to > have the state machine in user space for fast prototyping and debugging, > so I'm not going to take this away from them. Nobody has been asking you about that. Simply, there's no need in it. >> Will this work for everyone? > > Sounds like a plan. (However, it also sounds suspiciously like the last > plan we had from the storage summit which didn't actually attract any > implementers ...) I at that time heard nothing about it. Nobody asked me, nobody let me know about it and nobody asked me to participate. Nothing about it was in linux-scsi. It was completely behind my back. Vlad ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-22 19:00 ` Vladislav Bolkhovitin @ 2008-08-22 19:13 ` James Bottomley 2008-08-27 17:49 ` Vladislav Bolkhovitin 0 siblings, 1 reply; 34+ messages in thread From: James Bottomley @ 2008-08-22 19:13 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Mike Christie, linux-scsi, ksummit-2008-discuss, Nicholas A. Bellinger, FUJITA Tomonori, scst-devel On Fri, 2008-08-22 at 23:00 +0400, Vladislav Bolkhovitin wrote: > James Bottomley wrote: > > On Thu, 2008-08-21 at 18:31 -0500, Mike Christie wrote: > >> I think James also said something about moving STGT in-kernel to get > >> performance gains, but I do not think it means that we have to push > >> exact code that sits in Tomo's git tree from usrspace into the kernel. > >> If along the way we replace it with scst or Nick's code and we end up > >> with a variant of scst or Nicks code that can still support userspace > >> targets then I do not think any one is going to make long threads like > >> these have resulted in :) > > > > I meant actually allowing performance critical pieces to work either > > in-user or in-kernel. How, I'm not sure ... if we could use the same > > code for both, that would be brilliant ... if we have to have separate > > pieces, that will be OK. > > > > The error injection and transport debug people think it's important to > > have the state machine in user space for fast prototyping and debugging, > > so I'm not going to take this away from them. > > Nobody has been asking you about that. Simply, there's no need in it. I wasn't aware you were privy to my conversations ... however, I suggest that you must have missed it. Quite a few people who want to work on transports don't have the budget for the hardware. Emulators are things they use to get around this problem. To them, therefore, it's a definite need. > >> Will this work for everyone? > > > > Sounds like a plan. (However, it also sounds suspiciously like the last > > plan we had from the storage summit which didn't actually attract any > > implementers ...) > > I at that time heard nothing about it. Nobody asked me, nobody let me > know about it and nobody asked me to participate. Nothing about it was > in linux-scsi. It was completely behind my back. http://www.usenix.org/events/lsf08/ summaries page 6. The invitation to participate was here: http://marc.info/?t=119325401900042 James ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-22 19:13 ` James Bottomley @ 2008-08-27 17:49 ` Vladislav Bolkhovitin 0 siblings, 0 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-27 17:49 UTC (permalink / raw) To: James Bottomley Cc: Mike Christie, linux-scsi, Nicholas A. Bellinger, FUJITA Tomonori, scst-devel James Bottomley wrote: > On Fri, 2008-08-22 at 23:00 +0400, Vladislav Bolkhovitin wrote: >> James Bottomley wrote: >>> On Thu, 2008-08-21 at 18:31 -0500, Mike Christie wrote: >>>> I think James also said something about moving STGT in-kernel to get >>>> performance gains, but I do not think it means that we have to push >>>> exact code that sits in Tomo's git tree from usrspace into the kernel. >>>> If along the way we replace it with scst or Nick's code and we end up >>>> with a variant of scst or Nicks code that can still support userspace >>>> targets then I do not think any one is going to make long threads like >>>> these have resulted in :) >>> I meant actually allowing performance critical pieces to work either >>> in-user or in-kernel. How, I'm not sure ... if we could use the same >>> code for both, that would be brilliant ... if we have to have separate >>> pieces, that will be OK. >>> >>> The error injection and transport debug people think it's important to >>> have the state machine in user space for fast prototyping and debugging, >>> so I'm not going to take this away from them. >> Nobody has been asking you about that. Simply, there's no need in it. > > I wasn't aware you were privy to my conversations ... however, I suggest > that you must have missed it. > > Quite a few people who want to work on transports don't have the budget > for the hardware. Emulators are things they use to get around this > problem. To them, therefore, it's a definite need. Seems, there is a confusion and we are writing about different things. I mean backstorage device emulation in user space (this is what scst_user provides), but seems you mean the opposite side of SCSI commands processing in target: target transports, i.e. target drivers, in user space, which emulate some SCSI transport, correct? >>>> Will this work for everyone? >>> Sounds like a plan. (However, it also sounds suspiciously like the last >>> plan we had from the storage summit which didn't actually attract any >>> implementers ...) >> I at that time heard nothing about it. Nobody asked me, nobody let me >> know about it and nobody asked me to participate. Nothing about it was >> in linux-scsi. It was completely behind my back. > > http://www.usenix.org/events/lsf08/ > > summaries page 6. > > The invitation to participate was here: > > http://marc.info/?t=119325401900042 I was aware about the event, although for obvious reasons wasn't able to participate. I meant not it, but the decision and the plan. Neither one of them was published in any public place, wasn't it? > James > > > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-21 23:31 ` [Ksummit-2008-discuss] " Mike Christie 2008-08-21 23:53 ` James Bottomley @ 2008-08-22 18:59 ` Vladislav Bolkhovitin 2008-08-22 19:05 ` Arjan van de Ven 2008-08-22 19:46 ` Mike Christie 2008-08-25 21:59 ` [Ksummit-2008-discuss] " Nicholas A. Bellinger 2 siblings, 2 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-22 18:59 UTC (permalink / raw) To: Mike Christie Cc: FUJITA Tomonori, linux-scsi, ksummit-2008-discuss, Nicholas A. Bellinger, James Bottomley, scst-devel Mike Christie wrote: > snip > >>> non overlapping code bases in the kernel is the right thing to do, so >>> what I'd like is for us to evolve the existing solution into something >>> that will work for both (by taking pieces of the out of SCST and placing >>> them into STGT). >>> > > snip > >> James, you missed that SCST for a long time has support for implementing >> backstorage devices in the user space. This is provided through >> backstorage device handler called scst_user. You can find its interface > > Does scst support moving the scsi state machine there? I think that is > what James meant by some of his comments, but I do not think this detail > is too important. If you can, great one less todo item. Scst_user provides hooks for all the SCST core states. Some of them are optional, like for commands parsing, some are required, like for commands execution. Is it sufficient? I would suggest you to look at fileio_tgt. It's a full functional SBC device emulator (more than full, actually, since it's also a test program). >> If all necessary pieces of STGT moved in the kernel, it would become >> pretty much the same as SCST at the moment. > > In the top paragraph James is saying to move scst into stgt, so it seems > like we can do the following: > > 1. You and with Nick battle each other about what are the best pieces of > scst and his target and what should go upstream. We generally already agreed in Nick's iSCSI target over SCST core engine with some necessary modifications in it taken from LIO core. > 2. Do a ibm vscsi target for the new framework since that is the only > upstream kernel target right now. For qla2xxx, we can forget the patches > we sent qlogic and use what comes with the common framework since scst > has one already. > > 3. Start sending patches for common code like scatterlist improvements > and scatterlist memory reservations. What do you mean? > 4. Send patches for new target infrastructure core code for review and > cleanup. And send ibm vscsi target driver for an example and to make > sure there are no functionality regressions. The latter should not be > too hard because stgt does not have many features right? :) > > 5. When common code is merged and new core target infrastructure is > through the review process we can just swap out the new code for stgt > and name it whatever you want. > > Tomo and I can handle trying to modify the new framework to support > putting a scsi state machine in userspace and sharing that with kernel > code. Right now the primary targets for stgt that users are deploying > are are completely in userspace, so we do not have much to worry about. > There are ibm vscsi users, but they are a lot smaller in number compared > to iscsi. I would bet the ibmvscsi would prefer to use the kernel target > we make too. > > Our userspace tools will also be able to support both kernel space and > userspace targets with little trouble so distros that have stgt will not > notice any differences. So, do you propose to start converting STGT to SCST? Do I understand you correctly? > Surely this will be faster than writing all these mails and wasting time > on this :) > > I think James also said something about moving STGT in-kernel to get > performance gains, but I do not think it means that we have to push > exact code that sits in Tomo's git tree from usrspace into the kernel. > If along the way we replace it with scst or Nick's code and we end up > with a variant of scst or Nicks code that can still support userspace > targets then I do not think any one is going to make long threads like > these have resulted in :) > > Will this work for everyone? We need to agree at first which target's architecture we are going to use as a base in which we will incorporate the necessary additions from other targets. We with Nick have chosen SCST, now it's your, James and other interested people's turn. As I already wrote, STGT and its kernel part is too widely incompatible with SCST and choosing it as a base will lead to unneeded effort. I would propose to return to this question after I submit SCST patches. Then we would see the code and decide, what's good in it and what's bad. Vlad ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-22 18:59 ` [Ksummit-2008-discuss] " Vladislav Bolkhovitin @ 2008-08-22 19:05 ` Arjan van de Ven 2008-08-22 19:46 ` Mike Christie 1 sibling, 0 replies; 34+ messages in thread From: Arjan van de Ven @ 2008-08-22 19:05 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Mike Christie, James Bottomley, linux-scsi, ksummit-2008-discuss, scst-devel Vladislav Bolkhovitin wrote: > We need to agree at first which target's architecture we are going to what we need is for this thread to move to a more useful place than the kernel summit list .. a polite request to everyone on the thread to remove the kernel summit list from the CC... ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-22 18:59 ` [Ksummit-2008-discuss] " Vladislav Bolkhovitin 2008-08-22 19:05 ` Arjan van de Ven @ 2008-08-22 19:46 ` Mike Christie 2008-08-27 17:51 ` Vladislav Bolkhovitin 1 sibling, 1 reply; 34+ messages in thread From: Mike Christie @ 2008-08-22 19:46 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: FUJITA Tomonori, linux-scsi, Nicholas A. Bellinger, James Bottomley, scst-devel Vladislav Bolkhovitin wrote: >> 3. Start sending patches for common code like scatterlist improvements >> and scatterlist memory reservations. > > What do you mean? There were some nice functionality that Nick's target had and I thought scst had too that could be more generic like the ability to reservre memory for a scatterlist or basically make sure you can have a scatterlist that is within a drivers/hardwares limits and can fullfill the request. For exmaple if the target driver could only do X segments, but the command was 8 MBs then we need a scatterlist with big segments, and I thought you guys had nice to code to handle this. It is the same thing that is needed by the SCSI upper layer drives when chaining is not supported. You should rip that out of the scst patch set or whatever Nicsk patchset is called and get it in right away to make it easier to review the target patches (less target code to argue about :)). > >> 4. Send patches for new target infrastructure core code for review and >> cleanup. And send ibm vscsi target driver for an example and to make >> sure there are no functionality regressions. The latter should not be >> too hard because stgt does not have many features right? :) >> >> 5. When common code is merged and new core target infrastructure is >> through the review process we can just swap out the new code for stgt >> and name it whatever you want. >> >> Tomo and I can handle trying to modify the new framework to support >> putting a scsi state machine in userspace and sharing that with kernel >> code. Right now the primary targets for stgt that users are deploying >> are are completely in userspace, so we do not have much to worry >> about. There are ibm vscsi users, but they are a lot smaller in number >> compared to iscsi. I would bet the ibmvscsi would prefer to use the >> kernel target we make too. >> >> Our userspace tools will also be able to support both kernel space and >> userspace targets with little trouble so distros that have stgt will >> not notice any differences. > > So, do you propose to start converting STGT to SCST? Do I understand you > correctly? Will we ever finish these threads if we go the other way where we convert scst to stgt :) Yes, we will convert stgt to scst if that is how you want to word it. I think when people are saying evolve the code they do not mean that we have to force scst into stgt or the reverse. With James allowing performance critical stuff in the kernel we can add whatever is best. For the stgt functionalty that may not be support by scst or whatever is going to go in, then yeah, Tomo and I can handle that. ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-22 19:46 ` Mike Christie @ 2008-08-27 17:51 ` Vladislav Bolkhovitin 0 siblings, 0 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-27 17:51 UTC (permalink / raw) To: Mike Christie Cc: FUJITA Tomonori, linux-scsi, Nicholas A. Bellinger, James Bottomley, scst-devel Mike Christie wrote: > Vladislav Bolkhovitin wrote: >>> 3. Start sending patches for common code like scatterlist improvements >>> and scatterlist memory reservations. >> What do you mean? > > There were some nice functionality that Nick's target had and I thought > scst had too that could be more generic like the ability to reservre > memory for a scatterlist or basically make sure you can have a > scatterlist that is within a drivers/hardwares limits and can fullfill > the request. For exmaple if the target driver could only do X segments, > but the command was 8 MBs then we need a scatterlist with big segments, > and I thought you guys had nice to code to handle this. It is the same > thing that is needed by the SCSI upper layer drives when chaining is not > supported. > > You should rip that out of the scst patch set or whatever Nicsk patchset > is called and get it in right away to make it easier to review the > target patches (less target code to argue about :)). Yes, there is such code. Sure, it can be extracted and posted as a separate patch, so other drivers would be able to use it as well (it isn't SCSI specific, so, I think, should be put somewhere in drivers/base/). But, in fact, so far we have not argued a bit of code. We argue fundamental principles, so extracting SGV cache or Nick's analog won't actually change anything. >>> 4. Send patches for new target infrastructure core code for review and >>> cleanup. And send ibm vscsi target driver for an example and to make >>> sure there are no functionality regressions. The latter should not be >>> too hard because stgt does not have many features right? :) >>> >>> 5. When common code is merged and new core target infrastructure is >>> through the review process we can just swap out the new code for stgt >>> and name it whatever you want. >>> >>> Tomo and I can handle trying to modify the new framework to support >>> putting a scsi state machine in userspace and sharing that with kernel >>> code. Right now the primary targets for stgt that users are deploying >>> are are completely in userspace, so we do not have much to worry >>> about. There are ibm vscsi users, but they are a lot smaller in number >>> compared to iscsi. I would bet the ibmvscsi would prefer to use the >>> kernel target we make too. >>> >>> Our userspace tools will also be able to support both kernel space and >>> userspace targets with little trouble so distros that have stgt will >>> not notice any differences. >> So, do you propose to start converting STGT to SCST? Do I understand you >> correctly? > > Will we ever finish these threads if we go the other way where we > convert scst to stgt :) Yes, we will convert stgt to scst if that is how > you want to word it. I think when people are saying evolve the code they > do not mean that we have to force scst into stgt or the reverse. With > James allowing performance critical stuff in the kernel we can add > whatever is best. For the stgt functionalty that may not be support by > scst or whatever is going to go in, then yeah, Tomo and I can handle that. What not clear to me are the reasons behind decision to use STGT as a base point for future development. AFAIK, the only valuable advantage it has over SCST is ibmvscsi target driver. And that's all. ISER target driver doesn't need any kernel support, so can happily live without STGT. Correct me, if I wrong. Usually people, choosing the starting point of some consolidating project among several similar ones, choose one, which is the closest to what they ultimately want to see in the finish. Apparently, SCST is a lot closer to that, than STGT, correct? So, then, why the choice was done to start from STGT? Definitely, this choice will add a lot of effort without any return. Or, am I missing something? There is nothing personal in my questions, I'm caring only about amount of needed effort. Vlad ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-21 23:31 ` [Ksummit-2008-discuss] " Mike Christie 2008-08-21 23:53 ` James Bottomley 2008-08-22 18:59 ` [Ksummit-2008-discuss] " Vladislav Bolkhovitin @ 2008-08-25 21:59 ` Nicholas A. Bellinger 2008-08-27 17:56 ` Vladislav Bolkhovitin 2 siblings, 1 reply; 34+ messages in thread From: Nicholas A. Bellinger @ 2008-08-25 21:59 UTC (permalink / raw) To: Mike Christie Cc: Vladislav Bolkhovitin, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche On Thu, 2008-08-21 at 18:31 -0500, Mike Christie wrote: > snip > Ok, I took in the weekend to let things settle for a few moments.. > > > > If all necessary pieces of STGT moved in the kernel, it would become > > pretty much the same as SCST at the moment. > > In the top paragraph James is saying to move scst into stgt, so it seems > like we can do the following: > > 1. You and with Nick battle each other about what are the best pieces of > scst and his target and what should go upstream. > Ok, Vlad and I have discussed and determined that the process will be something roughly along the lines of *) Vlad releases upstream patches for SCST Core in the late v2.6.27 time frame. *) /me will cherry picks from lio-core-2.6.git specific code (namely the memory allocation and mapping algorithms) and begin to integrate these into SCST-Core upstream and get bulk I/O moving between SCST Core kernel/user CDB generation API. *) Around the same time, I will begin the porting process of moving LIO-Target to use the new upstream target infrastructure, whatever it shall be called.. :-) > 2. Do a ibm vscsi target for the new framework since that is the only > upstream kernel target right now. For qla2xxx, we can forget the patches > we sent qlogic and use what comes with the common framework since scst > has one already. This would be fun.. :-) What hardware do I need to do this again..? > > 3. Start sending patches for common code like scatterlist improvements > and scatterlist memory reservations. > Ok, I have been thinking about how to go about this, and it seems to make sense to incorporate these improvements from LIO-Core into SCST Core during the first phase. This codepath in LIO is historically known as ICF_SCSI_DATA_SG_IO_CDB which handles the 1 -> N allocation and mapping for the generic linked list pages -> contigious scatterlist array memory mapping case. This is also piece that can be generic for handling WRITE/READ I/Os with LBA + SECTOR_COUNT + SECTOR_SIZE across the "SCSI-less" target cases. I guess putting it into SCST Core for now makes sense, espically if we move SCST Core into supporting the SCSI-less target fabrics.. > 4. Send patches for new target infrastructure core code for review and > cleanup. And send ibm vscsi target driver for an example and to make > sure there are no functionality regressions. The latter should not be > too hard because stgt does not have many features right? :) > Understood. > 5. When common code is merged and new core target infrastructure is > through the review process we can just swap out the new code for stgt > and name it whatever you want. > Heh, looks like we have to start thinking of a new name. :-) > Tomo and I can handle trying to modify the new framework to support > putting a scsi state machine in userspace and sharing that with kernel > code. Right now the primary targets for stgt that users are deploying > are are completely in userspace, so we do not have much to worry about. > There are ibm vscsi users, but they are a lot smaller in number compared > to iscsi. I would bet the ibmvscsi would prefer to use the kernel target > we make too. > Understood. > Our userspace tools will also be able to support both kernel space and > userspace targets with little trouble so distros that have stgt will not > notice any differences. > So this is one of the items that I mentioned to Vlad as being a potential stumbling block.. I stated that I have no problem dumping the LIO IOCTL in favor of something better, and having to break backwards compat with LIO userspace tools (well, until I have to emulate the backwards compat wrt target-ctl ;-)) is something I am ready to deal with. So I definately see your point here, having the exist CLI logic in place into distros is something that we are going to have to deal with (even if the core behind them is completely different). I should also mention that virtually all of the configuration logic done from the LIO-Core and LIO-Target IOCTLs today is intended (minus a bug or two :-) to be done without having to shutdown/stop anything other than the referenced object for the target-ctl operation. Obviously, I really want to keep the same functionality with the CLI interface the LIO pieces are ported to. I will be sure to take a look at the STGT control interface and see how I can fit the current functionality in. I believe SCST uses an IOCTL today as well, which would put them in a similar situation. > Surely this will be faster than writing all these mails and wasting time > on this :) > > I think James also said something about moving STGT in-kernel to get > performance gains, but I do not think it means that we have to push > exact code that sits in Tomo's git tree from usrspace into the kernel. > If along the way we replace it with scst or Nick's code and we end up > with a variant of scst or Nicks code that can still support userspace > targets then I do not think any one is going to make long threads like > these have resulted in :) > > Will this work for everyone? > Sounds good. Many thanks for putting things into perspective mnc. :-) --nab ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-25 21:59 ` [Ksummit-2008-discuss] " Nicholas A. Bellinger @ 2008-08-27 17:56 ` Vladislav Bolkhovitin 2008-08-27 17:59 ` [Scst-devel] " Ming Zhang 2008-08-27 22:13 ` Kernel Level Generic Target Mode control path Nicholas A. Bellinger 0 siblings, 2 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-27 17:56 UTC (permalink / raw) To: Nicholas A. Bellinger Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche Nicholas A. Bellinger wrote: > On Thu, 2008-08-21 at 18:31 -0500, Mike Christie wrote: >> snip >> > > Ok, I took in the weekend to let things settle for a few moments.. > >>> If all necessary pieces of STGT moved in the kernel, it would become >>> pretty much the same as SCST at the moment. >> In the top paragraph James is saying to move scst into stgt, so it seems >> like we can do the following: >> >> 1. You and with Nick battle each other about what are the best pieces of >> scst and his target and what should go upstream. >> > > Ok, Vlad and I have discussed and determined that the process will be > something roughly along the lines of > > *) Vlad releases upstream patches for SCST Core in the late v2.6.27 time > frame. > *) /me will cherry picks from lio-core-2.6.git specific code (namely the > memory allocation and mapping algorithms) and begin to integrate these > into SCST-Core upstream and get bulk I/O moving between SCST Core > kernel/user CDB generation API. > *) Around the same time, I will begin the porting process of moving > LIO-Target to use the new upstream target infrastructure, whatever it > shall be called.. :-) I agree >> Our userspace tools will also be able to support both kernel space and >> userspace targets with little trouble so distros that have stgt will not >> notice any differences. > > So this is one of the items that I mentioned to Vlad as being a > potential stumbling block.. I stated that I have no problem dumping the > LIO IOCTL in favor of something better, and having to break backwards > compat with LIO userspace tools (well, until I have to emulate the > backwards compat wrt target-ctl ;-)) is something I am ready to deal > with. > > So I definately see your point here, having the exist CLI logic in place > into distros is something that we are going to have to deal with (even > if the core behind them is completely different). > > I should also mention that virtually all of the configuration logic done > from the LIO-Core and LIO-Target IOCTLs today is intended (minus a bug > or two :-) to be done without having to shutdown/stop anything other > than the referenced object for the target-ctl operation. Obviously, I > really want to keep the same functionality with the CLI interface the > LIO pieces are ported to. > > I will be sure to take a look at the STGT control interface and see how > I can fit the current functionality in. I believe SCST uses an IOCTL > today as well, which would put them in a similar situation. I, personally, don't like an interface, like tgtadm, which tries to do all non-trivial configuration work from a single command line tool, because of the following 3 reasons: 1. It's a lot of effort to write and maintain such a tool, because it needs to be extensible to work with new modules and modes. For instance, iptables tool is 86K lines long. The whole netfilter code for all network protocols in the kernel is less that 50K lines long. Do we want such a code bloat (170% of code to configure) and dedicated team of maintainers to solve a fundamentally simple configuration task? 2. It assumes the stateless type of configuration, when each call configures exactly one thing without any side effects on already configured or future entries. This approach is good for cases like iptables, but for SCSI targets it's possible that several configuration steps require to be done in an atomic manner, like adding an iSCSI target and configuring its parameters. 3. It's hard to read 5+ parameters in one command line, so it's a lot easier to make a mistake there. So, I believe, a configuration interface should be rather /proc or /sys interface based. I don't think we should care much about backward compatibility with tgtadm, because the existing interface doesn't reach the state of being widely used. As I already mentioned, only ibmvscsi at the moment uses it, hardware for which is pretty rare. Thus, I would suggest that before making the further move we should also consider configuration interfaces of SCST and LIO and choose the best things from all 3. Vlad ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Scst-devel] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-27 17:56 ` Vladislav Bolkhovitin @ 2008-08-27 17:59 ` Ming Zhang 2008-08-28 17:48 ` Vladislav Bolkhovitin 2008-08-27 22:13 ` Kernel Level Generic Target Mode control path Nicholas A. Bellinger 1 sibling, 1 reply; 34+ messages in thread From: Ming Zhang @ 2008-08-27 17:59 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Nicholas A. Bellinger, FUJITA Tomonori, Mike Christie, linux-scsi, James Bottomley, scst-devel On Wed, 2008-08-27 at 21:56 +0400, Vladislav Bolkhovitin wrote: > Nicholas A. Bellinger wrote: > > On Thu, 2008-08-21 at 18:31 -0500, Mike Christie wrote: > >> snip > >> > > > > Ok, I took in the weekend to let things settle for a few moments.. > > > >>> If all necessary pieces of STGT moved in the kernel, it would become > >>> pretty much the same as SCST at the moment. > >> In the top paragraph James is saying to move scst into stgt, so it seems > >> like we can do the following: > >> > >> 1. You and with Nick battle each other about what are the best pieces of > >> scst and his target and what should go upstream. > >> > > > > Ok, Vlad and I have discussed and determined that the process will be > > something roughly along the lines of > > > > *) Vlad releases upstream patches for SCST Core in the late v2.6.27 time > > frame. > > *) /me will cherry picks from lio-core-2.6.git specific code (namely the > > memory allocation and mapping algorithms) and begin to integrate these > > into SCST-Core upstream and get bulk I/O moving between SCST Core > > kernel/user CDB generation API. > > *) Around the same time, I will begin the porting process of moving > > LIO-Target to use the new upstream target infrastructure, whatever it > > shall be called.. :-) > > I agree > > >> Our userspace tools will also be able to support both kernel space and > >> userspace targets with little trouble so distros that have stgt will not > >> notice any differences. > > > > So this is one of the items that I mentioned to Vlad as being a > > potential stumbling block.. I stated that I have no problem dumping the > > LIO IOCTL in favor of something better, and having to break backwards > > compat with LIO userspace tools (well, until I have to emulate the > > backwards compat wrt target-ctl ;-)) is something I am ready to deal > > with. > > > > So I definately see your point here, having the exist CLI logic in place > > into distros is something that we are going to have to deal with (even > > if the core behind them is completely different). > > > > I should also mention that virtually all of the configuration logic done > > from the LIO-Core and LIO-Target IOCTLs today is intended (minus a bug > > or two :-) to be done without having to shutdown/stop anything other > > than the referenced object for the target-ctl operation. Obviously, I > > really want to keep the same functionality with the CLI interface the > > LIO pieces are ported to. > > > > I will be sure to take a look at the STGT control interface and see how > > I can fit the current functionality in. I believe SCST uses an IOCTL > > today as well, which would put them in a similar situation. > > I, personally, don't like an interface, like tgtadm, which tries to do > all non-trivial configuration work from a single command line tool, > because of the following 3 reasons: > > 1. It's a lot of effort to write and maintain such a tool, because it > needs to be extensible to work with new modules and modes. For instance, > iptables tool is 86K lines long. The whole netfilter code for all > network protocols in the kernel is less that 50K lines long. Do we want > such a code bloat (170% of code to configure) and dedicated team of > maintainers to solve a fundamentally simple configuration task? > > 2. It assumes the stateless type of configuration, when each call > configures exactly one thing without any side effects on already > configured or future entries. This approach is good for cases like > iptables, but for SCSI targets it's possible that several configuration > steps require to be done in an atomic manner, like adding an iSCSI > target and configuring its parameters. > > 3. It's hard to read 5+ parameters in one command line, so it's a lot > easier to make a mistake there. > > So, I believe, a configuration interface should be rather /proc or /sys > interface based. I don't think we should care much about backward > compatibility with tgtadm, because the existing interface doesn't reach > the state of being widely used. As I already mentioned, only ibmvscsi at > the moment uses it, hardware for which is pretty rare. > forget about proc. configfs is better. but problem is how u configure user space target with configfs? > Thus, I would suggest that before making the further move we should also > consider configuration interfaces of SCST and LIO and choose the best > things from all 3. > > Vlad > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Scst-devel mailing list > Scst-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/scst-devel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-27 17:59 ` [Scst-devel] " Ming Zhang @ 2008-08-28 17:48 ` Vladislav Bolkhovitin 0 siblings, 0 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-28 17:48 UTC (permalink / raw) To: blackmagic02881 Cc: Nicholas A. Bellinger, FUJITA Tomonori, Mike Christie, linux-scsi, James Bottomley, scst-devel Ming Zhang wrote: >> I, personally, don't like an interface, like tgtadm, which tries to do >> all non-trivial configuration work from a single command line tool, >> because of the following 3 reasons: >> >> 1. It's a lot of effort to write and maintain such a tool, because it >> needs to be extensible to work with new modules and modes. For instance, >> iptables tool is 86K lines long. The whole netfilter code for all >> network protocols in the kernel is less that 50K lines long. Do we want >> such a code bloat (170% of code to configure) and dedicated team of >> maintainers to solve a fundamentally simple configuration task? >> >> 2. It assumes the stateless type of configuration, when each call >> configures exactly one thing without any side effects on already >> configured or future entries. This approach is good for cases like >> iptables, but for SCSI targets it's possible that several configuration >> steps require to be done in an atomic manner, like adding an iSCSI >> target and configuring its parameters. >> >> 3. It's hard to read 5+ parameters in one command line, so it's a lot >> easier to make a mistake there. >> >> So, I believe, a configuration interface should be rather /proc or /sys >> interface based. I don't think we should care much about backward >> compatibility with tgtadm, because the existing interface doesn't reach >> the state of being widely used. As I already mentioned, only ibmvscsi at >> the moment uses it, hardware for which is pretty rare. > > forget about proc. configfs is better. but problem is how u configure > user space target with configfs? It doesn't matter much for me procfs or configfs or sysfs, although I definitely would prefer procfs, because it's already used by SCST, so no additional effort is needed. (The choice of procfs was purely for historical reasons; SCST was originally made for 2.4 kernels, where there were no other alternatives). But it doesn't relate to the choice of the fundamental approach "single utility for all possible parameters" vs "single entry for each parameter". >> Thus, I would suggest that before making the further move we should also >> consider configuration interfaces of SCST and LIO and choose the best >> things from all 3. > > >> Vlad >> >> >> ------------------------------------------------------------------------- >> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge >> Build the coolest Linux based applications with Moblin SDK & win great prizes >> Grand prize is a trip for two to an Open Source event anywhere in the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Scst-devel mailing list >> Scst-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/scst-devel > > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-27 17:56 ` Vladislav Bolkhovitin 2008-08-27 17:59 ` [Scst-devel] " Ming Zhang @ 2008-08-27 22:13 ` Nicholas A. Bellinger 2008-08-27 22:40 ` Nicholas A. Bellinger 2008-08-28 17:52 ` Vladislav Bolkhovitin 1 sibling, 2 replies; 34+ messages in thread From: Nicholas A. Bellinger @ 2008-08-27 22:13 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH On Wed, 2008-08-27 at 21:56 +0400, Vladislav Bolkhovitin wrote: > >> Our userspace tools will also be able to support both kernel space and > >> userspace targets with little trouble so distros that have stgt will not > >> notice any differences. > > > > So this is one of the items that I mentioned to Vlad as being a > > potential stumbling block.. I stated that I have no problem dumping the > > LIO IOCTL in favor of something better, and having to break backwards > > compat with LIO userspace tools (well, until I have to emulate the > > backwards compat wrt target-ctl ;-)) is something I am ready to deal > > with. > > > > So I definately see your point here, having the exist CLI logic in place > > into distros is something that we are going to have to deal with (even > > if the core behind them is completely different). > > > > I should also mention that virtually all of the configuration logic done > > from the LIO-Core and LIO-Target IOCTLs today is intended (minus a bug > > or two :-) to be done without having to shutdown/stop anything other > > than the referenced object for the target-ctl operation. Obviously, I > > really want to keep the same functionality with the CLI interface the > > LIO pieces are ported to. > > > > I will be sure to take a look at the STGT control interface and see how > > I can fit the current functionality in. I believe SCST uses an IOCTL > > today as well, which would put them in a similar situation. > > I, personally, don't like an interface, like tgtadm, which tries to do > all non-trivial configuration work from a single command line tool, > because of the following 3 reasons: > > 1. It's a lot of effort to write and maintain such a tool, because it > needs to be extensible to work with new modules and modes. For instance, > iptables tool is 86K lines long. The whole netfilter code for all > network protocols in the kernel is less that 50K lines long. Do we want > such a code bloat (170% of code to configure) and dedicated team of > maintainers to solve a fundamentally simple configuration task? > Hrrmmm, yes I could see the same type of problem with the amount of modularity requires for having plugins registering their own sets of parameters for their control path code.. > 2. It assumes the stateless type of configuration, when each call > configures exactly one thing without any side effects on already > configured or future entries. > This approach is good for cases like > iptables, but for SCSI targets it's possible that several configuration > steps require to be done in an atomic manner, like adding an iSCSI > target and configuring its parameters. > Well, the ability for an admin to force an LIO-Core related action, say removing an HBA and all associated storage object with lots of exported LUNs and running I/O, or an LIO-Target related action, say removing an entire iSCSI Target Node with targetname=) at any time.. This obviously require precision interaction between Target Fabric I/O Paths <-> Target Core and Target Core <-> Control Interface to Admin. That control interface needs to be protected in object contexts. In LIO-Core this is on a per HBA (be it physical or virtual) context. With LIO-Target this is on a iSCSI Target Node by targetname -> Target Portal Group Tag context. Obviously doing this from an IOCTL is the only real choice I had when this code started in 2001, but I wonder how configfs would work for something like this. In any event, I will keep in mind that I might have to disable some of my control path during the LIO-Target <-> SCST Core migration until we can get resolved on the shutdown control path side.. > 3. It's hard to read 5+ parameters in one command line, so it's a lot > easier to make a mistake there. No, I completely agree. But I honestly think the actual target CLI interface and parameters to admin need to do alot of pre-execution script logic in userspace to reference different interested objects, without the admin have to provide all of stuff. I do this today to determine the major/minor for lvm_uuid= (from lvs -v), md_uuid= (from mdadm -D) and udev_path= (from /dev/disk).. Same goes for real SCSI devices that we are exporting directly from drivers/scsi. We want to use EVPD Unit Serial or Device Identificaton where ever able to reference said storage object. > So, I believe, a configuration interface should be rather /proc or /sys > interface based. I don't think we should care much about backward > compatibility with tgtadm, because the existing interface doesn't reach > the state of being widely used. I would definately vote against proc here for the fancy stuff I mentioned above. I have experience enabled core-iscsi to use sysfs for RO data, but nothing along the lines of what would be required for a generic target mode RW control path. Does anyone with sysfs experience have any comments on thing..? > As I already mentioned, only ibmvscsi at > the moment uses it, hardware for which is pretty rare. > I am sure we could get some time this hardware if we wanted.. :-) > Thus, I would suggest that before making the further move we should also > consider configuration interfaces of SCST and LIO and choose the best > things from all 3. > So, Ming mentioned configfs for this... /me reads about configfs --nab ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-27 22:13 ` Kernel Level Generic Target Mode control path Nicholas A. Bellinger @ 2008-08-27 22:40 ` Nicholas A. Bellinger 2008-08-28 17:52 ` Vladislav Bolkhovitin 2008-08-28 17:52 ` Vladislav Bolkhovitin 1 sibling, 1 reply; 34+ messages in thread From: Nicholas A. Bellinger @ 2008-08-27 22:40 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH, Ming Zhang On Wed, 2008-08-27 at 15:13 -0700, Nicholas A. Bellinger wrote: > On Wed, 2008-08-27 at 21:56 +0400, Vladislav Bolkhovitin wrote: > > >> Our userspace tools will also be able to support both kernel space and > > >> userspace targets with little trouble so distros that have stgt will not > > >> notice any differences. > > > > > > So this is one of the items that I mentioned to Vlad as being a > > > potential stumbling block.. I stated that I have no problem dumping the > > > LIO IOCTL in favor of something better, and having to break backwards > > > compat with LIO userspace tools (well, until I have to emulate the > > > backwards compat wrt target-ctl ;-)) is something I am ready to deal > > > with. > > > > > > So I definately see your point here, having the exist CLI logic in place > > > into distros is something that we are going to have to deal with (even > > > if the core behind them is completely different). > > > > > > I should also mention that virtually all of the configuration logic done > > > from the LIO-Core and LIO-Target IOCTLs today is intended (minus a bug > > > or two :-) to be done without having to shutdown/stop anything other > > > than the referenced object for the target-ctl operation. Obviously, I > > > really want to keep the same functionality with the CLI interface the > > > LIO pieces are ported to. > > > > > > I will be sure to take a look at the STGT control interface and see how > > > I can fit the current functionality in. I believe SCST uses an IOCTL > > > today as well, which would put them in a similar situation. > > > > I, personally, don't like an interface, like tgtadm, which tries to do > > all non-trivial configuration work from a single command line tool, > > because of the following 3 reasons: > > > > 1. It's a lot of effort to write and maintain such a tool, because it > > needs to be extensible to work with new modules and modes. For instance, > > iptables tool is 86K lines long. The whole netfilter code for all > > network protocols in the kernel is less that 50K lines long. Do we want > > such a code bloat (170% of code to configure) and dedicated team of > > maintainers to solve a fundamentally simple configuration task? > > > > Hrrmmm, yes I could see the same type of problem with the amount of > modularity requires for having plugins registering their own sets of > parameters for their control path code.. > > > 2. It assumes the stateless type of configuration, when each call > > configures exactly one thing without any side effects on already > > configured or future entries. > > This approach is good for cases like > > iptables, but for SCSI targets it's possible that several configuration > > steps require to be done in an atomic manner, like adding an iSCSI > > target and configuring its parameters. > > > > Well, the ability for an admin to force an LIO-Core related action, say > removing an HBA and all associated storage object with lots of exported > LUNs and running I/O, or an LIO-Target related action, say removing an > entire iSCSI Target Node with targetname=) at any time.. This obviously > require precision interaction between Target Fabric I/O Paths <-> Target > Core and Target Core <-> Control Interface to Admin. > > That control interface needs to be protected in object contexts. In > LIO-Core this is on a per HBA (be it physical or virtual) context. With > LIO-Target this is on a iSCSI Target Node by targetname -> Target Portal > Group Tag context. Obviously doing this from an IOCTL is the only real > choice I had when this code started in 2001, but I wonder how configfs > would work for something like this. > > In any event, I will keep in mind that I might have to disable some of > my control path during the LIO-Target <-> SCST Core migration until we > can get resolved on the shutdown control path side.. > > > 3. It's hard to read 5+ parameters in one command line, so it's a lot > > easier to make a mistake there. > > No, I completely agree. But I honestly think the actual target CLI > interface and parameters to admin need to do alot of pre-execution > script logic in userspace to reference different interested objects, > without the admin have to provide all of stuff. I do this today to > determine the major/minor for lvm_uuid= (from lvs -v), md_uuid= (from > mdadm -D) and udev_path= (from /dev/disk).. > > Same goes for real SCSI devices that we are exporting directly from > drivers/scsi. We want to use EVPD Unit Serial or Device Identificaton > where ever able to reference said storage object. > > > So, I believe, a configuration interface should be rather /proc or /sys > > interface based. I don't think we should care much about backward > > compatibility with tgtadm, because the existing interface doesn't reach > > the state of being widely used. > > I would definately vote against proc here for the fancy stuff I > mentioned above. I have experience enabled core-iscsi to use sysfs for > RO data, but nothing along the lines of what would be required for a > generic target mode RW control path. Does anyone with sysfs experience > have any comments on thing..? > > > As I already mentioned, only ibmvscsi at > > the moment uses it, hardware for which is pretty rare. > > > > I am sure we could get some time this hardware if we wanted.. :-) > > > Thus, I would suggest that before making the further move we should also > > consider configuration interfaces of SCST and LIO and choose the best > > things from all 3. > > > > So, Ming mentioned configfs for this... /me reads about configfs > Ah yes, I remember now, this is part of the OCFS2 patchset and it uses it for /config/cluster/ocfs2/[heartbeat,node] information, as well as other tunables related to millisecond timeout values. These are basically the values from /etc/ocfs2/cluster.conf.. Looking at http://lwn.net/Articles/148973/, this looks like a strong contender for what we would require with a generic kernel level target engine. --nab ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-27 22:40 ` Nicholas A. Bellinger @ 2008-08-28 17:52 ` Vladislav Bolkhovitin 0 siblings, 0 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-28 17:52 UTC (permalink / raw) To: Nicholas A. Bellinger Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH, Ming Zhang Nicholas A. Bellinger wrote: >>> Thus, I would suggest that before making the further move we should also >>> consider configuration interfaces of SCST and LIO and choose the best >>> things from all 3. >>> >> So, Ming mentioned configfs for this... /me reads about configfs >> > > Ah yes, I remember now, this is part of the OCFS2 patchset and it uses > it for /config/cluster/ocfs2/[heartbeat,node] information, as well as > other tunables related to millisecond timeout values. These are > basically the values from /etc/ocfs2/cluster.conf.. > > Looking at http://lwn.net/Articles/148973/, this looks like a strong > contender for what we would require with a generic kernel level target > engine. For our task I don't think configfs has any advantage over sysfs. Vlad ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-27 22:13 ` Kernel Level Generic Target Mode control path Nicholas A. Bellinger 2008-08-27 22:40 ` Nicholas A. Bellinger @ 2008-08-28 17:52 ` Vladislav Bolkhovitin 2008-08-28 18:00 ` James Bottomley 2008-08-28 23:08 ` Nicholas A. Bellinger 1 sibling, 2 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-28 17:52 UTC (permalink / raw) To: Nicholas A. Bellinger Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH Nicholas A. Bellinger wrote: > On Wed, 2008-08-27 at 21:56 +0400, Vladislav Bolkhovitin wrote: >>>> Our userspace tools will also be able to support both kernel space and >>>> userspace targets with little trouble so distros that have stgt will not >>>> notice any differences. >>> So this is one of the items that I mentioned to Vlad as being a >>> potential stumbling block.. I stated that I have no problem dumping the >>> LIO IOCTL in favor of something better, and having to break backwards >>> compat with LIO userspace tools (well, until I have to emulate the >>> backwards compat wrt target-ctl ;-)) is something I am ready to deal >>> with. >>> >>> So I definately see your point here, having the exist CLI logic in place >>> into distros is something that we are going to have to deal with (even >>> if the core behind them is completely different). >>> >>> I should also mention that virtually all of the configuration logic done >>> from the LIO-Core and LIO-Target IOCTLs today is intended (minus a bug >>> or two :-) to be done without having to shutdown/stop anything other >>> than the referenced object for the target-ctl operation. Obviously, I >>> really want to keep the same functionality with the CLI interface the >>> LIO pieces are ported to. >>> >>> I will be sure to take a look at the STGT control interface and see how >>> I can fit the current functionality in. I believe SCST uses an IOCTL >>> today as well, which would put them in a similar situation. >> I, personally, don't like an interface, like tgtadm, which tries to do >> all non-trivial configuration work from a single command line tool, >> because of the following 3 reasons: >> >> 1. It's a lot of effort to write and maintain such a tool, because it >> needs to be extensible to work with new modules and modes. For instance, >> iptables tool is 86K lines long. The whole netfilter code for all >> network protocols in the kernel is less that 50K lines long. Do we want >> such a code bloat (170% of code to configure) and dedicated team of >> maintainers to solve a fundamentally simple configuration task? > > Hrrmmm, yes I could see the same type of problem with the amount of > modularity requires for having plugins registering their own sets of > parameters for their control path code.. I should add in this context that in the UNIX world the choice between a huge application, capable of doing all possible kinds of work, and a set of small utilities, doing exactly one simple thing each, was done decades ago in favor of the set of small utilities: find, grep, sort, etc. And I believe now nobody would claim that it was a wrong choice. >> 2. It assumes the stateless type of configuration, when each call >> configures exactly one thing without any side effects on already >> configured or future entries. >> This approach is good for cases like >> iptables, but for SCSI targets it's possible that several configuration >> steps require to be done in an atomic manner, like adding an iSCSI >> target and configuring its parameters. > > Well, the ability for an admin to force an LIO-Core related action, say > removing an HBA and all associated storage object with lots of exported > LUNs and running I/O, or an LIO-Target related action, say removing an > entire iSCSI Target Node with targetname=) at any time.. This obviously > require precision interaction between Target Fabric I/O Paths <-> Target > Core and Target Core <-> Control Interface to Admin. > > That control interface needs to be protected in object contexts. In > LIO-Core this is on a per HBA (be it physical or virtual) context. With > LIO-Target this is on a iSCSI Target Node by targetname -> Target Portal > Group Tag context. Obviously doing this from an IOCTL is the only real > choice I had when this code started in 2001, but I wonder how configfs > would work for something like this. My favorite configuration interface would have 2 levels. 1. The lowest level would be /proc, /sys, etc. based and allow to configure exactly one parameter or set of related parameters with corresponding subparameters necessary to provide required atomicity, if needed. For instance, this is how a new virtual read-only SBC device with 4K block size is added in SCST vdisk handler: # echo "open disk_4K /disk_4K 4096 READ_ONLY" >/proc/scst/vdisk/vdisk 2. The higher level interface(s) would allow people to not bother with low level commands, but use regular text config file(s). See scstadmin utility for example. It allows to do all necessary configuration of SCST core from /etc/scst.conf file. Such interface must have an important property: it must be able to detect changes in the config file and apply them to the running system. That property would allow to have system configuration always persistent: if one needs to change something, he would edit the config file and rerun the corresponding utility (scstadmin in this example; it really can do that, though with some limitations). Although this interface level would completely belong to user space, we in kernel need to provide for it a convenient interface. Target drivers and backstorage device handlers, who need advanced configuration, would have own low and high level interfaces, as needed. For instance, an iSCSI target must not start serving clients until all its targets fully configured. Otherwise, initiators can get rejected for not yet configured target and erroneously consider it dead. In iSCSI-SCST the user space part of the target doesn't start accepting connection until it finishes reading /etc/iscsi-scst.conf file. >> 3. It's hard to read 5+ parameters in one command line, so it's a lot >> easier to make a mistake there. > > No, I completely agree. But I honestly think the actual target CLI > interface and parameters to admin need to do alot of pre-execution > script logic in userspace to reference different interested objects, > without the admin have to provide all of stuff. I do this today to > determine the major/minor for lvm_uuid= (from lvs -v), md_uuid= (from > mdadm -D) and udev_path= (from /dev/disk).. > > Same goes for real SCSI devices that we are exporting directly from > drivers/scsi. We want to use EVPD Unit Serial or Device Identificaton > where ever able to reference said storage object. Yes, this is why we need the high level interface. Otherwise for complex targets the configuration task quickly grows up to a nightmare. >> So, I believe, a configuration interface should be rather /proc or /sys >> interface based. I don't think we should care much about backward >> compatibility with tgtadm, because the existing interface doesn't reach >> the state of being widely used. > > I would definately vote against proc here for the fancy stuff I > mentioned above. I have experience enabled core-iscsi to use sysfs for > RO data, but nothing along the lines of what would be required for a > generic target mode RW control path. Does anyone with sysfs experience > have any comments on thing..? Sysfs as well as configfs have one big disadvantage. They limit each file to only 4KB. This would force us for to create a subdirectory for each device and for each connected initiator. I don't like seeing thousands subdirectories. Additionally, such layout is a lot less convenient for parsing for the high level configuration tool, which needs to find out the difference between the current configuration and content of the corresponding config file. Currently, with procfs SCST can list in /proc/scst/sessions virtually unlimited amount of connected initiators in a simple for parsing manner. It was done using seq interface well and simply. Neither sysfs, nor configfs support seq interface. This would introduce significant effort in both kernel and user spaces. Debugfs supports seq interface, but, because of the name, I doubt we can use it ;) Thus, looks like we'd better stay with /proc. After all, networking and VM widely use /proc for internal configuration. Why SCSI target is worse? >> As I already mentioned, only ibmvscsi at >> the moment uses it, hardware for which is pretty rare. >> > > I am sure we could get some time this hardware if we wanted.. :-) > >> Thus, I would suggest that before making the further move we should also >> consider configuration interfaces of SCST and LIO and choose the best >> things from all 3. >> > > So, Ming mentioned configfs for this... /me reads about configfs > > --nab > > > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-28 17:52 ` Vladislav Bolkhovitin @ 2008-08-28 18:00 ` James Bottomley 2008-08-28 23:08 ` Nicholas A. Bellinger 1 sibling, 0 replies; 34+ messages in thread From: James Bottomley @ 2008-08-28 18:00 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Nicholas A. Bellinger, Mike Christie, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH On Thu, 2008-08-28 at 21:52 +0400, Vladislav Bolkhovitin wrote: > >> So, I believe, a configuration interface should be rather /proc or /sys > >> interface based. I don't think we should care much about backward > >> compatibility with tgtadm, because the existing interface doesn't reach > >> the state of being widely used. > > > > I would definately vote against proc here for the fancy stuff I > > mentioned above. I have experience enabled core-iscsi to use sysfs for > > RO data, but nothing along the lines of what would be required for a > > generic target mode RW control path. Does anyone with sysfs experience > > have any comments on thing..? > > Sysfs as well as configfs have one big disadvantage. They limit each > file to only 4KB. This would force us for to create a subdirectory for > each device and for each connected initiator. I don't like seeing > thousands subdirectories. Additionally, such layout is a lot less > convenient for parsing for the high level configuration tool, which > needs to find out the difference between the current configuration and > content of the corresponding config file. That's because each of those interfaces is designed around one value per file. > Currently, with procfs SCST can list in /proc/scst/sessions virtually > unlimited amount of connected initiators in a simple for parsing manner. > It was done using seq interface well and simply. Neither sysfs, nor > configfs support seq interface. This would introduce significant effort > in both kernel and user spaces. > > Debugfs supports seq interface, but, because of the name, I doubt we can > use it ;) > > Thus, looks like we'd better stay with /proc. After all, networking and > VM widely use /proc for internal configuration. Why SCSI target is worse? I wouldn't do that. /proc has been deprecated for several years for large config interfaces (indeed it's trying to be scaled back only to deal with processes). Nothing with a huge /proc interface would pass a review for 2.6 nowadays. James ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-28 17:52 ` Vladislav Bolkhovitin 2008-08-28 18:00 ` James Bottomley @ 2008-08-28 23:08 ` Nicholas A. Bellinger 2008-08-28 23:28 ` Nicholas A. Bellinger 2008-08-29 16:28 ` Vladislav Bolkhovitin 1 sibling, 2 replies; 34+ messages in thread From: Nicholas A. Bellinger @ 2008-08-28 23:08 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH, Linux-iSCSI.org Target Dev, Jerome Martin On Thu, 2008-08-28 at 21:52 +0400, Vladislav Bolkhovitin wrote: > Nicholas A. Bellinger wrote: > > >> 2. It assumes the stateless type of configuration, when each call > >> configures exactly one thing without any side effects on already > >> configured or future entries. > >> This approach is good for cases like > >> iptables, but for SCSI targets it's possible that several configuration > >> steps require to be done in an atomic manner, like adding an iSCSI > >> target and configuring its parameters. > > > > Well, the ability for an admin to force an LIO-Core related action, say > > removing an HBA and all associated storage object with lots of exported > > LUNs and running I/O, or an LIO-Target related action, say removing an > > entire iSCSI Target Node with targetname=) at any time.. This obviously > > require precision interaction between Target Fabric I/O Paths <-> Target > > Core and Target Core <-> Control Interface to Admin. > > > > That control interface needs to be protected in object contexts. In > > LIO-Core this is on a per HBA (be it physical or virtual) context. With > > LIO-Target this is on a iSCSI Target Node by targetname -> Target Portal > > Group Tag context. Obviously doing this from an IOCTL is the only real > > choice I had when this code started in 2001, but I wonder how configfs > > would work for something like this. > > My favorite configuration interface would have 2 levels. > > 1. The lowest level would be /proc, /sys, etc. based and allow to > configure exactly one parameter or set of related parameters with > corresponding subparameters necessary to provide required atomicity, if > needed. For instance, this is how a new virtual read-only SBC device > with 4K block size is added in SCST vdisk handler: > > # echo "open disk_4K /disk_4K 4096 READ_ONLY" >/proc/scst/vdisk/vdisk > So, I would consider proc and sysfs both medieval for RW data, with the latter being slightly sharper instrument than the former, but both not very effective.. Configfs on the other hand, is quite sharp in the battlefield.. Here is what I am thinking for LIO-Target after it was loaded to an configfs enabled generic target engine: # This is the iSCSI Qualifed Target Name we will be creating MY_TARGETIQN=/config/target/iscsi/iqn.superturbodiskarray # From 'lvs -v' LVM_UUID=y2sbeD-insM-xykn-s3SV-3tge-VWhn-xB4FMv # From 'lsscsi' or '/proc/scsi/scsi' SCSI_HCTL_LOCATION=1:0:0:0 # Same as 'target-ctl coreaddtiqn targetname=$IQN' with LIO today mkdir $MY_TARGETIQN # Make TPGT=1 on iqn.superturbodiskarray mkdir $MY_TARGETIQN/tpgt_1 # Make TPGT=1 run in Demo Mode for this example (no Initiator ACLs) echo 1 > $MY_TARGETIQN/tpgt_1/attribs/generate_node_acls # Create network portal mapping to TPGT=1 mkdir $MY_TARGETIQN/tpgt_1/np/192.168.100.10 # DEPENDS ON GENERIC TARGET CORE # Create TPGT=1,LUN=0 from Linux LVM Block Device mkdir $MY_TARGETIQN/tpgt_1/lun_0 echo $LVM_UUID > $MY_TARGETIQN/tpgt_1/lun_0/location # DEPENDS ON GENERIC TARGET CORE # Create TPGT=1,LUN=1 from SCSI Layer mkdir $MY_TARGETIQN/tpgt_1/lun_1 echo $SCSI_HCTL_LOCATION > $MY_TARGETIQN/tpgt_1/lun_1/location # This is the atomic part, once we throw this flag iSCSI Initiators will be allowed to login to this TPGT echo 1 > $MY_TARGETIQN/tpgt_1/enable_tpg # The equivliant of 'target-ctl coredeltiqn targetname=$IQN' today rm -rf $MY_TARGETIQN I think this would make a very useful and extremely flexiable interface for my purposes... What do you think about the potential..? > 2. The higher level interface(s) would allow people to not bother with > low level commands, but use regular text config file(s). See scstadmin > utility for example. It allows to do all necessary configuration of SCST > core from /etc/scst.conf file. Such interface must have an important > property: it must be able to detect changes in the config file and apply > them to the running system. That property would allow to have system > configuration always persistent: if one needs to change something, he > would edit the config file and rerun the corresponding utility > (scstadmin in this example; it really can do that, though with some > limitations). Although this interface level would completely belong to > user space, we in kernel need to provide for it a convenient interface. > > Target drivers and backstorage device handlers, who need advanced > configuration, would have own low and high level interfaces, as needed. > For instance, an iSCSI target must not start serving clients until all > its targets fully configured. Otherwise, initiators can get rejected for > not yet configured target and erroneously consider it dead. In > iSCSI-SCST the user space part of the target doesn't start accepting > connection until it finishes reading /etc/iscsi-scst.conf file. > > >> 3. It's hard to read 5+ parameters in one command line, so it's a lot > >> easier to make a mistake there. > > > > No, I completely agree. But I honestly think the actual target CLI > > interface and parameters to admin need to do alot of pre-execution > > script logic in userspace to reference different interested objects, > > without the admin have to provide all of stuff. I do this today to > > determine the major/minor for lvm_uuid= (from lvs -v), md_uuid= (from > > mdadm -D) and udev_path= (from /dev/disk).. > > > > Same goes for real SCSI devices that we are exporting directly from > > drivers/scsi. We want to use EVPD Unit Serial or Device Identificaton > > where ever able to reference said storage object. > > Yes, this is why we need the high level interface. Otherwise for complex > targets the configuration task quickly grows up to a nightmare. > > >> So, I believe, a configuration interface should be rather /proc or /sys > >> interface based. I don't think we should care much about backward > >> compatibility with tgtadm, because the existing interface doesn't reach > >> the state of being widely used. > > > > I would definately vote against proc here for the fancy stuff I > > mentioned above. I have experience enabled core-iscsi to use sysfs for > > RO data, but nothing along the lines of what would be required for a > > generic target mode RW control path. Does anyone with sysfs experience > > have any comments on thing..? > > Sysfs as well as configfs have one big disadvantage. They limit each > file to only 4KB. This would force us for to create a subdirectory for > each device and for each connected initiator. I don't like seeing > thousands subdirectories. Additionally, such layout is a lot less > convenient for parsing for the high level configuration tool, which > needs to find out the difference between the current configuration and > content of the corresponding config file. > So yeah, the output with configfs is limited to PAGE_SIZE as well, but for the R/W cases we don't expect that data sets to exceed this per configfs mkdir invocation.. > Currently, with procfs SCST can list in /proc/scst/sessions virtually > unlimited amount of connected initiators in a simple for parsing manner. > It was done using seq interface well and simply. Neither sysfs, nor > configfs support seq interface. This would introduce significant effort > in both kernel and user spaces. > Same for me with all of the target-ctl IOCTL commands. No one ever said upstream target code was not going to require significant effort. :-) > Debugfs supports seq interface, but, because of the name, I doubt we can > use it ;) > > Thus, looks like we'd better stay with /proc. After all, networking and > VM widely use /proc for internal configuration. Why SCSI target is worse? > So yeah, RW configuration data going with /proc is completely unacceptable for my purposes. However since all of the LIO iSCSI and SCSI MIB code is procfs + seq_file based (and is read-only) I figure that considering there are other MIBs related procfs code in other subsystems, that this would not be too much of a stumbling point. So this configfs stuff is really starting to grow on me, I am surprised that I have missed it for so long, I know the author (and alot of the OCFSv2 team) and I believe their reasons for creating and moving ocfs2 to use configfs (even though a production ocfs2 create has much *FEWER* configuration information respresented in configfs directories and entries than a production iSCSI target would) provide compelling evidence to move our efforts for a generic kernel target engine in this direction. So yes, I do feel your pain wrt to existing code, but I believe that using procfs from my current IOCTL would quite honestly be a step back. How about this, I will begin to implement the LIO-Target pieces in configfs for lio-core-2.6.git, and leave LIO-Core in IOCTL for now, and once I have some running code, I will look at the process to begin to incorporate the requirements to preform the "dumb registration" with a generic target engine. From there, that would give me a good idea of what would be required with SCST and configfs. From the above example with configfs, these would be: # Create TPGT=1,LUN=0 from Linux LVM Block Device using UUID from # 'lvs -v' output mkdir $MY_TARGETIQN/tpgt_1/lun_0 echo $LVM_UUID > $MY_TARGETIQN/tpgt_1/lun_0/location # Create TPGT=1,LUN=1 from SCSI Layer h/c/t/l Parameters from lsscsi # or /proc/scsi/scsi output mkdir $MY_TARGETIQN/tpgt_1/lun_1 echo $SCSI_HCTL_LOCATION > $MY_TARGETIQN/tpgt_1/lun_1/location Of course, we could do poke directly at Target-Core storage objects via configfs as well! # Preform a LUN reset on $LVM_UUID on all mapped target PORTs/LUNs echo 1 > /config/target/core/$LVM_UUID/lun_reset # Remove the SCSI device from the target, and all mapped PORTs/LUNs # and fall all outstanding I/Os. rm -rf /config/target/core/$SCSI_HTL_LOCATION Again, I think this would be extremely flexible and easily extendable for new uses. Also, providing some level of backwards compatibility with our project's existing CLI nomenclature would not been that hard if our repsective projects really require it. I would also be happy to help with configfs and SCST if you are interested.. --nab ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-28 23:08 ` Nicholas A. Bellinger @ 2008-08-28 23:28 ` Nicholas A. Bellinger 2008-08-29 16:28 ` Vladislav Bolkhovitin 1 sibling, 0 replies; 34+ messages in thread From: Nicholas A. Bellinger @ 2008-08-28 23:28 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH, Linux-iSCSI.org Target Dev, Jerome Martin On Thu, 2008-08-28 at 16:08 -0700, Nicholas A. Bellinger wrote: <snip> > > Thus, looks like we'd better stay with /proc. After all, networking and > > VM widely use /proc for internal configuration. Why SCSI target is worse? > > > > So yeah, RW configuration data going with /proc is completely > unacceptable for my purposes. However since all of the LIO iSCSI and > SCSI MIB code is procfs + seq_file based (and is read-only) I figure > that considering there are other MIBs related procfs code in other > subsystems, that this would not be too much of a stumbling point. > > So this configfs stuff is really starting to grow on me, I am surprised > that I have missed it for so long, I know the author (and alot of the > OCFSv2 team) and I believe their reasons for creating and moving ocfs2 > to use configfs (even though a production ocfs2 create has much *FEWER* > configuration information respresented in configfs directories and > entries than a production iSCSI target would) provide compelling > evidence to move our efforts for a generic kernel target engine in this > direction. So yes, I do feel your pain wrt to existing code, but I > believe that using procfs from my current IOCTL would quite honestly be > a step back. > > How about this, I will begin to implement the LIO-Target pieces in > configfs for lio-core-2.6.git, and leave LIO-Core in IOCTL for now, and > once I have some running code, I will look at the process to begin to > incorporate the requirements to preform the "dumb registration" with a > generic target engine. From there, that would give me a good idea of > what would be required with SCST and configfs. From the above example > with configfs, these would be: > > # Create TPGT=1,LUN=0 from Linux LVM Block Device using UUID from > # 'lvs -v' output > mkdir $MY_TARGETIQN/tpgt_1/lun_0 > echo $LVM_UUID > $MY_TARGETIQN/tpgt_1/lun_0/location > > # Create TPGT=1,LUN=1 from SCSI Layer h/c/t/l Parameters from lsscsi > # or /proc/scsi/scsi output > mkdir $MY_TARGETIQN/tpgt_1/lun_1 > echo $SCSI_HCTL_LOCATION > $MY_TARGETIQN/tpgt_1/lun_1/location > I should mention in this example that the registration of $LVM_UUID and $SCSI_HCTL_LOCATION storage objects would be done behind the scenes with these two 'addluntotpg' configfs mkdir's are called. This means that it would be possible to do storage object registration before hand and tweak storage object settings / attributes: # Import $LVM_UUID into Target-Core mkdir /config/target/core/$LVM_UUID # Make all LUN Mappings READ-ONLY to $LVM_UUID echo 0 > /config/target/core/$LVM_UUID/lun_access ... <run other /config/target/$IQN calls> # Create TPGT=1,LUN=0 from Linux LVM Block Device using UUID from > # 'lvs -v' output mkdir $MY_TARGETIQN/tpgt_1/lun_0 # If $LVM_UUID storage object is not already registered with generic # target core, automatic registration will occur echo $LVM_UUID > $MY_TARGETIQN/tpgt_1/lun_0/location # Finally, allow iSCSI Initiators login to the TargetName+TPGT endpoint echo 1 > $MY_TARGETIQN/tpgt_1/enable_tpg --nab ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-28 23:08 ` Nicholas A. Bellinger 2008-08-28 23:28 ` Nicholas A. Bellinger @ 2008-08-29 16:28 ` Vladislav Bolkhovitin 2008-08-29 20:10 ` Nicholas A. Bellinger 2008-08-31 18:42 ` Bart Van Assche 1 sibling, 2 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-29 16:28 UTC (permalink / raw) To: Nicholas A. Bellinger Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH, Linux-iSCSI.org Target Dev, Jerome Martin Nicholas A. Bellinger wrote: > On Thu, 2008-08-28 at 21:52 +0400, Vladislav Bolkhovitin wrote: >> Nicholas A. Bellinger wrote: > >>>> 2. It assumes the stateless type of configuration, when each call >>>> configures exactly one thing without any side effects on already >>>> configured or future entries. >>>> This approach is good for cases like >>>> iptables, but for SCSI targets it's possible that several configuration >>>> steps require to be done in an atomic manner, like adding an iSCSI >>>> target and configuring its parameters. >>> Well, the ability for an admin to force an LIO-Core related action, say >>> removing an HBA and all associated storage object with lots of exported >>> LUNs and running I/O, or an LIO-Target related action, say removing an >>> entire iSCSI Target Node with targetname=) at any time.. This obviously >>> require precision interaction between Target Fabric I/O Paths <-> Target >>> Core and Target Core <-> Control Interface to Admin. >>> >>> That control interface needs to be protected in object contexts. In >>> LIO-Core this is on a per HBA (be it physical or virtual) context. With >>> LIO-Target this is on a iSCSI Target Node by targetname -> Target Portal >>> Group Tag context. Obviously doing this from an IOCTL is the only real >>> choice I had when this code started in 2001, but I wonder how configfs >>> would work for something like this. >> My favorite configuration interface would have 2 levels. >> >> 1. The lowest level would be /proc, /sys, etc. based and allow to >> configure exactly one parameter or set of related parameters with >> corresponding subparameters necessary to provide required atomicity, if >> needed. For instance, this is how a new virtual read-only SBC device >> with 4K block size is added in SCST vdisk handler: >> >> # echo "open disk_4K /disk_4K 4096 READ_ONLY" >/proc/scst/vdisk/vdisk >> > > So, I would consider proc and sysfs both medieval for RW data, with the > latter being slightly sharper instrument than the former, but both not > very effective.. > > Configfs on the other hand, is quite sharp in the battlefield.. Here is > what I am thinking for LIO-Target after it was loaded to an configfs > enabled generic target engine: > > # This is the iSCSI Qualifed Target Name we will be creating > MY_TARGETIQN=/config/target/iscsi/iqn.superturbodiskarray > # From 'lvs -v' > LVM_UUID=y2sbeD-insM-xykn-s3SV-3tge-VWhn-xB4FMv > # From 'lsscsi' or '/proc/scsi/scsi' > SCSI_HCTL_LOCATION=1:0:0:0 > > # Same as 'target-ctl coreaddtiqn targetname=$IQN' with LIO today > mkdir $MY_TARGETIQN > > # Make TPGT=1 on iqn.superturbodiskarray > mkdir $MY_TARGETIQN/tpgt_1 > > # Make TPGT=1 run in Demo Mode for this example (no Initiator ACLs) > echo 1 > $MY_TARGETIQN/tpgt_1/attribs/generate_node_acls > > # Create network portal mapping to TPGT=1 > mkdir $MY_TARGETIQN/tpgt_1/np/192.168.100.10 > > # DEPENDS ON GENERIC TARGET CORE > # Create TPGT=1,LUN=0 from Linux LVM Block Device > mkdir $MY_TARGETIQN/tpgt_1/lun_0 > echo $LVM_UUID > $MY_TARGETIQN/tpgt_1/lun_0/location > > # DEPENDS ON GENERIC TARGET CORE > # Create TPGT=1,LUN=1 from SCSI Layer > mkdir $MY_TARGETIQN/tpgt_1/lun_1 > echo $SCSI_HCTL_LOCATION > $MY_TARGETIQN/tpgt_1/lun_1/location > > # This is the atomic part, once we throw this flag iSCSI Initiators will > be allowed to login to this TPGT > echo 1 > $MY_TARGETIQN/tpgt_1/enable_tpg > > # The equivliant of 'target-ctl coredeltiqn targetname=$IQN' today > rm -rf $MY_TARGETIQN > > I think this would make a very useful and extremely flexiable interface > for my purposes... What do you think about the potential..? It has a big problem with atomicity of changes. Configuration of each iSCSI target should be atomic and on the target driver's start configuration of *all* targets as a whole should be atomic as well. How are you going to solve this issue? Plus: 1. As I already wrote, separate subdir for each target and device is harder to parse 2. The high level interface needs to lock somehow the low level interface during updates to protect from simultaneous actions. I don't see a simple way to do that in configfs. >> 2. The higher level interface(s) would allow people to not bother with >> low level commands, but use regular text config file(s). See scstadmin >> utility for example. It allows to do all necessary configuration of SCST >> core from /etc/scst.conf file. Such interface must have an important >> property: it must be able to detect changes in the config file and apply >> them to the running system. That property would allow to have system >> configuration always persistent: if one needs to change something, he >> would edit the config file and rerun the corresponding utility >> (scstadmin in this example; it really can do that, though with some >> limitations). Although this interface level would completely belong to >> user space, we in kernel need to provide for it a convenient interface. >> >> Target drivers and backstorage device handlers, who need advanced >> configuration, would have own low and high level interfaces, as needed. >> For instance, an iSCSI target must not start serving clients until all >> its targets fully configured. Otherwise, initiators can get rejected for >> not yet configured target and erroneously consider it dead. In >> iSCSI-SCST the user space part of the target doesn't start accepting >> connection until it finishes reading /etc/iscsi-scst.conf file. >> >>>> 3. It's hard to read 5+ parameters in one command line, so it's a lot >>>> easier to make a mistake there. >>> No, I completely agree. But I honestly think the actual target CLI >>> interface and parameters to admin need to do alot of pre-execution >>> script logic in userspace to reference different interested objects, >>> without the admin have to provide all of stuff. I do this today to >>> determine the major/minor for lvm_uuid= (from lvs -v), md_uuid= (from >>> mdadm -D) and udev_path= (from /dev/disk).. >>> >>> Same goes for real SCSI devices that we are exporting directly from >>> drivers/scsi. We want to use EVPD Unit Serial or Device Identificaton >>> where ever able to reference said storage object. >> Yes, this is why we need the high level interface. Otherwise for complex >> targets the configuration task quickly grows up to a nightmare. >> >>>> So, I believe, a configuration interface should be rather /proc or /sys >>>> interface based. I don't think we should care much about backward >>>> compatibility with tgtadm, because the existing interface doesn't reach >>>> the state of being widely used. >>> I would definately vote against proc here for the fancy stuff I >>> mentioned above. I have experience enabled core-iscsi to use sysfs for >>> RO data, but nothing along the lines of what would be required for a >>> generic target mode RW control path. Does anyone with sysfs experience >>> have any comments on thing..? >> Sysfs as well as configfs have one big disadvantage. They limit each >> file to only 4KB. This would force us for to create a subdirectory for >> each device and for each connected initiator. I don't like seeing >> thousands subdirectories. Additionally, such layout is a lot less >> convenient for parsing for the high level configuration tool, which >> needs to find out the difference between the current configuration and >> content of the corresponding config file. >> > > So yeah, the output with configfs is limited to PAGE_SIZE as well, but > for the R/W cases we don't expect that data sets to exceed this per > configfs mkdir invocation.. > >> Currently, with procfs SCST can list in /proc/scst/sessions virtually >> unlimited amount of connected initiators in a simple for parsing manner. >> It was done using seq interface well and simply. Neither sysfs, nor >> configfs support seq interface. This would introduce significant effort >> in both kernel and user spaces. >> > > Same for me with all of the target-ctl IOCTL commands. No one ever > said upstream target code was not going to require significant > effort. :-) I don't think we should create the additional one :-) >> Debugfs supports seq interface, but, because of the name, I doubt we can >> use it ;) >> >> Thus, looks like we'd better stay with /proc. After all, networking and >> VM widely use /proc for internal configuration. Why SCSI target is worse? >> > > So yeah, RW configuration data going with /proc is completely > unacceptable for my purposes. However since all of the LIO iSCSI and > SCSI MIB code is procfs + seq_file based (and is read-only) I figure > that considering there are other MIBs related procfs code in other > subsystems, that this would not be too much of a stumbling point. > > So this configfs stuff is really starting to grow on me, I am surprised > that I have missed it for so long, I know the author (and alot of the > OCFSv2 team) and I believe their reasons for creating and moving ocfs2 > to use configfs (even though a production ocfs2 create has much *FEWER* > configuration information respresented in configfs directories and > entries than a production iSCSI target would) provide compelling > evidence to move our efforts for a generic kernel target engine in this > direction. So yes, I do feel your pain wrt to existing code, but I > believe that using procfs from my current IOCTL would quite honestly be > a step back. > > How about this, I will begin to implement the LIO-Target pieces in > configfs for lio-core-2.6.git, and leave LIO-Core in IOCTL for now, and > once I have some running code, I will look at the process to begin to > incorporate the requirements to preform the "dumb registration" with a > generic target engine. From there, that would give me a good idea of > what would be required with SCST and configfs. From the above example > with configfs, these would be: > > # Create TPGT=1,LUN=0 from Linux LVM Block Device using UUID from > # 'lvs -v' output > mkdir $MY_TARGETIQN/tpgt_1/lun_0 > echo $LVM_UUID > $MY_TARGETIQN/tpgt_1/lun_0/location > > # Create TPGT=1,LUN=1 from SCSI Layer h/c/t/l Parameters from lsscsi > # or /proc/scsi/scsi output > mkdir $MY_TARGETIQN/tpgt_1/lun_1 > echo $SCSI_HCTL_LOCATION > $MY_TARGETIQN/tpgt_1/lun_1/location > > Of course, we could do poke directly at Target-Core storage objects via > configfs as well! > > # Preform a LUN reset on $LVM_UUID on all mapped target PORTs/LUNs > echo 1 > /config/target/core/$LVM_UUID/lun_reset > # Remove the SCSI device from the target, and all mapped PORTs/LUNs > # and fall all outstanding I/Os. > rm -rf /config/target/core/$SCSI_HTL_LOCATION > > Again, I think this would be extremely flexible and easily extendable > for new uses. Also, providing some level of backwards compatibility with > our project's existing CLI nomenclature would not been that hard if our > repsective projects really require it. > > I would also be happy to help with configfs and SCST if you are > interested.. Thanks, but more I'm thinking, more I'm coming to an IOCTL's based interface, where each submodule has own set of IOCTL's, multiplexed over a single device, and for each module there would be a simple dedicated utility. For example, to configure virtual disk backstorage handler: scst_vdisk_ctl, which would allow to create, delete and manage virtual FILEIO/BLOCKIO disks. Or for managing security groups there would be scst_acl_ctl utility. Each such utility would be very simple, would offload kernel from parsing character strings or converting to them, as it is necessary for configfs, each new future module would come with own management tool. Git uses a similar approach: a dedicated program for each action. Data of big lists, like list of devices, would be returned at once in an easy to parse form, which would considerably simplify creation of the high level interface. Such approach would be pretty simple for implementation and maintenance (I love simplicity) as well as solve all other configfs problems, namely: 1. The atomicity would be natural. An iscsi_tgt_ctl utility would parse the input or corresponding config file and create a target with all parameters in a single IOCTL call. 2. Locking would be automatic via forced exclusive open without any additional actions. Also SCST /proc helpers, which target drivers and backstorage handlers intensively use, would fit in this approach quite well. How's that look? Vlad ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-29 16:28 ` Vladislav Bolkhovitin @ 2008-08-29 20:10 ` Nicholas A. Bellinger 2008-08-30 20:53 ` Vladislav Bolkhovitin 2008-08-31 18:42 ` Bart Van Assche 1 sibling, 1 reply; 34+ messages in thread From: Nicholas A. Bellinger @ 2008-08-29 20:10 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH, Linux-iSCSI.org Target Dev, Jerome Martin On Fri, 2008-08-29 at 20:28 +0400, Vladislav Bolkhovitin wrote: > Nicholas A. Bellinger wrote: > > On Thu, 2008-08-28 at 21:52 +0400, Vladislav Bolkhovitin wrote: > >> Nicholas A. Bellinger wrote: > > > >>>> 2. It assumes the stateless type of configuration, when each call > >>>> configures exactly one thing without any side effects on already > >>>> configured or future entries. > >>>> This approach is good for cases like > >>>> iptables, but for SCSI targets it's possible that several configuration > >>>> steps require to be done in an atomic manner, like adding an iSCSI > >>>> target and configuring its parameters. > >>> Well, the ability for an admin to force an LIO-Core related action, say > >>> removing an HBA and all associated storage object with lots of exported > >>> LUNs and running I/O, or an LIO-Target related action, say removing an > >>> entire iSCSI Target Node with targetname=) at any time.. This obviously > >>> require precision interaction between Target Fabric I/O Paths <-> Target > >>> Core and Target Core <-> Control Interface to Admin. > >>> > >>> That control interface needs to be protected in object contexts. In > >>> LIO-Core this is on a per HBA (be it physical or virtual) context. With > >>> LIO-Target this is on a iSCSI Target Node by targetname -> Target Portal > >>> Group Tag context. Obviously doing this from an IOCTL is the only real > >>> choice I had when this code started in 2001, but I wonder how configfs > >>> would work for something like this. > >> My favorite configuration interface would have 2 levels. > >> > >> 1. The lowest level would be /proc, /sys, etc. based and allow to > >> configure exactly one parameter or set of related parameters with > >> corresponding subparameters necessary to provide required atomicity, if > >> needed. For instance, this is how a new virtual read-only SBC device > >> with 4K block size is added in SCST vdisk handler: > >> > >> # echo "open disk_4K /disk_4K 4096 READ_ONLY" >/proc/scst/vdisk/vdisk > >> > > > > So, I would consider proc and sysfs both medieval for RW data, with the > > latter being slightly sharper instrument than the former, but both not > > very effective.. > > > > Configfs on the other hand, is quite sharp in the battlefield.. Here is > > what I am thinking for LIO-Target after it was loaded to an configfs > > enabled generic target engine: > > > > # This is the iSCSI Qualifed Target Name we will be creating > > MY_TARGETIQN=/config/target/iscsi/iqn.superturbodiskarray > > # From 'lvs -v' > > LVM_UUID=y2sbeD-insM-xykn-s3SV-3tge-VWhn-xB4FMv > > # From 'lsscsi' or '/proc/scsi/scsi' > > SCSI_HCTL_LOCATION=1:0:0:0 > > > > # Same as 'target-ctl coreaddtiqn targetname=$IQN' with LIO today > > mkdir $MY_TARGETIQN > > > > # Make TPGT=1 on iqn.superturbodiskarray > > mkdir $MY_TARGETIQN/tpgt_1 > > > > # Make TPGT=1 run in Demo Mode for this example (no Initiator ACLs) > > echo 1 > $MY_TARGETIQN/tpgt_1/attribs/generate_node_acls > > > > # Create network portal mapping to TPGT=1 > > mkdir $MY_TARGETIQN/tpgt_1/np/192.168.100.10 > > > > # DEPENDS ON GENERIC TARGET CORE > > # Create TPGT=1,LUN=0 from Linux LVM Block Device > > mkdir $MY_TARGETIQN/tpgt_1/lun_0 > > echo $LVM_UUID > $MY_TARGETIQN/tpgt_1/lun_0/location > > > > # DEPENDS ON GENERIC TARGET CORE > > # Create TPGT=1,LUN=1 from SCSI Layer > > mkdir $MY_TARGETIQN/tpgt_1/lun_1 > > echo $SCSI_HCTL_LOCATION > $MY_TARGETIQN/tpgt_1/lun_1/location > > > > # This is the atomic part, once we throw this flag iSCSI Initiators will > > be allowed to login to this TPGT > > echo 1 > $MY_TARGETIQN/tpgt_1/enable_tpg > > > > # The equivliant of 'target-ctl coredeltiqn targetname=$IQN' today > > rm -rf $MY_TARGETIQN > > > > I think this would make a very useful and extremely flexiable interface > > for my purposes... What do you think about the potential..? > > It has a big problem with atomicity of changes. Configuration of each > iSCSI target should be atomic Vlad, they are atomic. No iSCSI Initiator are allowed to login to the TargetName+TPGT until: > # This is the atomic part, once we throw this flag iSCSI Initiatorswill > > be allowed to login to this TPGT > > echo 1 > $MY_TARGETIQN/tpgt_1/enable_tpg Each TargetName+TPGT is protected when a 'target-ctl' IOCTL op related to TargetName+TPGT is called. The same is true for configfs, any time anything under $MY_TARGETIQN is accessed or created, we take the iscsi_tiqn_t mutex to protect it. When anything under $MY_TARGETIQN/tpgt_# is accessed, the iscsi_portal_group_t mutex is protecting it. With until enable_tpg to let initiators login to that TargetName+TPGT, I honestly do not see your concern here. > and on the target driver's start > configuration of *all* targets as a whole should be atomic as well. How > are you going to solve this issue? > In what example would ALL iSCSI TargetName context configuration need to be atomic to each other..? Having the LIO-Target design above I have never ran into a requirement like this, what requirement do you have in mind..? > Plus: > > 1. As I already wrote, separate subdir for each target and device is > harder to parse > > 2. The high level interface needs to lock somehow the low level > interface during updates to protect from simultaneous actions. I don't > see a simple way to do that in configfs. > Not having problem locking/mutex are in place is going to cause problems regardless of configfs is used. Converting LIO-Target from IOCTL -> configfs is really easy because all of the target-ctl IOCTL ops are already protected, so using things like a configfs trigger are simple because I do not have to add any additional locking considerations because the ops are already protected in the IOCTL context. > >> 2. The higher level interface(s) would allow people to not bother with > >> low level commands, but use regular text config file(s). See scstadmin > >> utility for example. It allows to do all necessary configuration of SCST > >> core from /etc/scst.conf file. Such interface must have an important > >> property: it must be able to detect changes in the config file and apply > >> them to the running system. That property would allow to have system > >> configuration always persistent: if one needs to change something, he > >> would edit the config file and rerun the corresponding utility > >> (scstadmin in this example; it really can do that, though with some > >> limitations). Although this interface level would completely belong to > >> user space, we in kernel need to provide for it a convenient interface. > >> > >> Target drivers and backstorage device handlers, who need advanced > >> configuration, would have own low and high level interfaces, as needed. > >> For instance, an iSCSI target must not start serving clients until all > >> its targets fully configured. Otherwise, initiators can get rejected for > >> not yet configured target and erroneously consider it dead. In > >> iSCSI-SCST the user space part of the target doesn't start accepting > >> connection until it finishes reading /etc/iscsi-scst.conf file. > >> > >>>> 3. It's hard to read 5+ parameters in one command line, so it's a lot > >>>> easier to make a mistake there. > >>> No, I completely agree. But I honestly think the actual target CLI > >>> interface and parameters to admin need to do alot of pre-execution > >>> script logic in userspace to reference different interested objects, > >>> without the admin have to provide all of stuff. I do this today to > >>> determine the major/minor for lvm_uuid= (from lvs -v), md_uuid= (from > >>> mdadm -D) and udev_path= (from /dev/disk).. > >>> > >>> Same goes for real SCSI devices that we are exporting directly from > >>> drivers/scsi. We want to use EVPD Unit Serial or Device Identificaton > >>> where ever able to reference said storage object. > >> Yes, this is why we need the high level interface. Otherwise for complex > >> targets the configuration task quickly grows up to a nightmare. > >> > >>>> So, I believe, a configuration interface should be rather /proc or /sys > >>>> interface based. I don't think we should care much about backward > >>>> compatibility with tgtadm, because the existing interface doesn't reach > >>>> the state of being widely used. > >>> I would definately vote against proc here for the fancy stuff I > >>> mentioned above. I have experience enabled core-iscsi to use sysfs for > >>> RO data, but nothing along the lines of what would be required for a > >>> generic target mode RW control path. Does anyone with sysfs experience > >>> have any comments on thing..? > >> Sysfs as well as configfs have one big disadvantage. They limit each > >> file to only 4KB. This would force us for to create a subdirectory for > >> each device and for each connected initiator. I don't like seeing > >> thousands subdirectories. Additionally, such layout is a lot less > >> convenient for parsing for the high level configuration tool, which > >> needs to find out the difference between the current configuration and > >> content of the corresponding config file. > >> > > > > So yeah, the output with configfs is limited to PAGE_SIZE as well, but > > for the R/W cases we don't expect that data sets to exceed this per > > configfs mkdir invocation.. > > > >> Currently, with procfs SCST can list in /proc/scst/sessions virtually > >> unlimited amount of connected initiators in a simple for parsing manner. > >> It was done using seq interface well and simply. Neither sysfs, nor > >> configfs support seq interface. This would introduce significant effort > >> in both kernel and user spaces. > >> > > > > Same for me with all of the target-ctl IOCTL commands. No one ever > > said upstream target code was not going to require significant > > effort. :-) > > I don't think we should create the additional one :-) > We are not creating a new one, we are using one that already exists upstream that was made for exactly the type of problem we are looking to solve. Using procfs or and IOCTL for anything serious upstream is not an option, not because they upstream maintainers like to make our life hard, but because they are poor interfaces for what we want to do. Vlad, please consider configfs. After evaluating my requirements with LIO-Target, there is no technical hangups or major gotchas I can see for implementing the above example. I know that LIO-Target with the example above there are *NO* "atomicity of changes" issues I have from simply converting IOCTL -> configfs, because the LIO-Target code called from IOCTL already does the protection for the different contexts provided for the example, and $MY_TARGETIQN/tpgt_#/enable_tpg protects iSCSI Initiators from logging into that endpoint to access storage object LUNs. How you give an problem case where you think a generic target engine configuration scenario would not work with configfs, and I will explain how with LIO-Target/LIO-Core it would and does work..? --nab > >> Debugfs supports seq interface, but, because of the name, I doubt we can > >> use it ;) > >> > >> Thus, looks like we'd better stay with /proc. After all, networking and > >> VM widely use /proc for internal configuration. Why SCSI target is worse? > >> > > > > So yeah, RW configuration data going with /proc is completely > > unacceptable for my purposes. However since all of the LIO iSCSI and > > SCSI MIB code is procfs + seq_file based (and is read-only) I figure > > that considering there are other MIBs related procfs code in other > > subsystems, that this would not be too much of a stumbling point. > > > > So this configfs stuff is really starting to grow on me, I am surprised > > that I have missed it for so long, I know the author (and alot of the > > OCFSv2 team) and I believe their reasons for creating and moving ocfs2 > > to use configfs (even though a production ocfs2 create has much *FEWER* > > configuration information respresented in configfs directories and > > entries than a production iSCSI target would) provide compelling > > evidence to move our efforts for a generic kernel target engine in this > > direction. So yes, I do feel your pain wrt to existing code, but I > > believe that using procfs from my current IOCTL would quite honestly be > > a step back. > > > > How about this, I will begin to implement the LIO-Target pieces in > > configfs for lio-core-2.6.git, and leave LIO-Core in IOCTL for now, and > > once I have some running code, I will look at the process to begin to > > incorporate the requirements to preform the "dumb registration" with a > > generic target engine. From there, that would give me a good idea of > > what would be required with SCST and configfs. From the above example > > with configfs, these would be: > > > > # Create TPGT=1,LUN=0 from Linux LVM Block Device using UUID from > > # 'lvs -v' output > > mkdir $MY_TARGETIQN/tpgt_1/lun_0 > > echo $LVM_UUID > $MY_TARGETIQN/tpgt_1/lun_0/location > > > > # Create TPGT=1,LUN=1 from SCSI Layer h/c/t/l Parameters from lsscsi > > # or /proc/scsi/scsi output > > mkdir $MY_TARGETIQN/tpgt_1/lun_1 > > echo $SCSI_HCTL_LOCATION > $MY_TARGETIQN/tpgt_1/lun_1/location > > > > Of course, we could do poke directly at Target-Core storage objects via > > configfs as well! > > > > # Preform a LUN reset on $LVM_UUID on all mapped target PORTs/LUNs > > echo 1 > /config/target/core/$LVM_UUID/lun_reset > > # Remove the SCSI device from the target, and all mapped PORTs/LUNs > > # and fall all outstanding I/Os. > > rm -rf /config/target/core/$SCSI_HTL_LOCATION > > > > Again, I think this would be extremely flexible and easily extendable > > for new uses. Also, providing some level of backwards compatibility with > > our project's existing CLI nomenclature would not been that hard if our > > repsective projects really require it. > > > > I would also be happy to help with configfs and SCST if you are > > interested.. > > Thanks, but more I'm thinking, more I'm coming to an IOCTL's based > interface, where each submodule has own set of IOCTL's, multiplexed over > a single device, and for each module there would be a simple dedicated > utility. For example, to configure virtual disk backstorage handler: > scst_vdisk_ctl, which would allow to create, delete and manage virtual > FILEIO/BLOCKIO disks. Or for managing security groups there would be > scst_acl_ctl utility. Each such utility would be very simple, would > offload kernel from parsing character strings or converting to them, as > it is necessary for configfs, each new future module would come with own > management tool. Git uses a similar approach: a dedicated program for > each action. > > Data of big lists, like list of devices, would be returned at once in an > easy to parse form, which would considerably simplify creation of the > high level interface. > > Such approach would be pretty simple for implementation and maintenance > (I love simplicity) as well as solve all other configfs problems, namely: > > 1. The atomicity would be natural. An iscsi_tgt_ctl utility would parse > the input or corresponding config file and create a target with all > parameters in a single IOCTL call. > > 2. Locking would be automatic via forced exclusive open without any > additional actions. > > Also SCST /proc helpers, which target drivers and backstorage handlers > intensively use, would fit in this approach quite well. > > How's that look? > > Vlad > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-29 20:10 ` Nicholas A. Bellinger @ 2008-08-30 20:53 ` Vladislav Bolkhovitin 2008-08-31 18:18 ` Bart Van Assche 2008-09-02 21:25 ` Nicholas A. Bellinger 0 siblings, 2 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-08-30 20:53 UTC (permalink / raw) To: Nicholas A. Bellinger Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH, Linux-iSCSI.org Target Dev, Jerome Martin Nicholas A. Bellinger wrote: > On Fri, 2008-08-29 at 20:28 +0400, Vladislav Bolkhovitin wrote: >> Nicholas A. Bellinger wrote: >>> On Thu, 2008-08-28 at 21:52 +0400, Vladislav Bolkhovitin wrote: >>>> Nicholas A. Bellinger wrote: >>>>>> 2. It assumes the stateless type of configuration, when each call >>>>>> configures exactly one thing without any side effects on already >>>>>> configured or future entries. >>>>>> This approach is good for cases like >>>>>> iptables, but for SCSI targets it's possible that several configuration >>>>>> steps require to be done in an atomic manner, like adding an iSCSI >>>>>> target and configuring its parameters. >>>>> Well, the ability for an admin to force an LIO-Core related action, say >>>>> removing an HBA and all associated storage object with lots of exported >>>>> LUNs and running I/O, or an LIO-Target related action, say removing an >>>>> entire iSCSI Target Node with targetname=) at any time.. This obviously >>>>> require precision interaction between Target Fabric I/O Paths <-> Target >>>>> Core and Target Core <-> Control Interface to Admin. >>>>> >>>>> That control interface needs to be protected in object contexts. In >>>>> LIO-Core this is on a per HBA (be it physical or virtual) context. With >>>>> LIO-Target this is on a iSCSI Target Node by targetname -> Target Portal >>>>> Group Tag context. Obviously doing this from an IOCTL is the only real >>>>> choice I had when this code started in 2001, but I wonder how configfs >>>>> would work for something like this. >>>> My favorite configuration interface would have 2 levels. >>>> >>>> 1. The lowest level would be /proc, /sys, etc. based and allow to >>>> configure exactly one parameter or set of related parameters with >>>> corresponding subparameters necessary to provide required atomicity, if >>>> needed. For instance, this is how a new virtual read-only SBC device >>>> with 4K block size is added in SCST vdisk handler: >>>> >>>> # echo "open disk_4K /disk_4K 4096 READ_ONLY" >/proc/scst/vdisk/vdisk >>>> >>> So, I would consider proc and sysfs both medieval for RW data, with the >>> latter being slightly sharper instrument than the former, but both not >>> very effective.. >>> >>> Configfs on the other hand, is quite sharp in the battlefield.. Here is >>> what I am thinking for LIO-Target after it was loaded to an configfs >>> enabled generic target engine: >>> >>> # This is the iSCSI Qualifed Target Name we will be creating >>> MY_TARGETIQN=/config/target/iscsi/iqn.superturbodiskarray >>> # From 'lvs -v' >>> LVM_UUID=y2sbeD-insM-xykn-s3SV-3tge-VWhn-xB4FMv >>> # From 'lsscsi' or '/proc/scsi/scsi' >>> SCSI_HCTL_LOCATION=1:0:0:0 >>> >>> # Same as 'target-ctl coreaddtiqn targetname=$IQN' with LIO today >>> mkdir $MY_TARGETIQN >>> >>> # Make TPGT=1 on iqn.superturbodiskarray >>> mkdir $MY_TARGETIQN/tpgt_1 >>> >>> # Make TPGT=1 run in Demo Mode for this example (no Initiator ACLs) >>> echo 1 > $MY_TARGETIQN/tpgt_1/attribs/generate_node_acls >>> >>> # Create network portal mapping to TPGT=1 >>> mkdir $MY_TARGETIQN/tpgt_1/np/192.168.100.10 >>> >>> # DEPENDS ON GENERIC TARGET CORE >>> # Create TPGT=1,LUN=0 from Linux LVM Block Device >>> mkdir $MY_TARGETIQN/tpgt_1/lun_0 >>> echo $LVM_UUID > $MY_TARGETIQN/tpgt_1/lun_0/location >>> >>> # DEPENDS ON GENERIC TARGET CORE >>> # Create TPGT=1,LUN=1 from SCSI Layer >>> mkdir $MY_TARGETIQN/tpgt_1/lun_1 >>> echo $SCSI_HCTL_LOCATION > $MY_TARGETIQN/tpgt_1/lun_1/location >>> >>> # This is the atomic part, once we throw this flag iSCSI Initiators will >>> be allowed to login to this TPGT >>> echo 1 > $MY_TARGETIQN/tpgt_1/enable_tpg >>> >>> # The equivliant of 'target-ctl coredeltiqn targetname=$IQN' today >>> rm -rf $MY_TARGETIQN >>> >>> I think this would make a very useful and extremely flexiable interface >>> for my purposes... What do you think about the potential..? >> It has a big problem with atomicity of changes. Configuration of each >> iSCSI target should be atomic > > Vlad, they are atomic. No iSCSI Initiator are allowed to login to the > TargetName+TPGT until: > >> # This is the atomic part, once we throw this flag iSCSI Initiatorswill >>> be allowed to login to this TPGT >>> echo 1 > $MY_TARGETIQN/tpgt_1/enable_tpg > > Each TargetName+TPGT is protected when a 'target-ctl' IOCTL op related > to TargetName+TPGT is called. The same is true for configfs, any time > anything under $MY_TARGETIQN is accessed or created, we take the > iscsi_tiqn_t mutex to protect it. When anything under > $MY_TARGETIQN/tpgt_# is accessed, the iscsi_portal_group_t mutex is > protecting it. > > With until enable_tpg to let initiators login to that TargetName+TPGT, I > honestly do not see your concern here. > >> and on the target driver's start >> configuration of *all* targets as a whole should be atomic as well. How >> are you going to solve this issue? >> > > In what example would ALL iSCSI TargetName context configuration need to > be atomic to each other..? Having the LIO-Target design above I have > never ran into a requirement like this, what requirement do you have in > mind..? I've already written it: when target restarted. Disconnected initiators can reconnect on the wrong time and can see "no target", then consider it dead. The same is true for target shutdown: it should be atomic too. >> Plus: >> >> 1. As I already wrote, separate subdir for each target and device is >> harder to parse >> >> 2. The high level interface needs to lock somehow the low level >> interface during updates to protect from simultaneous actions. I don't >> see a simple way to do that in configfs. >> > > Not having problem locking/mutex are in place is going to cause problems > regardless of configfs is used. Converting LIO-Target from IOCTL -> > configfs is really easy because all of the target-ctl IOCTL ops are > already protected, so using things like a configfs trigger are simple > because I do not have to add any additional locking considerations > because the ops are already protected in the IOCTL context. What would be if a program, who taken that mutex get dead before releasing it? You wouldn't receive a notification about its death, although with IOCTL's you would receive it. Will you invent a motex revoking mechanism for that. >>>> 2. The higher level interface(s) would allow people to not bother with >>>> low level commands, but use regular text config file(s). See scstadmin >>>> utility for example. It allows to do all necessary configuration of SCST >>>> core from /etc/scst.conf file. Such interface must have an important >>>> property: it must be able to detect changes in the config file and apply >>>> them to the running system. That property would allow to have system >>>> configuration always persistent: if one needs to change something, he >>>> would edit the config file and rerun the corresponding utility >>>> (scstadmin in this example; it really can do that, though with some >>>> limitations). Although this interface level would completely belong to >>>> user space, we in kernel need to provide for it a convenient interface. >>>> >>>> Target drivers and backstorage device handlers, who need advanced >>>> configuration, would have own low and high level interfaces, as needed. >>>> For instance, an iSCSI target must not start serving clients until all >>>> its targets fully configured. Otherwise, initiators can get rejected for >>>> not yet configured target and erroneously consider it dead. In >>>> iSCSI-SCST the user space part of the target doesn't start accepting >>>> connection until it finishes reading /etc/iscsi-scst.conf file. >>>> >>>>>> 3. It's hard to read 5+ parameters in one command line, so it's a lot >>>>>> easier to make a mistake there. >>>>> No, I completely agree. But I honestly think the actual target CLI >>>>> interface and parameters to admin need to do alot of pre-execution >>>>> script logic in userspace to reference different interested objects, >>>>> without the admin have to provide all of stuff. I do this today to >>>>> determine the major/minor for lvm_uuid= (from lvs -v), md_uuid= (from >>>>> mdadm -D) and udev_path= (from /dev/disk).. >>>>> >>>>> Same goes for real SCSI devices that we are exporting directly from >>>>> drivers/scsi. We want to use EVPD Unit Serial or Device Identificaton >>>>> where ever able to reference said storage object. >>>> Yes, this is why we need the high level interface. Otherwise for complex >>>> targets the configuration task quickly grows up to a nightmare. >>>> >>>>>> So, I believe, a configuration interface should be rather /proc or /sys >>>>>> interface based. I don't think we should care much about backward >>>>>> compatibility with tgtadm, because the existing interface doesn't reach >>>>>> the state of being widely used. >>>>> I would definately vote against proc here for the fancy stuff I >>>>> mentioned above. I have experience enabled core-iscsi to use sysfs for >>>>> RO data, but nothing along the lines of what would be required for a >>>>> generic target mode RW control path. Does anyone with sysfs experience >>>>> have any comments on thing..? >>>> Sysfs as well as configfs have one big disadvantage. They limit each >>>> file to only 4KB. This would force us for to create a subdirectory for >>>> each device and for each connected initiator. I don't like seeing >>>> thousands subdirectories. Additionally, such layout is a lot less >>>> convenient for parsing for the high level configuration tool, which >>>> needs to find out the difference between the current configuration and >>>> content of the corresponding config file. >>>> >>> So yeah, the output with configfs is limited to PAGE_SIZE as well, but >>> for the R/W cases we don't expect that data sets to exceed this per >>> configfs mkdir invocation.. >>> >>>> Currently, with procfs SCST can list in /proc/scst/sessions virtually >>>> unlimited amount of connected initiators in a simple for parsing manner. >>>> It was done using seq interface well and simply. Neither sysfs, nor >>>> configfs support seq interface. This would introduce significant effort >>>> in both kernel and user spaces. >>>> >>> Same for me with all of the target-ctl IOCTL commands. No one ever >>> said upstream target code was not going to require significant >>> effort. :-) >> I don't think we should create the additional one :-) >> > > We are not creating a new one, we are using one that already exists > upstream that was made for exactly the type of problem we are looking to > solve. Using procfs or and IOCTL for anything serious upstream is not > an option, not because they upstream maintainers like to make our life > hard, but because they are poor interfaces for what we want to do. > > Vlad, please consider configfs. After evaluating my requirements with > LIO-Target, there is no technical hangups or major gotchas I can see for > implementing the above example. I know that LIO-Target with the example > above there are *NO* "atomicity of changes" issues I have from simply > converting IOCTL -> configfs, because the LIO-Target code called from > IOCTL already does the protection for the different contexts provided > for the example, and $MY_TARGETIQN/tpgt_#/enable_tpg protects iSCSI > Initiators from logging into that endpoint to access storage object > LUNs. > > How you give an problem case where you think a generic target engine > configuration scenario would not work with configfs, and I will explain > how with LIO-Target/LIO-Core it would and does work..? I have the only thing against configfs: I feel that using it could be harder than using well thought IOCTL interface. What's definite, that amount of in-kernel code for configfs will be considerably bigger, than for IOCTLs, but this is thing about what kernel developers do carefully care. In my observations But if you so excited about configfs and willing to take care about all the headaches of moving to it, I won't object. I only always thought that considering possible options means considering them all, but I feel you didn't read what I wrote below about IOCTL interface ;) I'm leaving now, so let's return to the discussion in two weeks time. > --nab > >>>> Debugfs supports seq interface, but, because of the name, I doubt we can >>>> use it ;) >>>> >>>> Thus, looks like we'd better stay with /proc. After all, networking and >>>> VM widely use /proc for internal configuration. Why SCSI target is worse? >>>> >>> So yeah, RW configuration data going with /proc is completely >>> unacceptable for my purposes. However since all of the LIO iSCSI and >>> SCSI MIB code is procfs + seq_file based (and is read-only) I figure >>> that considering there are other MIBs related procfs code in other >>> subsystems, that this would not be too much of a stumbling point. >>> >>> So this configfs stuff is really starting to grow on me, I am surprised >>> that I have missed it for so long, I know the author (and alot of the >>> OCFSv2 team) and I believe their reasons for creating and moving ocfs2 >>> to use configfs (even though a production ocfs2 create has much *FEWER* >>> configuration information respresented in configfs directories and >>> entries than a production iSCSI target would) provide compelling >>> evidence to move our efforts for a generic kernel target engine in this >>> direction. So yes, I do feel your pain wrt to existing code, but I >>> believe that using procfs from my current IOCTL would quite honestly be >>> a step back. >>> >>> How about this, I will begin to implement the LIO-Target pieces in >>> configfs for lio-core-2.6.git, and leave LIO-Core in IOCTL for now, and >>> once I have some running code, I will look at the process to begin to >>> incorporate the requirements to preform the "dumb registration" with a >>> generic target engine. From there, that would give me a good idea of >>> what would be required with SCST and configfs. From the above example >>> with configfs, these would be: >>> >>> # Create TPGT=1,LUN=0 from Linux LVM Block Device using UUID from >>> # 'lvs -v' output >>> mkdir $MY_TARGETIQN/tpgt_1/lun_0 >>> echo $LVM_UUID > $MY_TARGETIQN/tpgt_1/lun_0/location >>> >>> # Create TPGT=1,LUN=1 from SCSI Layer h/c/t/l Parameters from lsscsi >>> # or /proc/scsi/scsi output >>> mkdir $MY_TARGETIQN/tpgt_1/lun_1 >>> echo $SCSI_HCTL_LOCATION > $MY_TARGETIQN/tpgt_1/lun_1/location >>> >>> Of course, we could do poke directly at Target-Core storage objects via >>> configfs as well! >>> >>> # Preform a LUN reset on $LVM_UUID on all mapped target PORTs/LUNs >>> echo 1 > /config/target/core/$LVM_UUID/lun_reset >>> # Remove the SCSI device from the target, and all mapped PORTs/LUNs >>> # and fall all outstanding I/Os. >>> rm -rf /config/target/core/$SCSI_HTL_LOCATION >>> >>> Again, I think this would be extremely flexible and easily extendable >>> for new uses. Also, providing some level of backwards compatibility with >>> our project's existing CLI nomenclature would not been that hard if our >>> repsective projects really require it. >>> >>> I would also be happy to help with configfs and SCST if you are >>> interested.. >> Thanks, but more I'm thinking, more I'm coming to an IOCTL's based >> interface, where each submodule has own set of IOCTL's, multiplexed over >> a single device, and for each module there would be a simple dedicated >> utility. For example, to configure virtual disk backstorage handler: >> scst_vdisk_ctl, which would allow to create, delete and manage virtual >> FILEIO/BLOCKIO disks. Or for managing security groups there would be >> scst_acl_ctl utility. Each such utility would be very simple, would >> offload kernel from parsing character strings or converting to them, as >> it is necessary for configfs, each new future module would come with own >> management tool. Git uses a similar approach: a dedicated program for >> each action. >> >> Data of big lists, like list of devices, would be returned at once in an >> easy to parse form, which would considerably simplify creation of the >> high level interface. >> >> Such approach would be pretty simple for implementation and maintenance >> (I love simplicity) as well as solve all other configfs problems, namely: >> >> 1. The atomicity would be natural. An iscsi_tgt_ctl utility would parse >> the input or corresponding config file and create a target with all >> parameters in a single IOCTL call. >> >> 2. Locking would be automatic via forced exclusive open without any >> additional actions. >> >> Also SCST /proc helpers, which target drivers and backstorage handlers >> intensively use, would fit in this approach quite well. >> >> How's that look? >> >> Vlad >> > > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-30 20:53 ` Vladislav Bolkhovitin @ 2008-08-31 18:18 ` Bart Van Assche 2008-09-02 21:25 ` Nicholas A. Bellinger 1 sibling, 0 replies; 34+ messages in thread From: Bart Van Assche @ 2008-08-31 18:18 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Nicholas A. Bellinger, Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Greg KH, Linux-iSCSI.org Target Dev, Jerome Martin On Sat, Aug 30, 2008 at 10:53 PM, Vladislav Bolkhovitin <vst@vlnb.net> wrote: > What would be if a program, who taken that mutex get dead before releasing > it? You wouldn't receive a notification about its death, although with > IOCTL's you would receive it. Will you invent a motex revoking mechanism for > that. Any mutex that has been locked by kernel code should be unlocked before control is given back to userspace. Making kernel mutexes visible to userspace would be very bad design. Bart. ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-30 20:53 ` Vladislav Bolkhovitin 2008-08-31 18:18 ` Bart Van Assche @ 2008-09-02 21:25 ` Nicholas A. Bellinger 2008-09-19 17:50 ` Vladislav Bolkhovitin 1 sibling, 1 reply; 34+ messages in thread From: Nicholas A. Bellinger @ 2008-09-02 21:25 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH, Linux-iSCSI.org Target Dev, Jerome Martin On Sun, 2008-08-31 at 00:53 +0400, Vladislav Bolkhovitin wrote: > Nicholas A. Bellinger wrote: > > On Fri, 2008-08-29 at 20:28 +0400, Vladislav Bolkhovitin wrote: > >> Nicholas A. Bellinger wrote: > > > > Vlad, they are atomic. No iSCSI Initiator are allowed to login to the > > TargetName+TPGT until: > > > >> # This is the atomic part, once we throw this flag iSCSI Initiatorswill > >>> be allowed to login to this TPGT > >>> echo 1 > $MY_TARGETIQN/tpgt_1/enable_tpg > > > > Each TargetName+TPGT is protected when a 'target-ctl' IOCTL op related > > to TargetName+TPGT is called. The same is true for configfs, any time > > anything under $MY_TARGETIQN is accessed or created, we take the > > iscsi_tiqn_t mutex to protect it. When anything under > > $MY_TARGETIQN/tpgt_# is accessed, the iscsi_portal_group_t mutex is > > protecting it. > > > > With until enable_tpg to let initiators login to that TargetName+TPGT, I > > honestly do not see your concern here. > > > >> and on the target driver's start > >> configuration of *all* targets as a whole should be atomic as well. How > >> are you going to solve this issue? > >> > > > > In what example would ALL iSCSI TargetName context configuration need to > > be atomic to each other..? Having the LIO-Target design above I have > > never ran into a requirement like this, what requirement do you have in > > mind..? > > I've already written it: when target restarted. Disconnected initiators > can reconnect on the wrong time and can see "no target", then consider > it dead. Yes, this case you describe is exactly what I am talking about with the "enable_tpg" flag for LIO-Target under configfs. Each fabric can define it's own configfs groups and items to fit its own requirements, which means, that a global "allow initiators to login" flag would like look: FABRIC=pscsi # Allow all initiators to login to all Parallel SCSI endpoints echo 1 > /sys/kernel/config/target/$FABRIC/allow_initiators_to_login Or, just enable one endpoint on another fabric: FABRIC=sas # Only allow initiators to login to sas_endpoint_name echo 1 > /sys/kernel/config/target/$FABRIC/sas_endpoint_name/enable_login Anyways, you get the idea. The great part of course is that this requires zero changes to userspace code!! > The same is true for target shutdown: it should be atomic too. > I am not debating these fundementals, I am mearly saying that depending upon configfs for target configuration would entail the same types of logic and mutual exclusion requirements in procfs, sysfs, or an IOCTL. > >> 2. The high level interface needs to lock somehow the low level > >> interface during updates to protect from simultaneous actions. I don't > >> see a simple way to do that in configfs. > >> > > > > Not having problem locking/mutex are in place is going to cause problems > > regardless of configfs is used. Converting LIO-Target from IOCTL -> > > configfs is really easy because all of the target-ctl IOCTL ops are > > already protected, so using things like a configfs trigger are simple > > because I do not have to add any additional locking considerations > > because the ops are already protected in the IOCTL context. > > What would be if a program, who taken that mutex get dead before > releasing it? You wouldn't receive a notification about its death, > although with IOCTL's you would receive it. Will you invent a motex > revoking mechanism for that. > Hrrmm, why would an IOCTL process context be any different than a configfs process context..? Just because a userspace process is running kernel code and user hits CTRL-C, or the userspace code segfaults, does not mean the kernel code stops running, it just means that those SIGINT or SIGSEGVs are pending for that process and down_interruptible() semaphores will not sleep and signal_pending(current) will return TRUE, etc. I still don't see how the case of a userspace process accessing kernel code would be different between an IOCTL and configfs process context..? > >>>> Sysfs as well as configfs have one big disadvantage. They limit each > >>>> file to only 4KB. This would force us for to create a subdirectory for > >>>> each device and for each connected initiator. I don't like seeing > >>>> thousands subdirectories. Additionally, such layout is a lot less > >>>> convenient for parsing for the high level configuration tool, which > >>>> needs to find out the difference between the current configuration and > >>>> content of the corresponding config file. > >>>> > >>> So yeah, the output with configfs is limited to PAGE_SIZE as well, but > >>> for the R/W cases we don't expect that data sets to exceed this per > >>> configfs mkdir invocation.. > >>> > >>>> Currently, with procfs SCST can list in /proc/scst/sessions virtually > >>>> unlimited amount of connected initiators in a simple for parsing manner. > >>>> It was done using seq interface well and simply. Neither sysfs, nor > >>>> configfs support seq interface. This would introduce significant effort > >>>> in both kernel and user spaces. > >>>> > >>> Same for me with all of the target-ctl IOCTL commands. No one ever > >>> said upstream target code was not going to require significant > >>> effort. :-) > >> I don't think we should create the additional one :-) > >> > > > > We are not creating a new one, we are using one that already exists > > upstream that was made for exactly the type of problem we are looking to > > solve. Using procfs or and IOCTL for anything serious upstream is not > > an option, not because they upstream maintainers like to make our life > > hard, but because they are poor interfaces for what we want to do. > > > > Vlad, please consider configfs. After evaluating my requirements with > > LIO-Target, there is no technical hangups or major gotchas I can see for > > implementing the above example. I know that LIO-Target with the example > > above there are *NO* "atomicity of changes" issues I have from simply > > converting IOCTL -> configfs, because the LIO-Target code called from > > IOCTL already does the protection for the different contexts provided > > for the example, and $MY_TARGETIQN/tpgt_#/enable_tpg protects iSCSI > > Initiators from logging into that endpoint to access storage object > > LUNs. > > > > How you give an problem case where you think a generic target engine > > configuration scenario would not work with configfs, and I will explain > > how with LIO-Target/LIO-Core it would and does work..? > > I have the only thing against configfs: I feel that using it could be > harder than using well thought IOCTL interface. What's definite, that > amount of in-kernel code for configfs will be considerably bigger, than > for IOCTLs, but this is thing about what kernel developers do carefully > care. In my observations > I think the kernel code would be a bit larger using configfs, but equal logic and complexity with an IOCTL. The great benefit with configfs of course is that you never have to break compatibility from having to change your struct foo that is passed with the IOCTL between kernel/user. Also, not having to maintain a mess of C userspace code is always a benefit. With configfs the target CLI that I have in mind would basically be all shell scripts reference admin defined human readable aliases mapped to targetname, target portals, storage objects, LUNs, etc. > But if you so excited about configfs and willing to take care about all > the headaches of moving to it, I won't object. > :-) > I only always thought that considering possible options means > considering them all, but I feel you didn't read what I wrote below > about IOCTL interface ;) > Well, since I have been using an IOCTL for so long with LIO, I am painfully fimilar with the benefits and limitations.. > I'm leaving now, so let's return to the discussion in two weeks time. > Sounds good! --nab ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-09-02 21:25 ` Nicholas A. Bellinger @ 2008-09-19 17:50 ` Vladislav Bolkhovitin 0 siblings, 0 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-09-19 17:50 UTC (permalink / raw) To: Nicholas A. Bellinger Cc: Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Bart Van Assche, Greg KH, Linux-iSCSI.org Target Dev, Jerome Martin Nicholas A. Bellinger wrote: > On Sun, 2008-08-31 at 00:53 +0400, Vladislav Bolkhovitin wrote: >> Nicholas A. Bellinger wrote: >>> On Fri, 2008-08-29 at 20:28 +0400, Vladislav Bolkhovitin wrote: >>>> Nicholas A. Bellinger wrote: >>> Vlad, they are atomic. No iSCSI Initiator are allowed to login to the >>> TargetName+TPGT until: >>> >>>> # This is the atomic part, once we throw this flag iSCSI Initiatorswill >>>>> be allowed to login to this TPGT >>>>> echo 1 > $MY_TARGETIQN/tpgt_1/enable_tpg >>> Each TargetName+TPGT is protected when a 'target-ctl' IOCTL op related >>> to TargetName+TPGT is called. The same is true for configfs, any time >>> anything under $MY_TARGETIQN is accessed or created, we take the >>> iscsi_tiqn_t mutex to protect it. When anything under >>> $MY_TARGETIQN/tpgt_# is accessed, the iscsi_portal_group_t mutex is >>> protecting it. >>> >>> With until enable_tpg to let initiators login to that TargetName+TPGT, I >>> honestly do not see your concern here. >>> >>>> and on the target driver's start >>>> configuration of *all* targets as a whole should be atomic as well. How >>>> are you going to solve this issue? >>>> >>> In what example would ALL iSCSI TargetName context configuration need to >>> be atomic to each other..? Having the LIO-Target design above I have >>> never ran into a requirement like this, what requirement do you have in >>> mind..? >> I've already written it: when target restarted. Disconnected initiators >> can reconnect on the wrong time and can see "no target", then consider >> it dead. > > Yes, this case you describe is exactly what I am talking about with the > "enable_tpg" flag for LIO-Target under configfs. Each fabric can define > it's own configfs groups and items to fit its own requirements, which > means, that a global "allow initiators to login" flag would like look: > > FABRIC=pscsi > > # Allow all initiators to login to all Parallel SCSI endpoints > echo 1 > /sys/kernel/config/target/$FABRIC/allow_initiators_to_login > > Or, just enable one endpoint on another fabric: > > FABRIC=sas > > # Only allow initiators to login to sas_endpoint_name > echo 1 > /sys/kernel/config/target/$FABRIC/sas_endpoint_name/enable_login > > Anyways, you get the idea. The great part of course is that this > requires zero changes to userspace code!! > >> The same is true for target shutdown: it should be atomic too. >> > > I am not debating these fundementals, I am mearly saying that depending > upon configfs for target configuration would entail the same types of > logic and mutual exclusion requirements in procfs, sysfs, or an IOCTL. Basically, yes, but there are small differences, which *might* be important. 1. If an application, holding IOCTL device fd, dies, the IOCTL handler receives notification, on which it can clean all associated resources. This seems isn't possible with configfs. Or do I miss something? 2. In IOCTL you can make a bigger piece of work at once, i.e. atomically. >>>> 2. The high level interface needs to lock somehow the low level >>>> interface during updates to protect from simultaneous actions. I don't >>>> see a simple way to do that in configfs. >>>> >>> Not having problem locking/mutex are in place is going to cause problems >>> regardless of configfs is used. Converting LIO-Target from IOCTL -> >>> configfs is really easy because all of the target-ctl IOCTL ops are >>> already protected, so using things like a configfs trigger are simple >>> because I do not have to add any additional locking considerations >>> because the ops are already protected in the IOCTL context. >> What would be if a program, who taken that mutex get dead before >> releasing it? You wouldn't receive a notification about its death, >> although with IOCTL's you would receive it. Will you invent a motex >> revoking mechanism for that. >> > > Hrrmm, why would an IOCTL process context be any different than a > configfs process context..? Just because a userspace process is running > kernel code and user hits CTRL-C, or the userspace code segfaults, does > not mean the kernel code stops running, it just means that those SIGINT > or SIGSEGVs are pending for that process and down_interruptible() > semaphores will not sleep and signal_pending(current) will return TRUE, > etc. > > I still don't see how the case of a userspace process accessing kernel > code would be different between an IOCTL and configfs process context..? See (1) above. Anyway, as I wrote before, if you like configfs and there are no objections from other people, let's go with configfs. >>>>>> Sysfs as well as configfs have one big disadvantage. They limit each >>>>>> file to only 4KB. This would force us for to create a subdirectory for >>>>>> each device and for each connected initiator. I don't like seeing >>>>>> thousands subdirectories. Additionally, such layout is a lot less >>>>>> convenient for parsing for the high level configuration tool, which >>>>>> needs to find out the difference between the current configuration and >>>>>> content of the corresponding config file. >>>>>> >>>>> So yeah, the output with configfs is limited to PAGE_SIZE as well, but >>>>> for the R/W cases we don't expect that data sets to exceed this per >>>>> configfs mkdir invocation.. >>>>> >>>>>> Currently, with procfs SCST can list in /proc/scst/sessions virtually >>>>>> unlimited amount of connected initiators in a simple for parsing manner. >>>>>> It was done using seq interface well and simply. Neither sysfs, nor >>>>>> configfs support seq interface. This would introduce significant effort >>>>>> in both kernel and user spaces. >>>>>> >>>>> Same for me with all of the target-ctl IOCTL commands. No one ever >>>>> said upstream target code was not going to require significant >>>>> effort. :-) >>>> I don't think we should create the additional one :-) >>>> >>> We are not creating a new one, we are using one that already exists >>> upstream that was made for exactly the type of problem we are looking to >>> solve. Using procfs or and IOCTL for anything serious upstream is not >>> an option, not because they upstream maintainers like to make our life >>> hard, but because they are poor interfaces for what we want to do. >>> >>> Vlad, please consider configfs. After evaluating my requirements with >>> LIO-Target, there is no technical hangups or major gotchas I can see for >>> implementing the above example. I know that LIO-Target with the example >>> above there are *NO* "atomicity of changes" issues I have from simply >>> converting IOCTL -> configfs, because the LIO-Target code called from >>> IOCTL already does the protection for the different contexts provided >>> for the example, and $MY_TARGETIQN/tpgt_#/enable_tpg protects iSCSI >>> Initiators from logging into that endpoint to access storage object >>> LUNs. >>> >>> How you give an problem case where you think a generic target engine >>> configuration scenario would not work with configfs, and I will explain >>> how with LIO-Target/LIO-Core it would and does work..? >> I have the only thing against configfs: I feel that using it could be >> harder than using well thought IOCTL interface. What's definite, that >> amount of in-kernel code for configfs will be considerably bigger, than >> for IOCTLs, but this is thing about what kernel developers do carefully >> care. In my observations > > I think the kernel code would be a bit larger using configfs, but equal > logic and complexity with an IOCTL. The great benefit with configfs of > course is that you never have to break compatibility from having to > change your struct foo that is passed with the IOCTL between > kernel/user. Also, not having to maintain a mess of C userspace code is > always a benefit. With configfs the target CLI that I have in mind > would basically be all shell scripts reference admin defined human > readable aliases mapped to targetname, target portals, storage objects, > LUNs, etc. Have you considered an application, like scstadmin, which needs to parse all existing configuration to figure out the difference between it and the corresponding config file? The layout should be friendly for such applications. Vlad ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-29 16:28 ` Vladislav Bolkhovitin 2008-08-29 20:10 ` Nicholas A. Bellinger @ 2008-08-31 18:42 ` Bart Van Assche 2008-09-19 17:50 ` Vladislav Bolkhovitin 1 sibling, 1 reply; 34+ messages in thread From: Bart Van Assche @ 2008-08-31 18:42 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: Nicholas A. Bellinger, Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Greg KH, Linux-iSCSI.org Target Dev, Jerome Martin On Fri, Aug 29, 2008 at 6:28 PM, Vladislav Bolkhovitin <vst@vlnb.net> wrote: > It has a big problem with atomicity of changes. Configuration of each iSCSI > target should be atomic and on the target driver's start configuration of > *all* targets as a whole should be atomic as well. How are you going to > solve this issue? One way to solve this (I'm not saying it's the best way to solve this) is to implement a transaction interface through configfs. A configfs interface for transactions could e.g. be implemented as follows: 1. Provide one integer variable representing the sequence number of the ongoing transaction. This variable is incremented before its value is returned to userspace. 2. Provide as many variables as needed to allow entry of all the data involved in the transaction. 3. Provide one variable for requesting a commit. A commit is requested by writing a number to this variable. If and only if the value written equals the current value of counter (1), a commit is performed. Whether or not this action triggered a commit must be reported to userspace, e.g. through errno. User space processes must use this interface as follows: (a) Read counter (1). (b) Write all relevant data to (2). (c) Write the value read in step (a) to variable (3). (d) If step (c) reported that the transaction failed, go back to step (a). This is an optimistic locking scheme that can be used by several processes simultaneously and that survives processes that are killed while performing a transaction. Bart. ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: Kernel Level Generic Target Mode control path 2008-08-31 18:42 ` Bart Van Assche @ 2008-09-19 17:50 ` Vladislav Bolkhovitin 0 siblings, 0 replies; 34+ messages in thread From: Vladislav Bolkhovitin @ 2008-09-19 17:50 UTC (permalink / raw) To: Bart Van Assche Cc: Nicholas A. Bellinger, Mike Christie, James Bottomley, FUJITA Tomonori, scst-devel, linux-scsi, Greg KH, Linux-iSCSI.org Target Dev, Jerome Martin Bart Van Assche wrote: > On Fri, Aug 29, 2008 at 6:28 PM, Vladislav Bolkhovitin <vst@vlnb.net> wrote: >> It has a big problem with atomicity of changes. Configuration of each iSCSI >> target should be atomic and on the target driver's start configuration of >> *all* targets as a whole should be atomic as well. How are you going to >> solve this issue? > > One way to solve this (I'm not saying it's the best way to solve this) > is to implement a transaction interface through configfs. A configfs > interface for transactions could e.g. be implemented as follows: > 1. Provide one integer variable representing the sequence number of > the ongoing transaction. This variable is incremented before its value > is returned to userspace. > 2. Provide as many variables as needed to allow entry of all the data > involved in the transaction. > 3. Provide one variable for requesting a commit. A commit is requested > by writing a number to this variable. If and only if the value written > equals the current value of counter (1), a commit is performed. > Whether or not this action triggered a commit must be reported to > userspace, e.g. through errno. > > User space processes must use this interface as follows: > (a) Read counter (1). > (b) Write all relevant data to (2). > (c) Write the value read in step (a) to variable (3). > (d) If step (c) reported that the transaction failed, go back to step (a). > > This is an optimistic locking scheme that can be used by several > processes simultaneously and that survives processes that are killed > while performing a transaction. Unfortunately, this seems to be a lot more complicated, than I would want to have... > Bart. > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux 2008-08-21 19:42 [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux Vladislav Bolkhovitin 2008-08-21 23:19 ` FUJITA Tomonori 2008-08-21 23:31 ` [Ksummit-2008-discuss] " Mike Christie @ 2008-08-22 0:26 ` Arjan van de Ven 2 siblings, 0 replies; 34+ messages in thread From: Arjan van de Ven @ 2008-08-22 0:26 UTC (permalink / raw) To: Vladislav Bolkhovitin Cc: ksummit-2008-discuss, linux-scsi, Bart Van Assche, James Bottomley, scst-devel Vladislav Bolkhovitin wrote: > (My apologies that I'm late to this discussion. I wasn't subscribed to > ksummit-2008-discuss, so wasn't aware about it. Big thanks to Nicholas > no need to apologize; it's not the right list for this to be discussed anyway, and it's increasingly clear that this isn't a topic for the Kernel Summit... it's a topic where the stakeholders really need to get their act together and in a storage forum come up with some agreement..... ^ permalink raw reply [flat|nested] 34+ messages in thread
end of thread, other threads:[~2008-09-19 17:50 UTC | newest] Thread overview: 34+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-08-21 19:42 [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux Vladislav Bolkhovitin 2008-08-21 23:19 ` FUJITA Tomonori 2008-08-22 19:01 ` Vladislav Bolkhovitin 2008-08-23 2:35 ` FUJITA Tomonori 2008-08-27 18:00 ` Vladislav Bolkhovitin 2008-08-21 23:31 ` [Ksummit-2008-discuss] " Mike Christie 2008-08-21 23:53 ` James Bottomley 2008-08-22 19:00 ` Vladislav Bolkhovitin 2008-08-22 19:13 ` James Bottomley 2008-08-27 17:49 ` Vladislav Bolkhovitin 2008-08-22 18:59 ` [Ksummit-2008-discuss] " Vladislav Bolkhovitin 2008-08-22 19:05 ` Arjan van de Ven 2008-08-22 19:46 ` Mike Christie 2008-08-27 17:51 ` Vladislav Bolkhovitin 2008-08-25 21:59 ` [Ksummit-2008-discuss] " Nicholas A. Bellinger 2008-08-27 17:56 ` Vladislav Bolkhovitin 2008-08-27 17:59 ` [Scst-devel] " Ming Zhang 2008-08-28 17:48 ` Vladislav Bolkhovitin 2008-08-27 22:13 ` Kernel Level Generic Target Mode control path Nicholas A. Bellinger 2008-08-27 22:40 ` Nicholas A. Bellinger 2008-08-28 17:52 ` Vladislav Bolkhovitin 2008-08-28 17:52 ` Vladislav Bolkhovitin 2008-08-28 18:00 ` James Bottomley 2008-08-28 23:08 ` Nicholas A. Bellinger 2008-08-28 23:28 ` Nicholas A. Bellinger 2008-08-29 16:28 ` Vladislav Bolkhovitin 2008-08-29 20:10 ` Nicholas A. Bellinger 2008-08-30 20:53 ` Vladislav Bolkhovitin 2008-08-31 18:18 ` Bart Van Assche 2008-09-02 21:25 ` Nicholas A. Bellinger 2008-09-19 17:50 ` Vladislav Bolkhovitin 2008-08-31 18:42 ` Bart Van Assche 2008-09-19 17:50 ` Vladislav Bolkhovitin 2008-08-22 0:26 ` [Ksummit-2008-discuss] Kernel Summit Request for Discussion: The Future of Target mode and Cloud storage on Linux Arjan van de Ven
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.