scsi-target and the buffer cache

Eric Anderson anderson at centtech.com
Wed Dec 7 20:32:34 PST 2005


Nate Lawson wrote:

> Scott Long wrote:
>
>> Eric Anderson wrote:
>>
>>> Nate Lawson wrote:
>>>
>>>> Eric Anderson wrote:
>>>>
>>>>> I'm curious about whether a target mode device would use the 
>>>>> buffer cache or not.  Here's a scenario:
>>>>>
>>>>> Host A: has fibre channel host adapter, in target mode, large 
>>>>> memory pool, and another fiber channel host adapter connecting to 
>>>>> fibre channel block device.
>>>>> Host B: Fibre channel host adapter, connecting to Host A.  'sees' 
>>>>> the target mode block device created by Host A.
>>>>>
>>>>> Will Host A use the buffer cache to cache blocks between the real 
>>>>> block device, and the shared target mode device?
>>>>> What about if Host A put a filesystem on the block device, created 
>>>>> a single file the size of the filesystem, and shared that 
>>>>> filesystem via a target mode device to Host B?
>>>>> What I'm wanting is a box (FreeBSD?) that can be placed between a 
>>>>> fibre channel block device (like a RAID array), and a fibre 
>>>>> channel host using that block device, and act as a block cache for 
>>>>> that device, using the FreeBSD's memory.  If it had a significant 
>>>>> amount of memory, this could be very useful.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> If you use the example scsi_target usermode 
>>>> (usr/share/examples/scsi_target), then the buffer cache will be 
>>>> used since its reads/writes are from usermode like normal.  If you 
>>>> don't want that behavior, you can set O_DIRECT in the open() call 
>>>> of the backing store file.
>>>>
>>>> If you chose to modify the kernel side, you'd have to make sure 
>>>> your accesses were through the VOP layer and then it would be cached.
>>>>
>>>> You should check to be sure the target mode performance meets your 
>>>> expectations also.
>>>>
>>>
>>> I guess I would be using the user mode tool, unless there's another 
>>> way?  Your comment on performance also makes me a little worried 
>>> about that now - do you think I would see a large performance hit?
>>> Thanks!
>>> Eric
>>>
>>>
>>
>> The way the target mode stack works in FreeBSD is that the kernel 
>> provides some of the basic services, but the actual target emulator
>> is meant to live in userland.  The userland program responds to
>> events from the kernel via the select interface.  This generally
>> works pretty well.  However, it does mean that control has to
>> cross the kernel-userland boundary at least once for every event.
>>
>> What I'd suggest doing is prototyping your target emulator in userland
>> and evaluating the performance there, and then moving it to the kernel
>> if you _really_ need more performance.
>
>
> Agree 100%.  While having it in usermode means there are boundary 
> crossings that increase per-transaction latency, the actual bulk data 
> transfer is via zero-copy IO and you should be able to exceed the data 
> transfer rates of several 10K RPM drives on decent hardware.
>


Ok, great.. Now, will scsi_target work ok with raw devices, or only 
files?  (although I'm not sure theres all that much difference really).

Thanks!!
Eric


-- 
------------------------------------------------------------------------
Eric Anderson        Sr. Systems Administrator        Centaur Technology
Anything that works is better than anything that doesn't.
------------------------------------------------------------------------



More information about the freebsd-hackers mailing list