feat: Small-Medium 시나리오 추가 (1KB × 1000회, AI Agent RPC 경량)

- types.go: ScenarioSmallMedium 상수 추가, switch 문으로 모든 시나리오 함수 확장
- screen_config.go: 시나리오 2-way 토글 → 3-way 순환, 숫자키 1/2/3 지원
- screen_about.go: About 화면에 Small-Medium 시나리오 설명 추가
- README.md: 파라미터 표 업데이트
This commit is contained in:
Hermes Agent
2026-05-07 02:53:43 +00:00
parent 8d44ae55a0
commit cb53f6c912
4 changed files with 35 additions and 14 deletions
+1 -1
View File
@@ -118,7 +118,7 @@ src/
| 파라미터 | 범위 | 단위/단계 |
|---------|-----|----------|
| 시나리오 | Small-Many / Large-Few | 토글 |
| 시나리오 | Small-Many / Small-Medium / Large-Few | 3-way 순환 (←/→, 1/2/3) |
| 링크 지연 (편도) | 0 500 | ms (10ms 단위) |
| 패킷 손실율 | 0.0 5.0 | % (0.5% 단위) |
| 대역폭 | 1, 5, 10, 25, 50, 100, 250, 500, 1000 | Mbps (이산) |
+3 -1
View File
@@ -42,7 +42,9 @@ func (a App) viewAbout() string {
rows = append(rows, sectionHeader("📦 워크로드 시나리오"))
rows = append(rows, " ① "+selectedItemStyle.Render("Small-Many")+" — 1KB 메시지 × 10,000회 / 디바이스")
rows = append(rows, " "+helpStyle.Render("AI Agent RPC 패턴: 격리된 에이전트 간 빈번한 단발성 호출"))
rows = append(rows, " ② "+selectedItemStyle.Render("Large-Few")+" — 1MB 메시지 × 50회 / 디바이스")
rows = append(rows, " ② "+selectedItemStyle.Render("Small-Medium")+" — 1KB 메시지 × 1,000회 / 디바이스")
rows = append(rows, " "+helpStyle.Render("AI Agent RPC 경량: 연결 수립 비용과 RTT가 더 지배적인 환경"))
rows = append(rows, " ③ "+selectedItemStyle.Render("Large-Few")+" — 1MB 메시지 × 50회 / 디바이스")
rows = append(rows, " "+helpStyle.Render("IoT 이미지 전송: 해충 탐지 ROI, 센서 클립 등"))
rows = append(rows, "")
+9 -4
View File
@@ -51,6 +51,8 @@ func (a App) updateConfig(m tea.KeyMsg) (App, tea.Cmd) {
case "1":
a.config.Scenario = ScenarioSmallMany
case "2":
a.config.Scenario = ScenarioSmallMedium
case "3":
a.config.Scenario = ScenarioLargeFew
}
return a, nil
@@ -59,10 +61,13 @@ func (a App) updateConfig(m tea.KeyMsg) (App, tea.Cmd) {
func (a *App) adjustParam(delta int) {
switch a.configIdx {
case pIdxScenario:
// 토글
if a.config.Scenario == ScenarioSmallMany {
// 3-way 순환: small-many → small-medium → large-few → small-many
switch a.config.Scenario {
case ScenarioSmallMany:
a.config.Scenario = ScenarioSmallMedium
case ScenarioSmallMedium:
a.config.Scenario = ScenarioLargeFew
} else {
case ScenarioLargeFew:
a.config.Scenario = ScenarioSmallMany
}
case pIdxDelay:
@@ -141,7 +146,7 @@ func (a App) viewConfig() string {
rows = append(rows, a.paramRow(pIdxScenario,
"시나리오",
a.config.ScenarioLabel(),
fmt.Sprintf("디바이스당 %dKB × %d 메시지 (총 목표 %d개/시스템)",
fmt.Sprintf("[1/2/3] 디바이스당 %dKB × %d 메시지 (총 목표 %d개/시스템)",
a.config.MessageSizeKB(),
a.config.MessageCount(),
a.config.MessageCount()*a.config.DeviceCount,
+20 -6
View File
@@ -7,6 +7,7 @@ type Scenario string
const (
ScenarioSmallMany Scenario = "small-many" // 1KB × 10000회 (AI Agent RPC)
ScenarioSmallMedium Scenario = "small-medium" // 1KB × 1000회 (AI Agent RPC 경량)
ScenarioLargeFew Scenario = "large-few" // 1MB × 50회 (IoT 이미지 전송)
)
@@ -45,27 +46,40 @@ func DefaultConfig() Config {
// MessageSizeKB 시나리오별 메시지 크기
func (c Config) MessageSizeKB() int {
if c.Scenario == ScenarioSmallMany {
switch c.Scenario {
case ScenarioSmallMany, ScenarioSmallMedium:
return 1
}
case ScenarioLargeFew:
return 1024
}
return 1
}
// MessageCount 시나리오별 디바이스당 메시지 개수
func (c Config) MessageCount() int {
if c.Scenario == ScenarioSmallMany {
switch c.Scenario {
case ScenarioSmallMany:
return 10000
}
case ScenarioSmallMedium:
return 1000
case ScenarioLargeFew:
return 50
}
return 1000
}
// ScenarioLabel 표시용 시나리오 이름
func (c Config) ScenarioLabel() string {
if c.Scenario == ScenarioSmallMany {
switch c.Scenario {
case ScenarioSmallMany:
return "Small-Many · 1KB × 10000회 (AI Agent RPC)"
}
case ScenarioSmallMedium:
return "Small-Medium · 1KB × 1000회 (AI Agent RPC 경량)"
case ScenarioLargeFew:
return "Large-Few · 1MB × 50회 (IoT 이미지 전송)"
}
return string(c.Scenario)
}
// HasSelectedSystem 최소 한 개 시스템 선택 여부
func (c Config) HasSelectedSystem() bool {