Re: crimson-osd vs legacy-osd: should the perf difference be already noticeable?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 14/01/2020 11.30, Avi Kivity wrote:

On 13/01/2020 21.56, Radoslaw Zarzynski wrote:
Hi Avi,

On Sun, Jan 12, 2020 at 4:46 PM Avi Kivity <avi@xxxxxxxxxxxx> wrote:
The goal is not to require different optimization techniques or code
paths for the two stacks. And it is a challenge to do this well.
Yeah, it brings even more headache after including a requirement
to handle both stacks efficiently – without sacrificing one for
the sake of another.
I fully understand the strong desire to keep the paths consistent.
It saves a lot of problems that could come because of developing
on POSIX while deploying on native, to exemplify. What I would
likely advocate for is the presence of a switch that would allow
application to differentiate paths for the sake of maximal
performance but under strict rule: if somebody wishes to use
a knife instead of a peeler, it's his own responsibility and problem
if he cuts his fingers off.


Well, that's what I would like to avoid. I'd like a developer to know that if they are developing with the posix stack, the application would work and work well with the native stack, not that they have to retest everything.


The application
would provide the buffers for the data_source, and seastar would take
care of the copying if the data_source cannot use the buffer directly
(the native stack case).
Yes, that's a possibility. The trade-off is introduction of memcpy()
to the native.


That memcpy would be incurred only if the state machine specified it needed its own buffer. If it specified it can run from a stack-provided buffer, it would still be zero copy.


What your proposal does is reuse the read(2) call's copy to userspace for the application's purposes - the copy is still there. So the native stack isn't handicapped by this copy, it happens in both.




Perhaps we can add


    placing_data_source data_source::to_placing_data_source() &&


Which converts a regular data_source to a placing_data_source, which gets as input from the user the buffers to use.


The default placing_data_source would just copy data from the original data_source to the buffers provided by the user.

The placing_data_source provided by posix_data_source_impl::to_placing_data_source() would cooperate with the posix stack to read directly into the buffers provided by the user (reusing the copy performed by the system call).

If a data movement engine is available, the native stack might program it to perform the copy.

_______________________________________________
Dev mailing list -- dev@xxxxxxx
To unsubscribe send an email to dev-leave@xxxxxxx




[Index of Archives]     [CEPH Users]     [Ceph Devel]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux