Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
48 changes: 14 additions & 34 deletions loadtest/aws/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@
> P6·httpwrite·httpread·poolsizing 의 `TARGET_HOST`([#688](https://github.com/Shadowfit/init/issues/688) —
> 예전엔 대상을 안 꺼서 09-08 P6 라운드의 대상이 2시간 24분 초과 과금됐다). 대상이 이 박스 자신이면
> (`TARGET_SSH="bash -c"`) 따로 안 건다. ⚠️ 같은 대상을 **다음 라운드가 또 쓰면** 앞 호출에
> `AUTO_SHUTDOWN=0` 을 줄 것. ⚠️ poolsizing 3대 구성의 `DB_HOST`·R10-b 의 `FP_REMOTE_TARGET` 은
> 여전히 안 끈다 — 사람이 끈다.
> `AUTO_SHUTDOWN=0` 을 줄 것. ⚠️ poolsizing 3대 구성의 `DB_HOST` 는 여전히 안 끈다 —
> 사람이 끈다([#812](https://github.com/Shadowfit/init/issues/812)).
>
> 🔴 **손으로 도는 판은 이 보호가 없다.** rig 을 SSH 로 직접 부르면(`run_arms.py` 등)
> `run_all.sh` 를 안 거치므로 **아무것도 안 끄고, 아무것도 안 지킨다.** 그때는 사람이 끈다.
Expand Down Expand Up @@ -478,21 +478,18 @@ ROLE=ai-venv bash bootstrap.sh
ROLE=ai-venv bash bootstrap.sh
```

**실행 — 부하기에서**

```bash
cd /root/init
S3_BASE=s3://내버킷/shadowfit \
FP_REMOTE_TARGET=<대상 사설 IP> \
FP_REMOTE_SSH="ssh -i /root/.ssh/measure.pem -o StrictHostKeyChecking=no root@<대상 사설 IP>" \
FP_PLAN="B,B,B#5,B#20,B#5,B#20,B,B#20,B,B#5" \
PHASES="framepath collect" \
nohup bash loadtest/aws/run_all.sh > /root/run_all.log 2>&1 &
```
🔴 **`run_all.sh` 로는 더 못 돌린다 (2026-09-23, #813 ㉡).** R10-b 의 원격 배선
(`FP_REMOTE_TARGET`·`FP_REMOTE_SSH`·`FP_REMOTE_ROOT`·`FP_REMOTE_PYTHON`, `fp_gate()` 여섯째 게이트,
`phase_framepath()` 의 `--remote-*` 인자)은 #708 의 되돌리기 커밋 `3258ff0a` 가 `run_all.sh` 에서
지웠고, R10-b 는 이미 닫힌 라운드라 **되살리지 않기로 했다.** 지금 `FP_REMOTE_TARGET` 을 넘기면
**경고 없이 R10-a 와 같은 로컬(동거) 경로로 돈다** — 그 판을 2대 측정으로 인용하면 안 된다.
다시 재야 하면: ① 부하기에서 `run_arms.py --remote-target <IP> --remote-ssh "..."` 를 직접
부르거나(원격 모드는 rig 쪽에 그대로 있다 — 단 `run_all.sh` 를 안 거치므로 자동 정지·게이트·S3
업로드가 없다) ② #649(`4f009007`)의 `run_all.sh` 배선을 되살린다. 아래 표는 **당시 판 설계의 기록**이다.

| | |
|---|---|
| 최소 격자(사용자 확정, 2026-09-02) | **팔은 `GRPC_MAX_WORKERS` 값 하나**(계측은 켠 채 고정 — `B` 만 쓴다, `A/B` 대조는 R10-a 가 이미 닫았다). 기본(10) 대조군 + 5·20 두 값. 버림 1 + 각 3판, 위치 균형(`feedback_measure_design_needs_repeats`) — 위 `FP_PLAN` 예시가 그 배열이다 |
| 최소 격자(사용자 확정, 2026-09-02) | **팔은 `GRPC_MAX_WORKERS` 값 하나**(계측은 켠 채 고정 — `B` 만 쓴다, `A/B` 대조는 R10-a 가 이미 닫았다). 기본(10) 대조군 + 5·20 두 값. 버림 1 + 각 3판, 위치 균형(`feedback_measure_design_needs_repeats`) — 그 배열이 `FP_PLAN="B,B,B#5,B#20,B#5,B#20,B,B#20,B,B#5"` 였다 |
| 규모 | R10-a 와 같은 조건(160세션·90초·풀201)을 유지할 것 — 다르면 비교가 안 된다 |
| 🔴 CPU | **판 전체 평균만**(`cpu_remote.avg_vcpu`), warmup 미제외. R10-a 의 시계열 `cpu` 와 **같은 표에 놓지 말 것** — 이 판이 진짜 답하는 것은 처리량·지연이 `GRPC_MAX_WORKERS` 로 갈리는가다 |
| ⏱ 소요 | 미실측 — R10-a(26판·52~69분)보다 판 수는 적지만(8판) SSH 왕복(원격 기동·종료·CPU 스냅샷)이 더 걸린다. 축소 리허설로 먼저 잰다 |
Expand All @@ -506,22 +503,8 @@ R10-a 의 GIL 반증에 이어 이 후보도 지워지고 「16 중 9.5」는 **
종류였다. 🔴 **깨진 채 남은 것**: 원격 CPU 계측(`cpu_remote`)이 전 판 실패
([#647](https://github.com/Shadowfit/init/issues/647)) · 리허설도 `run_all.sh` 를 그대로
태우면 AUTO_SHUTDOWN 대상이 되는데 **러너(부하기) 쪽에 취소용 root SSH 가 없었다**
([#648](https://github.com/Shadowfit/init/issues/648), 아래 리허설 명령에 `AUTO_SHUTDOWN=0`
을 넣은 이유).

⚠️ **리허설은 `AUTO_SHUTDOWN=0` 을 꼭 넣을 것** — `PHASES` 에 무엇을 넣든 `run_all.sh` 를
직접 부르면 끝에 자동종료 로직을 그대로 탄다(#648). 축소 리허설로 먼저 밟고, 문제없으면
본판(위 「실행」 명령, `AUTO_SHUTDOWN` 기본값 1)을 돌린다.

```bash
cd /root/init
AUTO_SHUTDOWN=0 \
FP_REMOTE_TARGET=<대상 사설 IP> \
FP_REMOTE_SSH="ssh -i /root/.ssh/measure.pem -o StrictHostKeyChecking=no root@<대상 사설 IP>" \
FP_SESSIONS=8 FP_DUR=15 FP_PLAN="B,B,B#5,B#20" \
PHASES="framepath" \
bash loadtest/aws/run_all.sh
```
([#648](https://github.com/Shadowfit/init/issues/648) — 그래서 리허설 명령에 `AUTO_SHUTDOWN=0`
을 박아뒀었다. 그 실행·리허설 명령은 위 🔴 때문에 걷었다).

### 보정값 (從 R11) — `calibrate_box` 가 모든 라운드에서 자동으로 남긴다

Expand Down Expand Up @@ -567,11 +550,8 @@ PHASES="framepath" \
| `REPL_AZ_MODE` | (없음) | P4 — 조건 칸에 그대로 들어간다. 비면 경고(막지는 않는다) |
| `REPL_SESSIONS` | `13334` | P4 무대 = 1,000만 행 |
| `TIMEOUT_REPL_GATE` / `TIMEOUT_REPL` | `10800` / `14400` | 3시간 / 4시간 |
| `FP_REMOTE_TARGET` | (없음) | R10-b — 대상 사설 IP. 비면 R10-a 와 같은 로컬(동거) 경로 |
| `FP_REMOTE_SSH` | `ssh root@$FP_REMOTE_TARGET` | R10-b — 키를 쓰면 직접 지정 |
| `FP_REMOTE_ROOT` | `/root/init` | R10-b — 대상의 저장소 루트 |
| `AUTO_SHUTDOWN` | **`1`** | **업로드 성공 + 실패 단계 없음(FAIL·TIMEOUT 0개, #641)일 때만** 정지 — `REPLICA_HOST`·`TARGET_HOST`(#688)도 같이. 기본이 켜짐(2026-08-24 결정) — 박스를 남기려면 `0` |
| `SHUTDOWN_DELAY_MIN` | `5` | 정지까지의 유예(분). 취소: 박스 안에서 `pkill -f 'shutdown'`. ⚠️ **취소하려면 그 박스에 SSH 로 들어가야 하는데, 리허설을 `run_all.sh` 로 직접 돌리면 러너(예: R10-b 의 부하기)가 대상이 아닌 경우가 있다**(#648) — 2026-09-02부터 부트스트랩이 role 과 무관하게 모든 박스에 `root@` 접근을 열어두므로(#642), 어느 박스가 러너든 `measure.pem` 으로 들어가 취소할 수 있다 |
| `SHUTDOWN_DELAY_MIN` | `5` | 정지까지의 유예(분). 취소: 박스 안에서 `pkill -f 'shutdown'`. ⚠️ **취소하려면 그 박스에 SSH 로 들어가야 하는데, 리허설을 `run_all.sh` 로 직접 돌리면 러너(예: 2026-09-02 R10-b 구성의 부하기, 지금은 run_all.sh 로 못 돈다 — #813)가 대상이 아닌 경우가 있다**(#648) — 2026-09-02부터 부트스트랩이 role 과 무관하게 모든 박스에 `root@` 접근을 열어두므로(#642), 어느 박스가 러너든 `measure.pem` 으로 들어가 취소할 수 있다 |
| `SYNC_SEC` | `300` | S3 주기 업로드 간격 |
| `WRITER_MAX_SEC` | `14400` | ⚠️ rig 기본은 5,400. 아래 참고 |
| `TIMEOUT_DDL` | `43200` | 12시간 (로컬 추정 5.9시간 × 2) |
Expand Down
3 changes: 2 additions & 1 deletion loadtest/aws/run_all.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2060,7 +2060,8 @@ target_is_self() {
# 🔴 단계가 실패했어도 안 끈다(#641, 위 판정 ①). 결과는 올라갔어도 **원인은 박스 안에** 있다.
#
# ⚠️ 이 블록이 끄는 박스는 **이 박스·REPLICA_HOST·TARGET_HOST** 셋뿐이다. 러너가 SSH 로 모는 박스가
# 더 있는 라운드 — poolsizing 3대 구성의 DB_HOST, R10-b 의 FP_REMOTE_TARGET — 는 여기서 안 끈다.
# 더 있는 라운드 — poolsizing 3대 구성의 DB_HOST(#812) — 는 여기서 안 끈다. (R10-b 의
# FP_REMOTE_TARGET 은 배선 자체가 없다 — #708 이 지웠고 #813 ㉡ 로 되살리지 않았다)
# 그 박스는 사람이 끈다(#688 은 TARGET_HOST 만 다뤘다).
if [ "$AUTO_SHUTDOWN" = "1" ] && [ "$FINAL_OK" = "1" ] && [ "$PHASES_OK" = "1" ]; then
# 🔴 **리플리카·대상을 먼저 끈다.** 2대 라운드에서 이 스크립트는 한쪽 박스(P4 는 소스, P6·http* 는
Expand Down
Loading