google / gvisor

Application Kernel for Containers
https://gvisor.dev
Apache License 2.0
15.63k stars 1.29k forks source link

Implement silly window syndrome prevention on receive side #1522

Closed majek closed 3 years ago

majek commented 4 years ago

Series of small read()'s should not generate stream of tiny ACK's.

hbhasker commented 4 years ago

Thanks for fixing this! I will try and pull this in today.

tamird commented 4 years ago

Quoting @hbhasker from another thread in which this problem was still seen:

This is most likely due to an implementation issue in netstack.go. netstack.go caches a readView and today the tcp/endpoint.go is not aware of how much data is held in the readView but not yet delivered to the user. This leads to a disconnect and can sometimes result in a situation where the read() was served out of the readView.

github-actions[bot] commented 4 years ago

This issue is stale because it has been open 90 days with no activity. Remove the stale label or comment or this will be closed in 30 days.

github-actions[bot] commented 4 years ago

This issue is stale because it has been open 90 days with no activity. Remove the stale label or comment or this will be closed in 30 days.

tamird commented 4 years ago

Sounds related to https://github.com/google/gvisor/issues/1509#issuecomment-694852634.

hbhasker commented 3 years ago

I am going to mark this closed for now as addressing the readView issue is separate from what this bug asked for. If anything the readView prevents certain updates from going rather than cause generation of more updates. Getting rid of readView will also require a reasonable amount of work in netstack.go to move TCP specific parts out into tcp/endpoint.go etc. We can open a separate issue for that when we decide to fix it.