[roll] Roll fuchsia [virtualization][vsock] Prevent TX from starving RX control

The state lock is write preferring. It seems like a possible ordering
is:

1) Write guard is dropped
2) Readers wake up, await when trying to acquire read lock
3) TX task wakes up and pulls a chain off of the queue
4) TX task acquires a write lock pre-empting the readers

That's generally not a problem in most places (although I might want to
revisit this with a fairer lock), but when handling an RX chain blocking
on a read also blocks control packets.

The integration test is maxing out TX throughput in a tight loop, and it
seems to have happened enough times that we were unable to send our
shutdown packet before the test finished.

Metrics from Debian on QEMU:

(Before) Micro Benchmark Results
------------------------
* Data corruption check: PASSED
* Round trip latency of 4096 bytes:
	Min: 183506ns (0.184ms)
	25th percentile: 524556ns (0.525ms)
	50th percentile: 857401ns (0.857ms)
	75th percentile: 1129873ns (1.130ms)
	99th percentile: 1941657ns (1.942ms)
	Max: 9924678ns (9.925ms)
* TX (guest -> host, unreliable) throughput of 128 MiB:
	Min: 100.94MiB/s
	25th percentile: 108.81MiB/s
	50th percentile: 111.96MiB/s
	75th percentile: 116.58MiB/s
	99thth percentile: 125.79MiB/s
	Max: 126.63MiB/s
* RX (host -> guest, unreliable) throughput of 128 MiB:
	Min: 103.03MiB/s
	25th percentile: 111.21MiB/s
	50th percentile: 115.81MiB/s
	75th percentile: 120.78MiB/s
	99thth percentile: 130.60MiB/s
	Max: 131.09MiB/s
* Single stream unidirectional round trip throughput of 128 MiB:
	Min: 163.80MiB/s
	25th percentile: 185.83MiB/s
	50th percentile: 190.41MiB/s
	75th percentile: 194.30MiB/s
	99thth percentile: 209.05MiB/s
	Max: 209.54MiB/s
* Multistream (5 connections) unidirectional round trip throughput of 128 MiB:
	Min: 32.65MiB/s
	25th percentile: 34.03MiB/s
	50th percentile: 34.59MiB/s
	75th percentile: 35.19MiB/s
	99thth percentile: 36.85MiB/s
	Max: 36.93MiB/s

(After) Micro Benchmark Results
------------------------
* Data corruption check: PASSED
* Round trip latency of 4096 bytes:
	Min: 185399ns (0.185ms)
	25th percentile: 795221ns (0.795ms)
	50th percentile: 1028699ns (1.029ms)
	75th percentile: 1287934ns (1.288ms)
	99th percentile: 2122094ns (2.122ms)
	Max: 7476711ns (7.477ms)
* TX (guest -> host, unreliable) throughput of 128 MiB:
	Min: 101.26MiB/s
	25th percentile: 110.47MiB/s
	50th percentile: 113.87MiB/s
	75th percentile: 118.03MiB/s
	99thth percentile: 124.97MiB/s
	Max: 126.28MiB/s
* RX (host -> guest, unreliable) throughput of 128 MiB:
	Min: 106.17MiB/s
	25th percentile: 114.16MiB/s
	50th percentile: 118.09MiB/s
	75th percentile: 122.71MiB/s
	99thth percentile: 130.44MiB/s
	Max: 132.59MiB/s
* Single stream unidirectional round trip throughput of 128 MiB:
	Min: 168.83MiB/s
	25th percentile: 185.59MiB/s
	50th percentile: 193.18MiB/s
	75th percentile: 200.73MiB/s
	99thth percentile: 218.25MiB/s
	Max: 222.25MiB/s
* Multistream (5 connections) unidirectional round trip throughput of 128 MiB:
	Min: 33.82MiB/s
	25th percentile: 34.65MiB/s
	50th percentile: 35.08MiB/s
	75th percentile: 35.47MiB/s
	99thth percentile: 35.97MiB/s
	Max: 36.49MiB/s

Original-Bug: 109780
Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/726887
Original-Revision: 9e74f088457e5282af8eeed699efd3fabfaf8683
GitOrigin-RevId: bd845f7464ea0a704c62957af57f43aee9bd5bc0
Change-Id: I2fdd8c93f30340acfa06dc5d87cf70644487e9e1
1 file changed
tree: e854b8de7b7dccbb730c4d6860553ae97998c95b
  1. git-hooks/
  2. infra/
  3. third_party/
  4. cts
  5. firmware
  6. flower
  7. jiri.lock
  8. minimal
  9. prebuilts
  10. README.md
  11. stem
  12. test_durations
  13. toolchain
README.md

Integration

This repository contains Fuchsia's Global Integration manifest files.

Making changes

All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.

Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance via the IRC channel #fuchsia on Freenode.

Obtaining the source

First install Jiri.

Next run:

$ jiri init
$ jiri import minimal https://fuchsia.googlesource.com/integration
$ jiri update

Third party

Third party projects should have their own subdirectory in ./third_party.