Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
638d0f7
Add definition of new action input (#123)
shmuelk Aug 6, 2025
9ffe957
KV cache and tokenization related configuration (#125)
irar2 Aug 7, 2025
a5a7d81
Another attempt at adding a latest tag only on release builds (#124)
shmuelk Aug 7, 2025
951f4a3
Publish kv-cache events (#126)
irar2 Aug 12, 2025
6930192
Add failure injection mode to simulator
smarunich Aug 13, 2025
5ec92b8
Refactor failure injection and update simulator error handling
smarunich Aug 14, 2025
8e0eefa
Make tokenizer version configurable from Dockerfile
smarunich Aug 14, 2025
75dcb72
Add failure injection mode to simulator
smarunich Aug 13, 2025
d7bb175
Refactor failure injection and update simulator error handling
smarunich Aug 14, 2025
c35dbca
KV cache and tokenization related configuration (#125)
irar2 Aug 7, 2025
2eca8e6
Publish kv-cache events (#126)
irar2 Aug 12, 2025
28fb65b
Use same version of tokenizer in both Dockerfile and Makefile (#132)
mayabar Aug 14, 2025
3ae7113
Clarify failure injection rate documentation
smarunich Aug 14, 2025
f5ae85b
Set default failure injection rate to 0
smarunich Aug 14, 2025
9dbb689
rebase duplicates
smarunich Aug 14, 2025
106e276
re-base the changes
irar2 Aug 7, 2025
5162226
Update option constructors in simulator tests
smarunich Aug 14, 2025
7bd69e8
Merge branch 'main' into failure-mode
smarunich Aug 14, 2025
5182187
Document failure injection options in README
smarunich Aug 14, 2025
b68115f
Set FailureInjectionRate default to 0 in config
smarunich Aug 14, 2025
7bcee36
use newer version of kvcache-manager, update code accordingly (#133)
mayabar Aug 17, 2025
471fac0
Add support to echo the sim's pod name and namespace (#128)
npolshakova Aug 18, 2025
a080a17
Create UUID string under a lock (#143)
irar2 Aug 19, 2025
4309925
Support fake metrics (#144)
irar2 Aug 19, 2025
efa82a5
Makefile fixes for MacOS (#146)
shmuelk Aug 19, 2025
54efd5b
- return to kv-cache-manager version v0.2.1 (#147)
mayabar Aug 19, 2025
c3aae8d
present kv-cache related configuration parameters in readme file (#149)
mayabar Aug 20, 2025
ad487ee
updated readme file - added environment variables (#151)
mayabar Aug 20, 2025
21957bc
Fix zmq endpoints in test cases (#150)
pancak3 Aug 20, 2025
03050c7
change user to not be root in the dockerfile (#153)
mayabar Aug 20, 2025
34c29ca
Add ZMQ connection retry configuration (#152)
zhengkezhou1 Aug 21, 2025
e112efe
Added CI automation (#155)
shmuelk Aug 21, 2025
4076bd2
small changes in texts (#156)
mayabar Aug 21, 2025
859d8c2
Fix server interrupt (#161)
npolshakova Aug 24, 2025
1cdd97e
Show final config in simulaor default logger at Info lvel (#154)
pancak3 Aug 24, 2025
bdc5ecb
Cast bounds type in tests to func def: latency, interToken, and timeT…
pancak3 Aug 24, 2025
703735d
Remvoe unnecessary deferal of server close (#162)
pancak3 Aug 24, 2025
06f6e42
Fix: Rand generator is not set in a test suite which result in access…
pancak3 Aug 25, 2025
bfa02ff
Refactor failure type usage and error response format
smarunich Aug 25, 2025
700e36f
Refactor failure type flag handling and code formatting
smarunich Aug 25, 2025
14860b3
Merge branch 'main' into failure-mode
smarunich Aug 25, 2025
8f6d56c
Fix config validation and simulator test argument handling
smarunich Aug 25, 2025
e0183b7
remove duplicate
smarunich Aug 26, 2025
178a594
Refactor failure handling to use CompletionError struct
smarunich Aug 26, 2025
57657bf
Use channels for metrics updates, added metrics tests (#171)
irar2 Aug 26, 2025
974b611
Remove rerun on comment action (#174)
irar2 Aug 26, 2025
72dde24
Use one type for all errors. Map code to type
irar2 Aug 27, 2025
13492fc
Merge branch 'main' into failure-mode
irar2 Aug 27, 2025
7994048
Review comments
irar2 Aug 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/workflows/prow-github.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Run specified actions or jobs for issue and PR comments

name: "Prow github actions"
on:
issue_comment:
types: [created]

# Grant additional permissions to the GITHUB_TOKEN
permissions:
# Allow labeling issues
issues: write
# Allow adding a review to a pull request
pull-requests: write

jobs:
prow-execute:
runs-on: ubuntu-latest
steps:
- uses: jpmcb/[email protected]
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
prow-commands: "/assign
/unassign
/approve
/retitle
/area
/kind
/priority
/remove
/lgtm
/close
/reopen
/lock
/milestone
/hold
/cc
/uncc"
18 changes: 18 additions & 0 deletions .github/workflows/prow-pr-automerge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# This Github workflow will check every 5m for PRs with the lgtm label and will attempt to automatically merge them.
# If the hold label is present, it will block automatic merging.

name: "Prow merge on lgtm label"
on:
schedule:
- cron: "*/5 * * * *" # every 5 minutes

jobs:
auto-merge:
runs-on: ubuntu-latest
steps:
- uses: jpmcb/[email protected]
with:
jobs: 'lgtm'
github-token: "${{ secrets.GITHUB_TOKEN }}"
merge-method: 'squash'

11 changes: 11 additions & 0 deletions .github/workflows/prow-pr-remove-lgtm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
name: Run Jobs on PR
on: pull_request

jobs:
execute:
runs-on: ubuntu-latest
steps:
- uses: jpmcb/[email protected]
with:
jobs: lgtm
github-token: '${{ secrets.GITHUB_TOKEN }}'
38 changes: 38 additions & 0 deletions .github/workflows/stale.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: 'Mark stale issues'

on:
schedule:
- cron: '0 1 * * *'

jobs:
stale-issues:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: 'Mark stale issues'
uses: actions/stale@v9
with:
days-before-issue-stale: 90
days-before-pr-stale: -1
days-before-close: -1
stale-issue-label: 'lifecycle/stale'
exempt-issue-labels: 'lifecycle/rotten'

- name: 'Mark rotten issues'
uses: actions/stale@v9
with:
days-before-issue-stale: 30
days-before-pr-stale: -1
days-before-close: -1
stale-issue-label: 'lifecycle/rotten'
only-labels: 'lifecycle/stale'
labels-to-remove-when-stale: 'lifecycle/stale'

- name: 'Close rotten issues'
uses: actions/stale@v9
with:
days-before-stale: -1
days-before-issue-close: 30
days-before-pr-close: -1
stale-issue-label: 'lifecycle/rotten'
27 changes: 27 additions & 0 deletions .github/workflows/unstale.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: 'Unstale Issue'

on:
issues:
types: [ reopened ]
issue_comment:
types: [ created ]

jobs:
remove-stale:
runs-on: ubuntu-latest
permissions:
issues: write
if: >-
github.event.issue.state == 'open' &&
(contains(github.event.issue.labels.*.name, 'lifecycle/stale') ||
contains(github.event.issue.labels.*.name, 'lifecycle/rotten'))
steps:
- name: 'Checkout repository'
uses: actions/checkout@v5

- name: 'Remove stale labels'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "Removing 'stale' label from issue #${{ github.event.issue.number }}"
gh issue edit ${{ github.event.issue.number }} --remove-label "lifecycle/stale,lifecycle/rotten"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ bin
lib
vendor
.vscode
.devcontainer
# MacOSX
.DS_Store
3 changes: 1 addition & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ RUN microdnf install -y dnf && \

COPY --from=builder /workspace/bin/llm-d-inference-sim /app/llm-d-inference-sim

# USER 65532:65532
USER root
USER 65532:65532

ENTRYPOINT ["/app/llm-d-inference-sim"]
28 changes: 21 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,16 @@ IMAGE_TAG_BASE ?= $(IMAGE_REGISTRY)/$(PROJECT_NAME)
SIM_TAG ?= dev
IMG = $(IMAGE_TAG_BASE):$(SIM_TAG)

ifeq ($(TARGETOS),darwin)
ifeq ($(TARGETARCH),amd64)
TOKENIZER_ARCH = x86_64
else
TOKENIZER_ARCH = $(TARGETARCH)
endif
else
TOKENIZER_ARCH = $(TARGETARCH)
endif

CONTAINER_TOOL := $(shell { command -v docker >/dev/null 2>&1 && echo docker; } || { command -v podman >/dev/null 2>&1 && echo podman; } || echo "")
BUILDER := $(shell command -v buildah >/dev/null 2>&1 && echo buildah || echo $(CONTAINER_TOOL))
PLATFORMS ?= linux/amd64 # linux/arm64 # linux/s390x,linux/ppc64le
Expand All @@ -36,7 +46,7 @@ SRC = $(shell find . -type f -name '*.go')
help: ## Print help
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)

LDFLAGS ?= -extldflags '-L$(shell pwd)/lib'
GO_LDFLAGS := -extldflags '-L$(shell pwd)/lib $(LDFLAGS)'
CGO_ENABLED=1
TOKENIZER_LIB = lib/libtokenizers.a
# Extract TOKENIZER_VERSION from Dockerfile
Expand All @@ -48,7 +58,7 @@ $(TOKENIZER_LIB):
## Download the HuggingFace tokenizer bindings.
@echo "Downloading HuggingFace tokenizer bindings for version $(TOKENIZER_VERSION)..."
mkdir -p lib
curl -L https://github.com/daulet/tokenizers/releases/download/$(TOKENIZER_VERSION)/libtokenizers.$(TARGETOS)-$(TARGETARCH).tar.gz | tar -xz -C lib
curl -L https://github.com/daulet/tokenizers/releases/download/$(TOKENIZER_VERSION)/libtokenizers.$(TARGETOS)-$(TOKENIZER_ARCH).tar.gz | tar -xz -C lib
ranlib lib/*.a

##@ Development
Expand All @@ -67,7 +77,11 @@ format: ## Format Go source files
.PHONY: test
test: check-ginkgo download-tokenizer download-zmq ## Run tests
@printf "\033[33;1m==== Running tests ====\033[0m\n"
CGO_ENABLED=1 ginkgo -ldflags="$(LDFLAGS)" -v -r
ifdef GINKGO_FOCUS
CGO_ENABLED=1 ginkgo -ldflags="$(GO_LDFLAGS)" -v -r --focus="$(GINKGO_FOCUS)"
else
CGO_ENABLED=1 ginkgo -ldflags="$(GO_LDFLAGS)" -v -r
endif

.PHONY: post-deploy-test
post-deploy-test: ## Run post deployment tests
Expand All @@ -84,16 +98,16 @@ lint: check-golangci-lint ## Run lint
.PHONY: build
build: check-go download-tokenizer download-zmq
@printf "\033[33;1m==== Building ====\033[0m\n"
go build -ldflags="$(LDFLAGS)" -o bin/$(PROJECT_NAME) cmd/$(PROJECT_NAME)/main.go
go build -ldflags="$(GO_LDFLAGS)" -o bin/$(PROJECT_NAME) cmd/$(PROJECT_NAME)/main.go

##@ Container Build/Push

.PHONY: image-build
image-build: check-container-tool ## Build Docker image ## Build Docker image using $(CONTAINER_TOOL)
@printf "\033[33;1m==== Building Docker image $(IMG) ====\033[0m\n"
$(CONTAINER_TOOL) build \
--platform $(TARGETOS)/$(TARGETARCH) \
--build-arg TARGETOS=$(TARGETOS)\
--platform linux/$(TARGETARCH) \
--build-arg TARGETOS=linux \
--build-arg TARGETARCH=$(TARGETARCH)\
-t $(IMG) .

Expand Down Expand Up @@ -160,7 +174,7 @@ check-ginkgo:
.PHONY: check-golangci-lint
check-golangci-lint:
@command -v golangci-lint >/dev/null 2>&1 || { \
echo "❌ golangci-lint is not installed. Install from https://golangci-lint.run/usage/install/"; exit 1; }
echo "❌ golangci-lint is not installed. Install from https://golangci-lint.run/docs/welcome/install/"; exit 1; }

.PHONY: check-container-tool
check-container-tool:
Expand Down
15 changes: 15 additions & 0 deletions OWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
approvers:
- mayabar
- irar2
- shmuelk
- elevran
- kfirtoledo
- nilig

reviewers:
- mayabar
- irar2
- shmuelk
- elevran
- kfirtoledo
- nilig
27 changes: 24 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,15 +116,25 @@ For more details see the <a href="https://docs.vllm.ai/en/stable/getting_started
- `min-tool-call-array-param-length`: the minimum possible length of array parameters in a tool call, optional, defaults to 1
- `tool-call-not-required-param-probability`: the probability to add a parameter, that is not required, in a tool call, optional, defaults to 50
- `object-tool-call-not-required-field-probability`: the probability to add a field, that is not required, in an object in a tool call, optional, defaults to 50
<!--
- `enable-kvcache`: if true, the KV cache support will be enabled in the simulator. In this case, the KV cache will be simulated, and ZQM events will be published when a KV cache block is added or evicted.
- `kv-cache-size`: the maximum number of token blocks in kv cache
- `block-size`: token block size for contiguous chunks of tokens, possible values: 8,16,32,64,128
- `tokenizers-cache-dir`: the directory for caching tokenizers
- `hash-seed`: seed for hash generation (if not set, is read from PYTHONHASHSEED environment variable)
- `zmq-endpoint`: ZMQ address to publish events
- `zmq-max-connect-attempts`: the maximum number of ZMQ connection attempts, defaults to 0, maximum: 10
- `event-batch-size`: the maximum number of kv-cache events to be sent together, defaults to 16
-->
- `failure-injection-rate`: probability (0-100) of injecting failures, optional, default is 0
- `failure-types`: list of specific failure types to inject (rate_limit, invalid_api_key, context_length, server_error, invalid_request, model_not_found), optional, if empty all types are used
- `fake-metrics`: represents a predefined set of metrics to be sent to Prometheus as a substitute for the real metrics. When specified, only these fake metrics will be reported — real metrics and fake metrics will never be reported together. The set should include values for
- `running-requests`
- `waiting-requests`
- `kv-cache-usage`
- `loras` - an array containing LoRA information objects, each with the fields: `running` (a comma-separated list of LoRAs in use by running requests), `waiting` (a comma-separated list of LoRAs to be used by waiting requests), and `timestamp` (seconds since Jan 1 1970, the timestamp of this metric).

Example:
{"running-requests":10,"waiting-requests":30,"kv-cache-usage":0.4,"loras":[{"running":"lora4,lora2","waiting":"lora3","timestamp":1257894567},{"running":"lora4,lora3","waiting":"","timestamp":1257894569}]}

In addition, as we are using klog, the following parameters are available:
- `add_dir_header`: if true, adds the file directory to the header of the log messages
- `alsologtostderr`: log to standard error as well as files (no effect when -logtostderr=true)
Expand All @@ -140,7 +150,9 @@ In addition, as we are using klog, the following parameters are available:
- `v`: number for the log level verbosity
- `vmodule`: comma-separated list of pattern=N settings for file-filtered logging

---
## Environment variables
- `POD_NAME`: the simulator pod name. If defined, the response will contain the HTTP header `x-inference-pod` with this value
- `POD_NAMESPACE`: the simulator pod namespace. If defined, the response will contain the HTTP header `x-inference-namespace` with this value

## Migrating from releases prior to v0.2.0
- `max-running-requests` was replaced by `max-num-seqs`
Expand All @@ -156,6 +168,8 @@ make image-build
Please note that the default image tag is `ghcr.io/llm-d/llm-d-inference-sim:dev`. <br>
The following environment variables can be used to change the image tag: `REGISTRY`, `SIM_TAG`, `IMAGE_TAG_BASE` or `IMG`.

Note: On macOS, use `make image-build TARGETOS=linux` to pull the correct base image.

### Running
To run the vLLM Simulator image under Docker, run:
```bash
Expand Down Expand Up @@ -186,6 +200,13 @@ To run the vLLM simulator in a Kubernetes cluster, run:
kubectl apply -f manifests/deployment.yaml
```

When testing locally with kind, build the docker image with `make build-image` then load into the cluster:
```shell
kind load --name kind docker-image ghcr.io/llm-d/llm-d-inference-sim:dev
```

Update the `deployment.yaml` file to use the dev tag.

To verify the deployment is available, run:
```bash
kubectl get deployment vllm-llama3-8b-instruct
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require (
github.com/buaazp/fasthttprouter v0.1.1
github.com/go-logr/logr v1.4.2
github.com/google/uuid v1.6.0
github.com/llm-d/llm-d-kv-cache-manager v0.2.2-0.20250810103202-0adf0940f60a
github.com/llm-d/llm-d-kv-cache-manager v0.2.1
github.com/onsi/ginkgo/v2 v2.23.4
github.com/onsi/gomega v1.37.0
github.com/openai/openai-go v0.1.0-beta.10
Expand Down
8 changes: 2 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ github.com/buaazp/fasthttprouter v0.1.1/go.mod h1:h/Ap5oRVLeItGKTVBb+heQPks+HdIU
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/daulet/tokenizers v1.20.2 h1:tlq/vIOiBTKDPets3596aFvmJYLn3XI6LFKq4q9LKhQ=
github.com/daulet/tokenizers v1.20.2/go.mod h1:tGnMdZthXdcWY6DGD07IygpwJqiPvG85FQUnhs/wSCs=
github.com/daulet/tokenizers v1.22.1 h1:3wzAFIxfgRuqGKka8xdkeTbctDmmqOOs12GofqdorpM=
github.com/daulet/tokenizers v1.22.1/go.mod h1:tGnMdZthXdcWY6DGD07IygpwJqiPvG85FQUnhs/wSCs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand Down Expand Up @@ -68,10 +66,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/llm-d/llm-d-kv-cache-manager v0.2.0 h1:7MXFPjy3P8nZ7HbB1LWhhVLHvNTLbZglkD/ZcT7UU1k=
github.com/llm-d/llm-d-kv-cache-manager v0.2.0/go.mod h1:ZTqwsnIVC6R5YuTUrYofPIUnCeZ9RvXn1UQAdxLYl1Y=
github.com/llm-d/llm-d-kv-cache-manager v0.2.2-0.20250810103202-0adf0940f60a h1:PXR37HLgYYfolzWQA2uQOEiJlj3IV9YSvgaEFqCRSa8=
github.com/llm-d/llm-d-kv-cache-manager v0.2.2-0.20250810103202-0adf0940f60a/go.mod h1:g2UlYKNJ4S860SAQ/QoRnytAFfnp8f1luW4IuZSMwCE=
github.com/llm-d/llm-d-kv-cache-manager v0.2.1 h1:PKIjJPUF9ILLFBNvZRa0QQ/liTQjBKwWChzcenEdM08=
github.com/llm-d/llm-d-kv-cache-manager v0.2.1/go.mod h1:s1xaE4ImkihWaLg2IQh4VN6L1PgN5RD1u1VarPey6dw=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
Expand Down
16 changes: 16 additions & 0 deletions manifests/config_with_fake.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
model: "Qwen/Qwen2-0.5B"
max-loras: 2
max-cpu-loras: 5
max-num-seqs: 5
mode: "random"
time-to-first-token: 2000
inter-token-latency: 1000
kv-cache-transfer-latency: 100
seed: 100100100
fake-metrics:
running-requests: 16
waiting-requests: 3
kv-cache-usage: 0.3
loras:
- '{"running":"lora1,lora2","waiting":"lora3","timestamp":1257894567}'
- '{"running":"lora1,lora3","waiting":"","timestamp":1257894569}'
11 changes: 11 additions & 0 deletions manifests/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,17 @@ spec:
image: ghcr.io/llm-d/llm-d-inference-sim:latest
imagePullPolicy: IfNotPresent
name: vllm-sim
env:
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
ports:
- containerPort: 8000
name: http
Expand Down
9 changes: 9 additions & 0 deletions manifests/invalid-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
port: 8001
model: "Qwen/Qwen2-0.5B"
max-num-seqs: 5
mode: "random"
time-to-first-token: 2000
inter-token-latency: 1000
kv-cache-transfer-latency: 100
seed: 100100100
zmq-max-connect-attempts: -111
Loading