@mark1russell7/machines 0.3.23 → 0.3.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,7 +25,7 @@ The algebra reads these documents. It gives the closed form of each timer, the f
25
25
 
26
26
  | Export | Identifier | System and version | Layer | Sources, by rung |
27
27
  | --- | --- | --- | --- | --- |
28
- | `LINUX_TCP` | `linux-tcp` | TCP of Linux 6.6, for kernels from 6.6 to 6.9 | kernel | 4 normative, 7 implemented |
28
+ | `LINUX_TCP` | `linux-tcp` | TCP of Linux 6.6, for kernels from 6.6 to 6.9 | kernel | 4 normative, 8 implemented |
29
29
  | `NF_CONNTRACK_TCP` | `nf-conntrack-tcp` | The TCP state machine of conntrack on Linux 6.6.87.2 | middlebox | 4 implemented |
30
30
  | `REDIS_CLIENT` | `redis-client` | One client connection of the Redis 8.10.2 server | server | 3 implemented, 1 documented |
31
31
  | `IOREDIS_STATUS` | `ioredis-status` | The connection status of ioredis 6.0.0, standalone | driver | 5 implemented |
@@ -109,6 +109,12 @@ A change to the version of a system changes its sources too. Each fact of the do
109
109
 
110
110
  In this repository, a snapshot of the predictions of the cells (`packages/cells/src/__snapshots__/predictions.json`) shows each prediction that a change to a document moves.
111
111
 
112
+ ### 0.3.24
113
+
114
+ - **The SYN timer of Linux TCP** (`syn_retransmit`). It is a backoff timer: each firing sends the SYN again. The waits 0 to `tcp_syn_linear_timeouts` are 1 s, and then each wait doubles up to `TCP_RTO_MAX`. The source is `tcp_retransmit_timer` in `net/ipv4/tcp_timer.c` of 6.6, and 6.17 has the same waits. At HZ 1000 a wait of 1 s is up to 64 ms late. The models are `linux.syn-wait` and `linux.syn-wait-lateness` of the algebra 0.7.3.
115
+ - `recovery` over this timer gives the first SYN after a stall. Kind run 40123580623 measured it: a SYN to a pod that was gone stalled until IPVS dropped the pod.
116
+ - One prediction of the snapshot moves, the kind cell T07.defaults.12.
117
+
112
118
  ### 0.3.18
113
119
 
114
120
  - **Caddy 2.11.7 as a proxy of gRPC** (`caddy-http2`), from the source at its tag and of golang.org/x/net v0.59.0. With no stream open for 5 min, Caddy sends GOAWAY NO_ERROR, and it closes the connection 1 s later. A PING of the client does not reset that timer. A failure of the upstream before the headers of a response gives 502, thus UNAVAILABLE. Caddy retries no call at the defaults, and at SIGTERM it waits for each stream.
package/build/index.js CHANGED
@@ -3478,6 +3478,10 @@ var linux_tcp_default = {
3478
3478
  {
3479
3479
  "ref": "net/ipv4/tcp_input.c:791-834 tcp_event_data_recv(): the first data starts quick-ACK mode; :326-333 tcp_in_quickack_mode(); :5552-5576 __tcp_ack_snd_check(): an ACK at once or delayed; net/ipv4/tcp_output.c:161-176 tcp_event_data_sent(): ping-pong mode",
3480
3480
  "rung": "implemented"
3481
+ },
3482
+ {
3483
+ "ref": "net/ipv4/tcp_timer.c:604 and :624-631 tcp_retransmit_timer(): each firing sends the SYN again, and in SYN_SENT the RTO doubles only after tcp_syn_linear_timeouts firings; the same at 6.17 (:448 total_rto, :671-678)",
3484
+ "rung": "implemented"
3481
3485
  }
3482
3486
  ],
3483
3487
  states: {
@@ -3541,6 +3545,10 @@ var linux_tcp_default = {
3541
3545
  "note": "the first retransmission the RTO timer makes, which sets retrans_stamp; the tail loss probe one RTO earlier does not"
3542
3546
  },
3543
3547
  "timer.syn.exhausted": { "kind": "timer" },
3548
+ "timer.syn": {
3549
+ "kind": "timer",
3550
+ "note": "the SYN timer fires and the SYN goes out again"
3551
+ },
3544
3552
  "timer.synack.exhausted": { "kind": "timer" },
3545
3553
  "timer.rto": {
3546
3554
  "kind": "timer",
@@ -3661,6 +3669,32 @@ var linux_tcp_default = {
3661
3669
  "fires": "timer.syn.exhausted",
3662
3670
  "note": "6.6: linear 1 s waits for the first tcp_syn_linear_timeouts retransmissions, then doubling; 131 s at the defaults. Each wait is a timer of the wheel, rounded up at its level: up to 6.08 s late in all at HZ 1000, because the wait of 64 s can be 4.096 s late"
3663
3671
  },
3672
+ "syn_retransmit": {
3673
+ "duration": {
3674
+ "model": "linux.syn-wait",
3675
+ "knobs": ["fired", "tcp_syn_linear_timeouts"],
3676
+ "unit": "s"
3677
+ },
3678
+ "lateness": {
3679
+ "model": "linux.syn-wait-lateness",
3680
+ "knobs": [
3681
+ "fired",
3682
+ "tcp_syn_linear_timeouts",
3683
+ "hz"
3684
+ ],
3685
+ "unit": "s"
3686
+ },
3687
+ "early": {
3688
+ "model": "linux.jiffy",
3689
+ "knobs": ["hz"],
3690
+ "unit": "s"
3691
+ },
3692
+ "arms": ["enter:SYN_SENT"],
3693
+ "cancels": ["rx.synack", "rx.rst"],
3694
+ "fires": "timer.syn",
3695
+ "backoff": { "resets": ["enter:SYN_SENT"] },
3696
+ "note": "each firing sends the SYN again: the waits 0 to tcp_syn_linear_timeouts keep the initial RTO of 1 s (TCP_TIMEOUT_INIT), then each firing doubles the wait, up to TCP_RTO_MAX. Each wait is a timer of the wheel: a wait of 1 s is up to 64 ms late at HZ 1000. syn_giveup is what gives up on it. Through a stall of the path, the first SYN after its end gets through (recovery)"
3697
+ },
3664
3698
  "retransmit": {
3665
3699
  "duration": {
3666
3700
  "model": "linux.rto-wait",