docs: add install/upgrade instructions, smarter benchmark priming
README: document `numa install`, `numa service`, Homebrew upgrade, and `make deploy` workflows. Benchmark: replace fixed `sleep 4` with `wait_for_priming` that polls cache entry count for stability. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
27
README.md
27
README.md
@@ -30,11 +30,34 @@ dig @127.0.0.1 ads.google.com # ✗ blocked → 0.0.0.0
|
|||||||
|
|
||||||
Open the dashboard: **http://numa.numa** (or `http://localhost:5380`)
|
Open the dashboard: **http://numa.numa** (or `http://localhost:5380`)
|
||||||
|
|
||||||
Or build from source:
|
### Set as system resolver
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Point your system DNS to Numa (saves originals for uninstall)
|
||||||
|
sudo numa install
|
||||||
|
|
||||||
|
# Run as a persistent service (auto-starts on boot, restarts if killed)
|
||||||
|
sudo numa service start
|
||||||
|
```
|
||||||
|
|
||||||
|
To uninstall: `sudo numa service stop` removes the service, `sudo numa uninstall` restores your original DNS.
|
||||||
|
|
||||||
|
### Upgrade
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# From Homebrew
|
||||||
|
brew upgrade numa
|
||||||
|
|
||||||
|
# From source
|
||||||
|
make deploy # builds release, copies binary, re-signs, restarts service
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build from source
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/razvandimescu/numa.git && cd numa
|
git clone https://github.com/razvandimescu/numa.git && cd numa
|
||||||
cargo build --release
|
cargo build --release
|
||||||
sudo ./target/release/numa
|
sudo cp target/release/numa /usr/local/bin/numa
|
||||||
```
|
```
|
||||||
|
|
||||||
## Why Numa
|
## Why Numa
|
||||||
|
|||||||
@@ -79,6 +79,28 @@ wait_for_api() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wait_for_priming() {
|
||||||
|
echo -n "Waiting for TLD priming..."
|
||||||
|
local prev=0
|
||||||
|
local stable=0
|
||||||
|
for _ in $(seq 1 60); do
|
||||||
|
local entries
|
||||||
|
entries=$(curl -s "$API/stats" | python3 -c "import sys,json; print(json.load(sys.stdin)['cache']['entries'])" 2>/dev/null || echo 0)
|
||||||
|
if [ "$entries" -gt 0 ] && [ "$entries" = "$prev" ]; then
|
||||||
|
stable=$((stable + 1))
|
||||||
|
if [ $stable -ge 3 ]; then
|
||||||
|
echo " done ($entries cache entries)."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
stable=0
|
||||||
|
fi
|
||||||
|
prev="$entries"
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
echo " timeout (cache: $prev entries)."
|
||||||
|
}
|
||||||
|
|
||||||
# restart_numa <config_toml_body>
|
# restart_numa <config_toml_body>
|
||||||
# Writes config to a temp file, stops numa (launchd or manual), starts with that config.
|
# Writes config to a temp file, stops numa (launchd or manual), starts with that config.
|
||||||
restart_numa() {
|
restart_numa() {
|
||||||
@@ -101,7 +123,7 @@ restart_numa() {
|
|||||||
|
|
||||||
sudo "$NUMA_BIN" "$tmpconf" &
|
sudo "$NUMA_BIN" "$tmpconf" &
|
||||||
wait_for_api
|
wait_for_api
|
||||||
sleep 4 # let TLD priming finish
|
wait_for_priming
|
||||||
echo "numa ready (pid $(pgrep numa | head -1), config: $tmpconf)."
|
echo "numa ready (pid $(pgrep numa | head -1), config: $tmpconf)."
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,6 +291,7 @@ TOML
|
|||||||
echo "--- Full benchmark (cold → warm → SRTT-only) ---"
|
echo "--- Full benchmark (cold → warm → SRTT-only) ---"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
wait_for_priming
|
||||||
flush_cache
|
flush_cache
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
query_all "Pass 1: Cold SRTT + Cold cache"
|
query_all "Pass 1: Cold SRTT + Cold cache"
|
||||||
|
|||||||
Reference in New Issue
Block a user