Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redesign protocol instructions #3

Open
changkun opened this issue Jan 31, 2019 · 0 comments
Open

Redesign protocol instructions #3

changkun opened this issue Jan 31, 2019 · 0 comments
Assignees
Labels
enhancement New feature or request NeedsInvestigation

Comments

@changkun
Copy link
Owner

Is your feature request related to a problem? Please describe.
The Guacamole protocol was designed for long connection over TCP. sync and nop instructions intend to pause the connection without breakfast. Nevertheless, during the connection IO, tons of sync and nop meaningless communication are made between client and server, which slows the server performance. Besides, Occamy involves WebSocket as a default option implicitly keep the connection alive. Therefore the only necessary instructions are control and renderer instructions.

Describe the solution you'd like
We would like to propose removing all unnecessary instructions and only kept the control and renderer instructions. This proposal requires large reimplementation of libguac, it is unclear
that this level of refactoring involves how many of cgo calls, which may slow the server due to Go runtime. An investigation is required absolutely.

@changkun changkun self-assigned this Jan 31, 2019
changkun added a commit that referenced this issue Feb 2, 2019
This intend to give a benchmark comparison between Guacamole protocol and Occamy protocol design.

name                          old time/op    new time/op    delta
InstructionParser/occamy-0-6     325ns ± 2%     126ns ± 3%  -61.16%  (p=0.000 n=10+9)
InstructionParser/occamy-1-6    54.3µs ± 1%     1.2µs ± 9%  -97.73%  (p=0.000 n=9+10)

name                          old alloc/op   new alloc/op   delta
InstructionParser/occamy-0-6      120B ± 0%       96B ± 0%  -20.00%  (p=0.000 n=10+10)
InstructionParser/occamy-1-6    36.4kB ± 0%     8.3kB ± 0%  -77.26%  (p=0.000 n=10+10)

name                          old allocs/op  new allocs/op  delta
InstructionParser/occamy-0-6      7.00 ± 0%      3.00 ± 0%  -57.14%  (p=0.000 n=10+10)
InstructionParser/occamy-1-6      23.0 ± 0%       3.0 ± 0%  -86.96%  (p=0.000 n=10+10)

As we can see, eliminate the numbers of instruction length reduces the parsing cost significantly.

See #3.
changkun added a commit that referenced this issue Feb 2, 2019
This intend to give a benchmark comparison between Guacamole protocol and Occamy protocol design.

name                          old time/op    new time/op    delta
InstructionParser/occamy-0-6     325ns ± 2%     126ns ± 3%  -61.16%  (p=0.000 n=10+9)
InstructionParser/occamy-1-6    54.3µs ± 1%     1.2µs ± 9%  -97.73%  (p=0.000 n=9+10)

name                          old alloc/op   new alloc/op   delta
InstructionParser/occamy-0-6      120B ± 0%       96B ± 0%  -20.00%  (p=0.000 n=10+10)
InstructionParser/occamy-1-6    36.4kB ± 0%     8.3kB ± 0%  -77.26%  (p=0.000 n=10+10)

name                          old allocs/op  new allocs/op  delta
InstructionParser/occamy-0-6      7.00 ± 0%      3.00 ± 0%  -57.14%  (p=0.000 n=10+10)
InstructionParser/occamy-1-6      23.0 ± 0%       3.0 ± 0%  -86.96%  (p=0.000 n=10+10)

As we can see, eliminate the numbers of instruction length reduces the parsing cost significantly.

See #3.
@changkun changkun added the enhancement New feature or request label Nov 12, 2019
changkun added a commit that referenced this issue Nov 20, 2019
changkun added a commit that referenced this issue Nov 21, 2019
This is because the connection is maintained by websocket, a keep alive thread is not necessary
anymore.

nop command can also be removed.

Update #3
changkun added a commit that referenced this issue Dec 7, 2021
changkun added a commit that referenced this issue Dec 7, 2021
This is because the connection is maintained by websocket, a keep alive thread is not necessary
anymore.

nop command can also be removed.

Update #3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request NeedsInvestigation
Projects
None yet
Development

No branches or pull requests

1 participant