<feed xmlns='http://www.w3.org/2005/Atom'>
<title>src/sys/dev/iscsi, branch release/12.3.0</title>
<subtitle>FreeBSD source tree</subtitle>
<id>https://cgit-dev.freebsd.org/src/atom?h=release%2F12.3.0</id>
<link rel='self' href='https://cgit-dev.freebsd.org/src/atom?h=release%2F12.3.0'/>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/'/>
<updated>2021-03-15T03:00:38Z</updated>
<entry>
<title>Make software iSCSI more configurable.</title>
<updated>2021-03-15T03:00:38Z</updated>
<author>
<name>Alexander Motin</name>
<email>mav@FreeBSD.org</email>
</author>
<published>2021-01-28T20:53:49Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=3ef86cd7c3ccef27d42bb7cbdecd41f0fdd81f69'/>
<id>urn:sha1:3ef86cd7c3ccef27d42bb7cbdecd41f0fdd81f69</id>
<content type='text'>
Move software iSCSI tunables/sysctls into kern.icl.soft subtree.
Replace several hardcoded length constants there with variables.

While there, stretch the limits to better match Linux' open-iscsi
and our own initiator with new MAXPHYS of 1MB.  Our CTL target is
also optimized for up to 1MB I/Os, so there is also a match now.
For Windows 10 and VMware 6.7 initiators at default settings it
should make no change, since previous limits were sufficient there.

Tests of QD1 1MB writes from FreeBSD over 10GigE link show throughput
increase by 29% on idle connection and 132% with concurrent QD8 reads.

MFC after:	3 days
Sponsored by:	iXsystems, Inc.

(cherry picked from commit b75168ed24ca74f65929e5c57d4fed5f0ab08f2a)
</content>
</entry>
<entry>
<title>Move ic_check_send_space clear to the actual check.</title>
<updated>2021-03-15T02:54:56Z</updated>
<author>
<name>Alexander Motin</name>
<email>mav@FreeBSD.org</email>
</author>
<published>2021-03-03T20:21:26Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=6cd4542786f929ea57604662d7d5537f13261382'/>
<id>urn:sha1:6cd4542786f929ea57604662d7d5537f13261382</id>
<content type='text'>
It closes tiny race when the flag could be set between being cleared
and the space is checked, that would create us some more work.  The
flag setting is protected by both locks, so we can clear it in either
place, but in between both locks are dropped.

MFC after:	1 week

(cherry picked from commit afc3e54eeee635a525c88e4678cc38e3219302c3)
</content>
</entry>
<entry>
<title>Restore condition removed in df3747c6607b.</title>
<updated>2021-03-15T02:54:45Z</updated>
<author>
<name>Alexander Motin</name>
<email>mav@FreeBSD.org</email>
</author>
<published>2021-03-03T16:58:04Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=2cd7a99cebafb932fc91e5a1c20cde1d4000f4c5'/>
<id>urn:sha1:2cd7a99cebafb932fc91e5a1c20cde1d4000f4c5</id>
<content type='text'>
I think it allowed to avoid some TX thread wakeups while the socket
buffer is full.  But add there another options if ic_check_send_space
is set, which means socket just reported that new space appeared, so
it may have sense to pull more data from ic_to_send for better TX
coalescing.

MFC after:	1 week

(cherry picked from commit aff9b9ee894e3e6b6d8c7e4182d6b973804df853)
</content>
</entry>
<entry>
<title>Replace STAILQ_SWAP() with simpler STAILQ_CONCAT().</title>
<updated>2021-03-15T02:54:34Z</updated>
<author>
<name>Alexander Motin</name>
<email>mav@FreeBSD.org</email>
</author>
<published>2021-03-02T23:39:44Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=cec95c50654097b8cb8e595abda7cae7a01d5884'/>
<id>urn:sha1:cec95c50654097b8cb8e595abda7cae7a01d5884</id>
<content type='text'>
Also remove stray STAILQ_REMOVE_AFTER(), not causing problems only
because STAILQ_SWAP() fixed corrupted stqh_last.

MFC after:	1 week

(cherry picked from commit df3747c6607be12d48db825653e6adfc3041e97f)
</content>
</entry>
<entry>
<title>Fix initiator panic after 6895f89fe54e.</title>
<updated>2021-03-15T02:53:14Z</updated>
<author>
<name>Alexander Motin</name>
<email>mav@FreeBSD.org</email>
</author>
<published>2021-03-02T21:07:22Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=cb89ac5a1daa7dd8d2306460ecbf5d8dac90b9a2'/>
<id>urn:sha1:cb89ac5a1daa7dd8d2306460ecbf5d8dac90b9a2</id>
<content type='text'>
There are sessions without socket that are not disconnecting yet.

MFC after:	3 weeks

(cherry picked from commit 06e9c710998b83a3be21f7f264187fff5d590bc3)
</content>
</entry>
<entry>
<title>Optimize TX coalescing by keeping pointer to last mbuf.</title>
<updated>2021-03-15T02:52:57Z</updated>
<author>
<name>Alexander Motin</name>
<email>mav@FreeBSD.org</email>
</author>
<published>2021-03-02T04:31:34Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=3034c0dab755d29eb24d0187cfc00501b660a9c1'/>
<id>urn:sha1:3034c0dab755d29eb24d0187cfc00501b660a9c1</id>
<content type='text'>
Before m_cat() each time traversed through all the coalesced chain.

MFC after:	1 week

(cherry picked from commit b85a67f54a40053e75658a17c620b89bafaba67f)
</content>
</entry>
<entry>
<title>Coalesce socket reads in software iSCSI.</title>
<updated>2021-03-15T02:45:25Z</updated>
<author>
<name>Alexander Motin</name>
<email>mav@FreeBSD.org</email>
</author>
<published>2021-02-22T17:23:35Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=6469aab051dee71c88e27aa906c18efa09e77189'/>
<id>urn:sha1:6469aab051dee71c88e27aa906c18efa09e77189</id>
<content type='text'>
Instead of 2-4 socket reads per PDU this can do as low as one read
per megabyte, dramatically reducing TCP overhead and lock contention.

With this on iSCSI target I can write more than 4GB/s through a
single connection.

MFC after:	1 month

(cherry picked from commit 6895f89fe54e0858aea70d2bd2a9651f45d7998e)
</content>
</entry>
<entry>
<title>Make DataSN counter of solicited Data-Out local.</title>
<updated>2021-03-04T14:40:37Z</updated>
<author>
<name>Alexander Motin</name>
<email>mav@FreeBSD.org</email>
</author>
<published>2021-02-02T18:37:13Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=3e1da9a9f85bbfbb216829b5de528b86d16c888f'/>
<id>urn:sha1:3e1da9a9f85bbfbb216829b5de528b86d16c888f</id>
<content type='text'>
DataSN for solicited Data-Out is per-R2T.  Since we handle whole R2T
in one go, we don't need to store it anywhere, especially in global
per-command structure.  This may allow us to handle multiple R2T per
command at once, if we decide, or may be relax locking.

Rename the second use of that field to io_referenced_task_tag.

MFC after:	1 month

(cherry picked from commit 3dd2a7a5ea2f1641c7525f692eed416fa02c28e6)
</content>
</entry>
<entry>
<title>Exclude reserved iSCSI Initiator Task Tag.</title>
<updated>2021-02-23T00:33:20Z</updated>
<author>
<name>Alexander Motin</name>
<email>mav@FreeBSD.org</email>
</author>
<published>2021-01-24T19:23:04Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=0004227346d0ceea713b456300794d55e787a5e6'/>
<id>urn:sha1:0004227346d0ceea713b456300794d55e787a5e6</id>
<content type='text'>
RFC 7143 (11.2.1.8):
   An ITT value of 0xffffffff is reserved and MUST NOT be assigned for a
   task by the initiator.  The only instance in which it may be seen on
   the wire is in a target-initiated NOP-In PDU (Section 11.19) and in
   the initiator response to that PDU, if necessary.

MFC after:	1 month
</content>
</entry>
<entry>
<title>Remove FirstBurstLength limit for software iSCSI.</title>
<updated>2021-02-04T02:31:54Z</updated>
<author>
<name>Alexander Motin</name>
<email>mav@FreeBSD.org</email>
</author>
<published>2021-01-21T02:33:14Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=bf96a6c762a79d974bd71322cd37e23984e0f3f3'/>
<id>urn:sha1:bf96a6c762a79d974bd71322cd37e23984e0f3f3</id>
<content type='text'>
For hardware offload solicited data may potentially be handled more
efficiently than unsolicited due to direct data placement.  Or there
can be some unsolicited write buffering limitations.  It may create
situations where FirstBurstLength limit is really useful.

Software driver though has no those factors, having to do memcopy()
any way and having no so hard limit on the temporary storage.  Same
time more active use of unsolicited transfers allows to avoid some
of Ready To Transfer (R2T) PDU round-trip times and processing.

This change effectively doubles from 64KB to 128KB the maximum size
of write command that can be transferred within one link RTT.  Tests
of (64KB, 128KB] QD1 writes mixed with simultaneous QD8 reads over
the same connection, increasing RTT, shows almost double write speed
and half latency, while we should be able to afford few megabytes of
RAM for additional buffering on a target these days.

Sponsored by:	iXsystems, Inc.

(cherry picked from commit ff751ee05c939eceab25c26ad60b1d56f989aec9)
</content>
</entry>
</feed>
