On 9/15/21 11:05 AM, Alan Somers wrote:
On Wed, Sep 15, 2021 at 11:32 AM John Baldwin <j...@freebsd.org
<mailto:j...@freebsd.org>> wrote:
On 9/15/21 8:47 AM, Alan Somers wrote:
> On Wed, Sep 15, 2021 at 9:21 AM John Baldwin <j...@freebsd.org
<mailto:j...@freebsd.org>> wrote:
>
>> On 9/14/21 1:53 PM, Alan Somers wrote:
>>> On Tue, Sep 14, 2021 at 2:46 PM John Baldwin <j...@freebsd.org
<mailto:j...@freebsd.org>> wrote:
>>>
>>>> The branch main has been updated by jhb:
>>>>
>>>> URL:
>>>>
>>
https://cgit.FreeBSD.org/src/commit/?id=1ecbc1d8e9d3fbcd8e68fc68f0a32944a12ddb1e
<https://cgit.FreeBSD.org/src/commit/?id=1ecbc1d8e9d3fbcd8e68fc68f0a32944a12ddb1e>
>>>>
>>>> commit 1ecbc1d8e9d3fbcd8e68fc68f0a32944a12ddb1e
>>>> Author: John Baldwin <j...@freebsd.org>
>>>> AuthorDate: 2021-09-14 20:46:14 +0000
>>>> Commit: John Baldwin <j...@freebsd.org>
>>>> CommitDate: 2021-09-14 20:46:14 +0000
>>>>
>>>> cxgbe tom: Don't queue AIO requests on listen sockets.
>>>>
>>>> This is similar to the fixes in 141fe2dceeae. One
difference is
>> that
>>>> TOE sockets do not change states (listen vs non-listen) once
>> created,
>>>> so no lock is needed for SOLISTENING().
>>>>
>>>> Sponsored by: Chelsio Communications
>>>>
>>>
>>> I've always wondered: what's the point to using AIO with
sockets? Can't
>>> everything socket-related be done better with non-blocking
read/write and
>>> kqueue?
>>
>> Zero-copy operation with TOE is why TOE uses AIO. Zero-copy of user
>> buffers
>> can't really work with the non-AIO APIs because the user buffer
is free to
>> be reused immediately after write(2) (and on the read side you
don't know
>> the buffer in advance to allow the NIC to write directly into
the use
>> buffer).
>>
>> In theory we could support zero-copy using mb_ext_pgs for
aio_write() for
>> the non-TOE case similar to what sendfile() does.
>>
>> --
>> John Baldwin
>>
>
> Interesting. Do you know of any common applications that include
this
> optimization? I've been working on the AIO ecosystem for Rust.
It would
> be good to ensure that this use case works, especially if
zero-copy ever
> works for non-TOE.
I do not, and I rely on patches I merged upstream to netperf (-a and
-A flags)
to test it. I believe there might be some proprietary bits in some
FreeBSD
downstreams that might make use of this.
--
John Baldwin
Do you mean these -a and -A flags, or am I looking in the wrong place?
-a sizespec
Alter the send and receive buffer alignments on the local
system. This defaults to 8 bytes.
-A sizespec
As -a, but for the remote system.
The aio options are available for the TCP tests but you might have to
build netperf with a non-default option (that's what I had to do a long
time back and I haven't checked if it's still needed).
# netperf -t TCP_STREAM -- -h
...
TCP/UDP BSD Sockets Test Options:
-a Use aio_write(2)
-A Use aio_read(2)
...
# pkg options netperf
netperf - EXAMPLES: off
netperf - EXS: on
netperf - HISTOGRAM: on
netperf - INFO: off
netperf - OMNI: off
netperf - SCTP: on
netperf - SOCKETS: on
Regards,
Navdeep
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"