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:
+1
-1
@@ -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 (이산) |
|
||||
|
||||
@@ -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, "")
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -6,8 +6,9 @@ import "time"
|
||||
type Scenario string
|
||||
|
||||
const (
|
||||
ScenarioSmallMany Scenario = "small-many" // 1KB × 10000회 (AI Agent RPC)
|
||||
ScenarioLargeFew Scenario = "large-few" // 1MB × 50회 (IoT 이미지 전송)
|
||||
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 이미지 전송)
|
||||
)
|
||||
|
||||
// System 비교 대상 시스템
|
||||
@@ -45,26 +46,39 @@ 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 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 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 "Large-Few · 1MB × 50회 (IoT 이미지 전송)"
|
||||
return string(c.Scenario)
|
||||
}
|
||||
|
||||
// HasSelectedSystem 최소 한 개 시스템 선택 여부
|
||||
|
||||
Reference in New Issue
Block a user