Comments (7)
Adding @nybidari, who knows more about RACK.
Interesting that this is Windows-only, as I wouldn't expect that to matter. Maybe something to do with timers (since RACK is time-based) is OS-dependent?
from gvisor.
Adding @nybidari, who knows more about RACK.
Interesting that this is Windows-only, as I wouldn't expect that to matter. Maybe something to do with timers (since RACK is time-based) is OS-dependent?
FWIW I have tested with higher resolution timing, but found no difference in the results:
err := windows.TimeBeginPeriod(1)
if err != nil {
panic(err)
}
I just now realized that tcpip.TCPRACKStaticReoWnd
and tcpip.TCPRACKNoDupTh
are meant to mask on top of tcpip.TCPRACK
, and they are unused anyway. So when I was using those values it was the same as no RACK. Removed that bit from the description.
from gvisor.
I don't think RACK does anything different on windows compared to other operating systems.
From my understanding, RACK performance can be lower than other congestion control algorithms in these cases:
- Packets were reordered and RACK adjusts the reordering window. Lets say RACK detected a large reordering window.
Now if the packets (after RACK adjusted the reordering window to a large value) were actually lost, then RACK waits till the reordering window timeout to detect the packet loss. To adjust the reorder window back to the initial value, RACK will wait for 16 loss recoveries. Other congestion control algorithms do not consider reordering at all and in this case they will enter only one loss recovery falsely. - RTOs: I don't know how, but may be there are more RTOs with RACK on windows.
These are just my speculations, the root cause can be something else also!
To debug further, would it be possible to get these TCP stats for with and without RACK on windows:
https://github.com/google/gvisor/blob/master/pkg/tcpip/tcpip.go#L2123-L2146 ?
from gvisor.
To debug further, would it be possible to get these TCP stats for with and without RACK on windows: https://github.com/google/gvisor/blob/master/pkg/tcpip/tcpip.go#L2123-L2146 ?
30 second throughput test
Windows Server 2022 No TCP-RACK ~80Mb/s:
2023/11/30 00:57:00 Retransmits: 3299 FastRecovery: 0 SACKRecovery: 52 TLPRecovery: 0 SlowStartRetransmits: 1653 FastRetransmit: 52 Timeouts: 10
Windows Server 2022 TCP-RACK ~8Mb/s:
2023/11/30 00:59:40 Retransmits: 1430 FastRecovery: 0 SACKRecovery: 690 TLPRecovery: 0 SlowStartRetransmits: 4 FastRetransmit: 687 Timeouts: 4
Ubuntu 22.04 No TCP-RACK ~90Mb/s:
2023/11/30 01:05:31 Retransmits: 4251 FastRecovery: 0 SACKRecovery: 66 TLPRecovery: 0 SlowStartRetransmits: 2690 FastRetransmit: 66 Timeouts: 15
Ubuntu 22.04 TCP-RACK ~80Mb/s:
2023/11/30 01:03:07 Retransmits: 2220 FastRecovery: 0 SACKRecovery: 64 TLPRecovery: 0 SlowStartRetransmits: 3 FastRetransmit: 64 Timeouts: 1
from gvisor.
A friendly reminder that this issue had no activity for 120 days.
from gvisor.
@nybidari any findings? Any reason to believe a more recent release would improve RACK on windows?
from gvisor.
No findings, and no features have targeted this specifically. Wish we had more bandwidth to investigate.
from gvisor.
Related Issues (20)
- Support sandbox network mode in rootless HOT 8
- Resource consuption are not limited or OOM killed HOT 5
- [checklocks] Annotations ignored on generic structs
- Open control FD in gofer server (and directfs gofer client) with O_PATH. HOT 1
- [Docs] No `systrap` on the diagram in the Platform Guide page
- gofer client performs two OPEN calls (read and write) for a single write OPENAT call HOT 2
- nvproxy: unknown control command 0x3d05 HOT 6
- Default benchmark profiling options fail HOT 1
- Can not run gvisor at rockylinux 9.3 with docker 26.1.2 HOT 2
- Metrics server flag no longer exists HOT 3
- nocompressio is vulnerable to swapped chunks in state files HOT 1
- Running gvisor with shared root filesystem HOT 1
- '/dev/zero: Bad address' instead of OOM when container is memory limited HOT 2
- GPU Checkpointing: Can't save pma with non-MemoryFile of type *nvproxy.frontendFDMemmapFile HOT 5
- 'unknown field Size in struct literal of type "golang.org/x/sys/unix".XDPUmemReg' with golang.org/x/sys v0.20.0 HOT 1
- Python program running slower inside Gvisor sandbox with ARM64 HOT 7
- Doesn't work with kernel.yama.ptrace_scope=3 HOT 5
- Increase max stack size limit? HOT 2
- nftables bytecode interpreter HOT 1
- Running with fully `mlock`ed memory
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gvisor.