{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":575575951,"defaultBranch":"master","name":"wireguard-go","ownerLogin":"tailscale","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2022-12-07T20:31:37.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/48932923?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1717804832.0","currentOid":""},"activityList":{"items":[{"before":"480b0eca59e5a71ea76d53d5e8ed63d57edb59e3","after":"f2f479709ebd28486bdadc9eb511cd8975ccb5b2","ref":"refs/heads/raggi/cryptorouting-via-endpoint","pushedAt":"2024-06-08T00:04:33.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"raggi","name":"James Tucker","path":"/raggi","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/348?s=80&v=4"},"commit":{"message":"conn,device: enable cryptorouting via PeerAwareEndpoint\n\nIntroduce an optional extension point for Endpoint that enables a path\nfor WireGuard to inform an integration about the peer public key that is\nassociated with an Endpoint.\n\nThe API is expected to return either the same or a new Endpoint in\nresponse to this function. A future version of this patch could\npotentially remove the returned Endpoint, but would require larger\nintegrator changes downstream.\n\nThis adds a small per-packet cost that could later be removed with a\nlarger refactor of the wireguard-go interface and Tailscale magicsock\ncode, as well as introducing a generic bound for Endpoint in a device &\nbind instance.\n\nUpdates tailscale/corp#20732","shortMessageHtmlLink":"conn,device: enable cryptorouting via PeerAwareEndpoint"}},{"before":null,"after":"480b0eca59e5a71ea76d53d5e8ed63d57edb59e3","ref":"refs/heads/raggi/cryptorouting-via-endpoint","pushedAt":"2024-06-08T00:00:32.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"raggi","name":"James Tucker","path":"/raggi","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/348?s=80&v=4"},"commit":{"message":"conn,device: enable cryptorouting via PeerAwareEndpoint\n\nIntroduce an optional extension point for Endpoint that enables a path\nfor WireGuard to inform an integration about the peer public key that is\nassociated with an Endpoint.\n\nThe API is expected to return either the same or a new Endpoint in\nresponse to this function. A future version of this patch could\npotentially remove the returned Endpoint, but would require larger\nintegrator changes downstream.\n\nThis adds a small per-packet cost, but outside of the peer lock.\n\nUpdates tailscale/corp#20732","shortMessageHtmlLink":"conn,device: enable cryptorouting via PeerAwareEndpoint"}},{"before":"f4efaf65eb1f414fea79d0bc4e20fafe90215d62","after":null,"ref":"refs/heads/jwhited/vxlan-disable-offload","pushedAt":"2024-04-29T18:54:48.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"}},{"before":"64040e66467d89c9312cf442866185404b7ec60c","after":"03c5a0ccf7546055344017505460bdb9c0425b17","ref":"refs/heads/tailscale","pushedAt":"2024-04-29T18:54:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"tun: implement API for disabling UDP GRO on Linux\n\nCertain device drivers (e.g. vxlan, geneve) do not properly handle\ncoalesced UDP packets later in the stack, resulting in packet loss.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"tun: implement API for disabling UDP GRO on Linux"}},{"before":null,"after":"f4efaf65eb1f414fea79d0bc4e20fafe90215d62","ref":"refs/heads/jwhited/vxlan-disable-offload","pushedAt":"2024-04-29T16:16:54.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"tun: implement API for disabling UDP GRO on Linux\n\nCertain device drivers (e.g. vxlan, geneve) do not properly handle\ncoalesced UDP packets later in the stack, resulting in packet loss.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"tun: implement API for disabling UDP GRO on Linux"}},{"before":"cc193a0b327276d902b3b688d3a06a857b17fcb7","after":"64040e66467d89c9312cf442866185404b7ec60c","ref":"refs/heads/tailscale","pushedAt":"2024-04-13T17:55:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bradfitz","name":"Brad Fitzpatrick","path":"/bradfitz","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2621?s=80&v=4"},"commit":{"message":"ipc: build on aix\n\nUpdates tailscale/tailscale#11361","shortMessageHtmlLink":"ipc: build on aix"}},{"before":"b4ffecd0ce81dfac46a7928ec18a3b66ea4278d4","after":"09428b369f4e9ef8921f12103d8478e77a300318","ref":"refs/heads/tailscale-peer-endpoint-sync","pushedAt":"2023-11-22T21:15:42.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: reduce redundant per-packet overhead in RX path\n\nPeer.RoutineSequentialReceiver() deals with packet vectors and does not\nneed to perform timer and endpoint operations for every packet in a\ngiven vector. Changing these per-packet operations to per-vector\nimproves throughput by as much as 10% in some environments.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"device: reduce redundant per-packet overhead in RX path"}},{"before":null,"after":"b4ffecd0ce81dfac46a7928ec18a3b66ea4278d4","ref":"refs/heads/tailscale-peer-endpoint-sync","pushedAt":"2023-11-22T20:58:34.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: reduce redundant per-packet overhead in RX path\n\nPeer.RoutineSequentialReceiver() deals with packet vectors and does not\nneed to perform timer and endpoint operations for every packet in a\ngiven vector. Changing these per-packet operations to per-vector\nimproves throughput by as much as 10% in some environments.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"device: reduce redundant per-packet overhead in RX path"}},{"before":"4d265876b462efb7ab1b8522e2f3796c15fe52d1","after":null,"ref":"refs/heads/jwhited/peer-endpoint-mu","pushedAt":"2023-11-21T18:49:07.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"}},{"before":"db7604d1aa907a37c91164982d2a881fe6edc3c1","after":"cc193a0b327276d902b3b688d3a06a857b17fcb7","ref":"refs/heads/tailscale","pushedAt":"2023-11-21T18:48:58.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: reduce redundant per-packet overhead in RX path\n\nPeer.RoutineSequentialReceiver() deals with packet vectors and does not\nneed to perform timer and endpoint operations for every packet in a\ngiven vector. Changing these per-packet operations to per-vector\nimproves throughput by as much as 10% in some environments.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"device: reduce redundant per-packet overhead in RX path"}},{"before":"97f4454d0e503d611d76bbdeca357efe5ab4dfaf","after":"4d265876b462efb7ab1b8522e2f3796c15fe52d1","ref":"refs/heads/jwhited/peer-endpoint-mu","pushedAt":"2023-11-21T01:33:52.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: reduce redundant per-packet overhead in RX path\n\nPeer.RoutineSequentialReceiver() deals with packet vectors and does not\nneed to perform timer and endpoint operations for every packet in a\ngiven vector. Changing these per-packet operations to per-vector\nimproves throughput by as much as 10% in some environments.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"device: reduce redundant per-packet overhead in RX path"}},{"before":"d92db3d642d35e93c29f3d65424ecce585cb8e5e","after":"97f4454d0e503d611d76bbdeca357efe5ab4dfaf","ref":"refs/heads/jwhited/peer-endpoint-mu","pushedAt":"2023-11-21T01:21:34.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: reduce redundant per-packet overhead in RX path\n\nPeer.RoutineSequentialReceiver() deals with packet vectors and does not\nneed to perform timer and endpoint operations for every packet in a\ngiven vector. Changing these per-packet operations to per-vector\nimproves throughput by as much as 10% in some environments.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"device: reduce redundant per-packet overhead in RX path"}},{"before":null,"after":"d92db3d642d35e93c29f3d65424ecce585cb8e5e","ref":"refs/heads/jwhited/peer-endpoint-mu","pushedAt":"2023-11-21T01:00:04.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: reduce redundant per-packet overhead in RX path\n\nPeer.RoutineSequentialReceiver() deals with packet vectors and does not\nneed to perform timer and endpoint operations for every packet in a\ngiven vector. Changing these per-packet operations to per-vector\nimproves throughput by as much as 10% in some environments.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"device: reduce redundant per-packet overhead in RX path"}},{"before":null,"after":"bec87f9cb15dae6cb9df2001ace2eb537f362a0b","ref":"refs/heads/jwhited/peer-endpoint-internal-sync","pushedAt":"2023-11-20T19:21:15.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: reduce redundant per-packet overhead in RX path\n\nPeer.RoutineSequentialReceiver() deals with packet vectors and does not\nneed to perform timer and endpoint operations for every packet in a\ngiven vector. Changing these per-packet operations to per-vector\nimproves throughput by as much as 10% in some environments.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"device: reduce redundant per-packet overhead in RX path"}},{"before":null,"after":"52b6fc9d4e97a3d75be0ea8c80f7b66e6992309f","ref":"refs/heads/jwhited/peer-endpoint-contention","pushedAt":"2023-11-18T03:50:51.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: reduce redundant per-packet overhead in RX path\n\nPeer.RoutineSequentialReceiver() deals with packet vectors and does not\nneed to perform timer and endpoint operations for every packet in a\ngiven vector. Changing these per-packet operations to per-vector\nimproves throughput by as much as 10% in some environments.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"device: reduce redundant per-packet overhead in RX path"}},{"before":"125c19115abc605a5b3b6d3db23d478561bf7837","after":"f4d307a42cd3a46a1171de579a394e9b31b05743","ref":"refs/heads/jwhited/peer-endpoint-atomics","pushedAt":"2023-11-17T00:01:49.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: reduce redundant per-packet overhead in RX path\n\nPeer.RoutineSequentialReceiver() deals with packet vectors and does not\nneed to perform timer and endpoint operations for every packet in a\ngiven vector. Changing these per-packet operations to per-vector\nimproves throughput by as much as 10% in some environments.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"device: reduce redundant per-packet overhead in RX path"}},{"before":"923fdd4f3e488a8e2c689a935752e2949b315d60","after":"125c19115abc605a5b3b6d3db23d478561bf7837","ref":"refs/heads/jwhited/peer-endpoint-atomics","pushedAt":"2023-11-16T21:02:07.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: reduce redundant per-packet overhead in RX path\n\nPeer.RoutineSequentialReceiver() deals with packet vectors and does not\nneed to perform timer and endpoint operations for every packet in a\ngiven vector. Changing these per-packet operations to per-vector\nimproves throughput by as much as 10% in some environments.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"device: reduce redundant per-packet overhead in RX path"}},{"before":"7a905be6c96e335722f57d2399580f57755b35bf","after":"0898ff1942a709797534c322cdecdd46dc764a81","ref":"refs/heads/tailscale-tun-uso-uro","pushedAt":"2023-11-15T19:37:23.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"tun: implement UDP GSO/GRO for Linux\n\nImplement UDP GSO and GRO for the Linux tun.Device, which is made\npossible by virtio extensions in the kernel's TUN driver starting in\nv6.2.\n\nsecnetperf, a QUIC benchmark utility from microsoft/msquic@8e1eb1a, is\nused to demonstrate the effect of this commit between two Linux\ncomputers with i5-12400 CPUs. There is roughly ~13us of round trip\nlatency between them. secnetperf was invoked with the following command\nline options:\n-stats:1 -exec:maxtput -test:tput -download:10000 -timed:1 -encrypt:0\n\nThe first result is from commit 2e0774f without UDP GSO/GRO on the TUN.\n\n[conn][0x55739a144980] STATS: EcnCapable=0 RTT=3973 us\nSendTotalPackets=55859 SendSuspectedLostPackets=61\nSendSpuriousLostPackets=59 SendCongestionCount=27\nSendEcnCongestionCount=0 RecvTotalPackets=2779122\nRecvReorderedPackets=0 RecvDroppedPackets=0\nRecvDuplicatePackets=0 RecvDecryptionFailures=0\nResult: 3654977571 bytes @ 2922821 kbps (10003.972 ms).\n\nThe second result is with UDP GSO/GRO on the TUN.\n\n[conn][0x56493dfd09a0] STATS: EcnCapable=0 RTT=1216 us\nSendTotalPackets=165033 SendSuspectedLostPackets=64\nSendSpuriousLostPackets=61 SendCongestionCount=53\nSendEcnCongestionCount=0 RecvTotalPackets=11845268\nRecvReorderedPackets=25267 RecvDroppedPackets=0\nRecvDuplicatePackets=0 RecvDecryptionFailures=0\nResult: 15574671184 bytes @ 12458214 kbps (10001.222 ms).\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"tun: implement UDP GSO/GRO for Linux"}},{"before":"0fcc144d83c3fc2876e77e9c9da5779c5ca52ded","after":"84ab997757019f10cfa162f9084dc33fa381d446","ref":"refs/heads/jwhited/windows-tun-read-sizes","pushedAt":"2023-11-08T22:13:46.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"tun: fix Device.Read() buf length assumption on Windows\n\nThe length of a packet read from the underlying TUN device may exceed\nthe length of a supplied buffer when MTU exceeds device.MaxMessageSize.\n\nReviewed-by: Brad Fitzpatrick \nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"tun: fix Device.Read() buf length assumption on Windows"}},{"before":"111ef41d44e5f580c17212f51998e8b178e2ab43","after":"0fcc144d83c3fc2876e77e9c9da5779c5ca52ded","ref":"refs/heads/jwhited/windows-tun-read-sizes","pushedAt":"2023-11-08T22:06:53.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"tun: fix Device.Read() buf length assumption on Windows\n\nThe length of a packet read from the underlying TUN device may exceed\nthe length of a supplied buffer when MTU exceeds device.MaxMessageSize.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"tun: fix Device.Read() buf length assumption on Windows"}},{"before":"469159ecf7d108dc1d44f8789dedbb463b7bd3a6","after":"2e0774f246fb4fc1bd5cb44584d033038c89174e","ref":"refs/heads/master","pushedAt":"2023-11-08T21:55:40.000Z","pushType":"push","commitsCount":13,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: ratchet up max segment size on android\n\nGRO requires big allocations to be efficient. This isn't great, as there\nmight be Android memory usage issues. So we should revisit this commit.\nBut at least it gets things working again.\n\nSigned-off-by: Jason A. Donenfeld ","shortMessageHtmlLink":"device: ratchet up max segment size on android"}},{"before":null,"after":"111ef41d44e5f580c17212f51998e8b178e2ab43","ref":"refs/heads/jwhited/windows-tun-read-sizes","pushedAt":"2023-11-08T21:54:16.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"tun: fix Device.Read() buf length assumption on Windows\n\nThe length of a packet read from the underlying TUN device may exceed\nthe length of a supplied buffer when MTU exceeds device.MaxMessageSize.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"tun: fix Device.Read() buf length assumption on Windows"}},{"before":"d95ea916daaf9bffc5485f76e2f26b70962521ee","after":"923fdd4f3e488a8e2c689a935752e2949b315d60","ref":"refs/heads/jwhited/peer-endpoint-atomics","pushedAt":"2023-11-08T03:53:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"fixup! device: update Peer.endpoint and related to use atomics","shortMessageHtmlLink":"fixup! device: update Peer.endpoint and related to use atomics"}},{"before":null,"after":"d95ea916daaf9bffc5485f76e2f26b70962521ee","ref":"refs/heads/jwhited/peer-endpoint-atomics","pushedAt":"2023-11-08T00:13:03.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"device: reduce redundant per-packet overhead in RX path\n\nPeer.RoutineSequentialReceiver() deals with packet vectors and does not\nneed to perform timer and endpoint operations for every packet in a\ngiven vector. Changing these per-packet operations to per-vector\nimproves throughput by as much as 10% in some environments.\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"device: reduce redundant per-packet overhead in RX path"}},{"before":"62b337da813cc9e71c7b88e3685f6821d8120215","after":null,"ref":"refs/heads/jwhited/tun-udp-gro-cond","pushedAt":"2023-11-01T02:20:14.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"}},{"before":"24f8d7c9e7312590e1f2d8e0ca02c30b9d88e91a","after":"db7604d1aa907a37c91164982d2a881fe6edc3c1","ref":"refs/heads/tailscale","pushedAt":"2023-11-01T02:20:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"tun: don't assume UDP GRO is supported\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"tun: don't assume UDP GRO is supported"}},{"before":null,"after":"62b337da813cc9e71c7b88e3685f6821d8120215","ref":"refs/heads/jwhited/tun-udp-gro-cond","pushedAt":"2023-11-01T01:08:44.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"tun: don't assume UDP GRO is supported\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"tun: don't assume UDP GRO is supported"}},{"before":"185e5cecd56ee84387703889347fde32ba67eb7e","after":"7a905be6c96e335722f57d2399580f57755b35bf","ref":"refs/heads/tailscale-tun-uso-uro","pushedAt":"2023-10-26T22:28:23.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"tun: implement UDP GSO/GRO for Linux\n\nImplement UDP GSO and GRO for the Linux tun.Device, which is made\npossible by virtio extensions in the kernel's TUN driver starting in\nv6.2.\n\nsecnetperf, a QUIC benchmark utility from microsoft/msquic@8e1eb1a, is\nused to demonstrate the effect of this commit between two Linux\ncomputers with i5-12400 CPUs. These is roughly ~13us of round trip\nlatency between them. secnetperf was invoked with the following command\nline options:\n-stats:1 -exec:maxtput -test:tput -download:10000 -timed:1 -encrypt:0\n\nThe first result is from commit 2e0774f without UDP GSO/GRO on the TUN.\n\n[conn][0x55739a144980] STATS: EcnCapable=0 RTT=3973 us\nSendTotalPackets=55859 SendSuspectedLostPackets=61\nSendSpuriousLostPackets=59 SendCongestionCount=27\nSendEcnCongestionCount=0 RecvTotalPackets=2779122\nRecvReorderedPackets=0 RecvDroppedPackets=0\nRecvDuplicatePackets=0 RecvDecryptionFailures=0\nResult: 3654977571 bytes @ 2922821 kbps (10003.972 ms).\n\nThe second result is with UDP GSO/GRO on the TUN.\n\n[conn][0x56493dfd09a0] STATS: EcnCapable=0 RTT=1216 us\nSendTotalPackets=165033 SendSuspectedLostPackets=64\nSendSpuriousLostPackets=61 SendCongestionCount=53\nSendEcnCongestionCount=0 RecvTotalPackets=11845268\nRecvReorderedPackets=25267 RecvDroppedPackets=0\nRecvDuplicatePackets=0 RecvDecryptionFailures=0\nResult: 15574671184 bytes @ 12458214 kbps (10001.222 ms).\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"tun: implement UDP GSO/GRO for Linux"}},{"before":null,"after":"185e5cecd56ee84387703889347fde32ba67eb7e","ref":"refs/heads/tailscale-tun-uso-uro","pushedAt":"2023-10-26T20:29:21.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"tun: implement UDP GSO/GRO for Linux\n\nImplement UDP GSO and GRO for the Linux tun.Device, which is made\npossible by virtio extensions in the kernel's TUN driver starting in\nv6.2.\n\nsecnetperf, a QUIC benchmark utility from microsoft/msquic@8e1eb1a, is\nused to demonstrate the effect of this commit between two Linux\ncomputers with i5-12400 CPUs. These is roughly ~13us of round trip\nlatency between them. secnetperf was invoked with the following command\nline options:\n-stats:1 -exec:maxtput -test:tput -download:10000 -timed:1 -encrypt:0\n\nThe first result is from commit 2e0774f without UDP GSO/GRO on the TUN.\n\n[conn][0x55739a144980] STATS: EcnCapable=0 RTT=3973 us\nSendTotalPackets=55859 SendSuspectedLostPackets=61\nSendSpuriousLostPackets=59 SendCongestionCount=27\nSendEcnCongestionCount=0 RecvTotalPackets=2779122\nRecvReorderedPackets=0 RecvDroppedPackets=0\nRecvDuplicatePackets=0 RecvDecryptionFailures=0\nResult: 3654977571 bytes @ 2922821 kbps (10003.972 ms).\n\nThe second result is with UDP GSO/GRO on the TUN.\n\n[conn][0x56139726e9a0] STATS: EcnCapable=0 RTT=340 us\nSendTotalPackets=152360 SendSuspectedLostPackets=67\nSendSpuriousLostPackets=65 SendCongestionCount=61\nSendEcnCongestionCount=0 RecvTotalPackets=10993381\nRecvReorderedPackets=18929 RecvDroppedPackets=0\nRecvDuplicatePackets=0 RecvDecryptionFailures=0\nResult: 14456692749 bytes @ 11564895 kbps (10000.397 ms).\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"tun: implement UDP GSO/GRO for Linux"}},{"before":"2f6748dc88e777ff6eed22f5ce5d7658c6bb9410","after":"24f8d7c9e7312590e1f2d8e0ca02c30b9d88e91a","ref":"refs/heads/tailscale","pushedAt":"2023-10-26T19:09:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jwhited","name":"Jordan Whited","path":"/jwhited","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10344482?s=80&v=4"},"commit":{"message":"tun: implement UDP GSO/GRO for Linux\n\nSigned-off-by: Jordan Whited ","shortMessageHtmlLink":"tun: implement UDP GSO/GRO for Linux"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEX6w7MgA","startCursor":null,"endCursor":null}},"title":"Activity ยท tailscale/wireguard-go"}