Skip to content

Results KO

elecbug edited this page Oct 13, 2026 · 22 revisions

저장 결과·내보내기·보존

Wiki home › 한국어 문서 · 영어 원문

문서 안내 · 소스 저장소

이 문서는 저장 원본, 다운로드, 삭제와 백업 경계를 설명합니다. 이어하기·재시도는 실행·복구, 그림과 비교는 시각화, 수식은 지표 정의를 참고하십시오.

저장 결과 찾기

Saved results에서 실험 이름·배치 ID·run ID로 검색하고 In progress, Completed, Needs attention 상태 필터를 함께 사용할 수 있습니다. 일치하는 run이 있으면 이전 시도를 포함한 배치 전체를 표시하므로 진행률과 배치 작업을 그대로 이용할 수 있습니다. 상태 필터는 현재 시도를 기준으로 판정합니다. Completed는 배치의 현재 run이 모두 완료된 경우, Needs attention은 실패·중단·취소되었거나 읽을 수 없는 결과가 있는 경우입니다.

결과 수는 화면에 표시되는 저장 run의 개수입니다. 목록을 갱신해도 검색·필터를 유지합니다. 상태 선택 버튼을 바로 눌러 전환하고 All로 상태 필터만 해제합니다. 검색창 안의 Clear search 버튼은 검색어만 지웁니다. 전체 목록으로 돌아가려면 검색어를 지우고 All을 선택한 뒤 그룹 필터를 All groups로 설정하십시오. 상태 선택지는 항상 보이며 좁은 화면에서는 두 줄로 배치하고 키보드 방향키로도 전환할 수 있습니다. 모바일에서는 결과 행을 시간 레이블이 있는 카드로 표시합니다. 개별 Run은 Images와 다운로드를 바로 표시하며, More에 사용 가능한 복구·삭제 기능을 둡니다. 배치 헤더는 Analyze batch mean과 More 메뉴를 나란히 표시합니다. Agent 표는 가로로 스크롤할 수 있습니다.

Saved results의 반복 실행 배치 내부는 queued 및 재시도 항목을 포함해 Run n of M의 숫자 순서(1, 2, …, 10)로 정렬합니다. queued 항목이 실행을 시작해도 순서를 유지합니다. 이전 시도는 별도 표에 남으며, 유효한 회차 번호가 없는 항목은 마지막에 표시합니다. 배치 자체는 기존 결과 목록 위치를 유지합니다.

공유 그룹으로 결과 정리

Groups에서 Saved scenarios와 같은 그룹을 관리하고 Select → Move로 기존 결과를 정리합니다. 그룹 필터도 두 화면에서 공유합니다. 생성·이름 변경·선택·Ungrouped 이동·삭제·새로고침 방법은 공유 그룹 사용법을 참고하십시오.

저장 시나리오를 선택해 실행한 새 결과는 접수 시 해당 시나리오의 그룹을 상속합니다. 한 번 실행하는 경우와 편집기의 미저장 변경에도 적용합니다. 새 미저장 입력과 그룹 없는 저장 시나리오의 결과는 Ungrouped가 됩니다. 이후 원본 시나리오를 이동하거나 삭제해도 기존 결과는 현재 그룹에 남습니다. 재시도·이어하기와 Add runs도 결과 묶음의 현재 그룹을 유지합니다. 자세한 흐름은 시나리오 그룹 사용법을 참고하십시오.

그룹 드롭다운의 수는 결과 묶음 기준으로, 반복 배치 전체가 하나이고 단독 run도 하나입니다. 결과 목록 요약은 저장 run 수를 표시합니다. 배치의 이전 시도·재시도·추가 회차는 같은 그룹 소속을 공유합니다. 그룹 변경은 정리 용도이며 배치 구성, 원본 파일, 분석 해시나 배치 평균을 바꾸지 않습니다. Delete group은 결과를 Ungrouped에 보존하며, More → Delete batch는 확인 후 해당 배치의 결과를 삭제합니다.

선택한 결과 다운로드

Saved results에서 Select를 누르고 Run 또는 배치를 선택한 뒤 Download ZIP을 누릅니다. Select visible은 그룹·검색·상태 필터를 따릅니다. 배치를 선택하면 실패 Run과 이전 시도를 포함해 현재 목록에 있는 해당 배치의 모든 Run이 포함됩니다. Download ZIP을 누르는 시점에 선택한 Run ID를 확정하므로 이후 추가된 Run은 다시 다운로드해야 합니다.

바깥 ZIP에는 Run별로 [실험 이름]-<run-id>.zip이 들어갑니다. 각 내부 ZIP의 구성은 개별 결과 내보내기와 같습니다. 차트 PNG/CSV ZIP은 분석창에서 내려받거나 아래의 CSV 전용 선택 내보내기를 사용합니다.

Run을 하나씩 확보해 전송하므로 각 Run의 스냅샷 시점은 서로 다르며, 실행 중 Run은 부분 스냅샷입니다. 누락되거나 읽을 수 없는 항목이 있으면 다운로드를 중단합니다. 이미 전송을 시작했다면 항목이 빠진 정상 ZIP 대신 중단된 다운로드로 처리합니다. 목록을 갱신하고 항목·저장소 문제를 해결한 뒤 다시 시도하십시오. 현재 읽는 Run만 삭제로부터 보호합니다. 준비·만료·동시 처리 한도는 일괄 다운로드 API를 참고하십시오.

선택 모드의 Download CSV ZIP은 results-csv-<UTC timestamp>.zip을 저장합니다. 안에는 선택한 Run별 [실험 이름]-<run-id>-csv.zip이 들어갑니다. 각 내부 ZIP에는 Images에서 사용하는 모든 분류·프로토콜의 개요 차트 CSV만 포함하며 PNG·차트 정의 JSON·원본 로그는 제외합니다. 배치 선택은 이전 시도를 포함한 현재 목록의 개별 Run들을 포함하며 배치 평균을 추가하지 않습니다. 평균은 해당 배치 분석창에서 별도로 내보내십시오.

CSV 내보내기는 원본 확인·교체 분석 중에도 Run별로 마지막 사용 가능한 완료 분석을 재사용합니다. 강제 재분석하지 않으므로 새 스냅샷이 필요하면 먼저 Reanalyze를 사용하십시오. 완료 분석이 없으면 백그라운드 분석을 접수하거나 진행 중인 분석을 기다립니다. Run을 순차 처리하며 진행 상태와 Cancel을 제공합니다. 취소는 브라우저 준비를 중단하며 이미 접수된 서버 분석은 계속됩니다. 누를 때 선택 ID를 확정하고 완료·실패 후에도 선택을 유지합니다. 분석을 읽을 수 없거나 다른 스냅샷으로 교체되면 일부만 담긴 ZIP은 다운로드하지 않습니다. 이 ZIP은 브라우저에서 생성하며 최종 묶음 크기는 128 MiB로 제한합니다. 초과하면 결과를 나누어 선택하십시오. 원본 ZIP의 서버 스트리밍과 다르며 브라우저 전체 메모리 사용량의 상한은 아닙니다. Run별 분석 시점도 서로 다를 수 있습니다.

실험 결과별 메모

Saved results에서 실행 이름 옆의 Add note 또는 Edit note로 메모를 작성·수정합니다. 행에는 짧은 미리보기를 표시하고 편집창에서는 전체 일반 텍스트와 마지막 저장 시각을 확인할 수 있습니다. 메모는 로그인한 사용자에게 공유되며 대기·실행·종료 상태 모두에서 작성할 수 있습니다. 최대 UTF-8 16 KiB를 지원합니다. Save note로 저장하고, 비운 뒤 저장하면 메모를 지웁니다. Cancel은 작성 중인 변경을 버립니다.

반복 실험의 이전 시도를 포함해 run ID마다 별도 메모를 보관합니다. 실험 재시도는 새 run ID를 만들므로 이전 시도의 메모를 복사하거나 덮어쓰지 않습니다. 메모는 current-run/<run-id>/note.json에 따로 저장하고 NAS 보관본에 반영하여 Controller 재시작과 실험 종료 처리 이후에도 유지합니다. 한 번 저장한 메모 파일은 결과 ZIP에 포함하고, 비운 경우에도 오래된 편집의 덮어쓰기를 막는 빈 기록을 남깁니다. 결과 삭제 시 메모도 삭제되며 백업에는 로컬 반영 대기 메모와 NAS 보관본을 함께 포함해야 합니다.

배치 헤더의 Add batch note 또는 Edit batch note로 반복 배치 전체의 메모를 편집합니다. 배치를 펼치지 않아도 사용할 수 있으며 편집기와 충돌 보호는 개별 메모와 같습니다. 배치 메모와 Run 메모는 서로 독립적이고, 재시도나 개별 Run 삭제 이후에도 같은 배치 ID에 연결해 보존합니다. Delete batch는 모든 구성원 삭제가 성공한 뒤 배치 메모도 제거합니다. 배치 메모는 로컬 result-groups/<batch-id>/note.json에 보관하므로 Controller 백업에 이 디렉터리를 포함하십시오. NAS가 끊겨도 편집할 수 있으며 개별 Run ZIP에는 포함하지 않습니다.

다른 창에서 메모를 바꾸면 저장 충돌을 알리고 작성 중인 내용을 유지합니다. Review latest note로 최신 저장본을 초안과 함께 확인한 뒤 필요에 따라 편집하고 다시 저장하여 교체할 수 있습니다. 저장 오류가 발생해도 초안을 유지합니다. 목록에는 길이를 제한한 미리보기만 전달하며 전체 메모는 편집창을 열 때 조회합니다. 대시보드 SSE에는 메모를 추가하지 않습니다. 자세한 규약은 메모 API를 참고하십시오.

완료 배치의 More → Add runs로 같은 배치에 반복 회차를 추가할 수 있습니다. 예를 들어 10회 완료 + 10회 추가는 20회 배치가 되며, 완료 후 Analyze batch mean이 전체 20회를 다시 집계합니다. 허용 조건·한도·복구는 완료 배치 확장을 참고하십시오.

실험 결과 다운로드

대시보드의 실험 항목이나 Saved results에서 Download results를 선택합니다. 반복 run은 시리즈 헤더를 펼쳐 각 run의 다운로드·분석·삭제를 사용합니다. 저장 목록은 Controller의 데이터 디렉터리를 읽으므로 Controller 재시작 후에도 결과에 접근할 수 있습니다. 백업 파일을 복원한 뒤에는 Refresh로 목록을 갱신합니다. 실행 중 실험에는 Download snapshot이 표시됩니다. 용량은 마지막 목록 조회 시점의 압축 전 원본 파일 합계인 Source로 바로 표시합니다. 실행·대기 중 결과도 Live source로 표시하며 새로고침하면 갱신됩니다. ZIP 다운로드 크기와는 다를 수 있습니다.

ZIP에는 다음 파일이 들어 있습니다.

파일 내용
scenario.yaml 실험 실행 시 제출한 시나리오 원문
experiment.json 저장된 실험 메타데이터·상태·seed·job 카운터 원문
events.jsonl 내보내기 기준 시점까지 저장된 전체 이벤트. 한 줄에 JSON 하나이며, 기록된 이벤트가 없으면 빈 파일
observations.jsonl 실행 중 약 5초마다 저장한 그룹 상태·차수·clustering·점수와 이용 가능한 프로토콜별 노드·간선 표본. 과거 결과에는 파일이나 간선이 없을 수 있음
note.json 선택적 결과 메모, run ID, revision과 마지막 저장 시각. 동일한 내보내기 경계의 파일을 포함
metrics.json 동일 이벤트 로그 경계에서 재계산한 세션 기간 도달률 범위, 발행 시점 대상 결과, coverage, pending/unknown, 첫 원격 지연, 관측 중복, control 내역과 수집된 대역폭 누적량·품질. 과거 정의는 legacy 유지
export.json 내보내기 시각, 실험 상태, active/partial 여부와 원본 파일의 캡처된 크기

Controller의 저장 잠금 안에서 로컬 파일 경계와 불변 NAS 객체 참조를 확보한 뒤 잠금을 해제하고 ZIP을 전송합니다. 이후 추가된 이벤트는 제외되며 느린 다운로드가 telemetry 파일 쓰기를 붙잡지 않습니다. 완료된 실험에도 지연된 telemetry가 도착할 수 있으므로 나중에 추가된 기록까지 필요하면 수집이 안정된 뒤 다시 다운로드하십시오. partial: false는 기록된 실험 상태가 종료 상태라는 의미이며 telemetry 무손실을 보장하지 않습니다. 메시지 본문, PCAP, Prometheus/Grafana 데이터베이스는 ZIP에 포함하지 않습니다.

Source / Live source에는 분석 캐시, 생성 이미지, 내보낼 때 계산하는 파일과 파일시스템 부가 공간을 포함하지 않습니다. 대시보드는 ZIP 크기를 자동 계산하지 않습니다. sourceBytes, 명시적 HEAD 요청과 캐시 헤더는 다운로드 API가 정의합니다.

저장 결과 목록과 다운로드에도 로그인이 필요합니다. API 로그인 후 쿠키 파일을 재사용하십시오.

curl --fail -b "${KPL_COOKIE_JAR:?Log in first}" http://control-node:8080/api/v1/results
curl --fail -b "${KPL_COOKIE_JAR:?Log in first}" --output run-results.zip \
  http://control-node:8080/api/v1/experiments/RUN_ID/download

RUN_ID는 저장 목록의 ID로 바꾸고 access가 출력한 control 노드 주소를 사용하십시오.

내보내는 내용은 구독 세션 start/checkpoint/stop과 기록된 Agent 종료 확인을 포함한 수집 telemetry입니다. Peer 재시도, Agent 큐 backpressure, 정상 종료 drain은 유실을 줄이지만 한도가 있으며 강제 종료는 Peer를 drain하지 않습니다. 원본 sequence 간격이 있으면 미수신은 unknown입니다. 다운로드로 누락을 복구하거나 아예 보이지 않은 세션을 발견할 수는 없습니다. /api/v1/events는 여전히 최근 300개만 반환하고 웹 이벤트 화면은 그중 최신 40개를 표시하지만 ZIP은 저장된 전체 로그를 읽습니다.

저장 결과 삭제

Saved results → More → Delete는 확인 후 선택한 run의 시나리오·메타데이터·메모·이벤트와 실시간 지표 인덱스를 영구 삭제합니다. 실행·대기 중 실험, 활성 배치 구성원, 다운로드 중 결과는 보호합니다. 먼저 삭제 표식과 상위 디렉터리를 로컬 디스크에 동기화한 뒤 로컬 기록과 메모리의 아카이브 관리 정보를 제거합니다. 보관 작업자가 이후 NAS 파일을 삭제하며, NAS가 응답하지 않으면 나중에 재시도합니다. 로컬 삭제가 성공하면 저장 리비전이 바뀌므로 NAS 장애 중에도 다른 대시보드의 저장 결과 목록에 반영됩니다. API는 로그인 세션을 사용하는 DELETE /api/v1/results/{id}입니다. Peer를 종료하지 않으며 기존 Prometheus/Grafana 시계열은 유지합니다. 삭제 표식은 지연 telemetry의 결과 재생성을 막으므로 백업·이전 때 Controller 데이터와 함께 보존하십시오. 상태 코드와 다운로드 header는 REST API 가이드를 참고하십시오.

목록 조회는 삭제를 막지 않습니다. 직접 요청한 ZIP 크기 조회(HEAD)는 NAS 원본 파일을 여는 동안 잠시 결과를 보호하여 삭제가 409를 반환할 수 있습니다. 파일 확보 후 크기 계산 중에는 삭제 보호를 유지하지 않습니다. 실제 ZIP 다운로드(GET)는 요청이 끝날 때까지 결과를 보호합니다. 삭제 요청은 브라우저에서 30초 제한 시간을 적용하며, 시간 초과 후에도 Controller에서 완료될 수 있으므로 목록을 갱신하거나 같은 결과의 삭제를 재시도할 수 있습니다. 후속 목록 갱신이 느려도 삭제창 버튼은 다시 사용할 수 있습니다.

시리즈 헤더의 More → Delete batch은 저장된 run 수를 확인한 뒤 DELETE /api/v1/result-batches/{batchId}로 배치 전체를 삭제합니다. 개별 원본 삭제와 달리 별도 batch-analyses/{batchId} 평균 파일까지 제거하며 진행 중인 분석도 취소합니다. 삭제 전 모든 구성원의 활성 상태·다운로드를 검사합니다. 저장 장치 오류로 일부만 삭제됐을 수 있으므로 오류를 해결한 뒤 목록을 갱신하고 재시도하십시오. 기존 Prometheus/Grafana 시계열은 유지합니다.

분석 파일과 이미지 보존

실행의 원본 내보내기와 계산된 분석은 경계가 다릅니다. Download results / Download snapshot은 내보낼 때 원본 파일 경계를 잡고, Download analysis JSON은 완료된 분석 작업의 경계를 사용합니다. 나중에 추가된 로그는 새 분석을 실행하기 전까지 기존 분석에 들어가지 않습니다. 합계를 대조할 때 export.json.exportedAt과 분석의 asOf·작업의 snapshotAt을 확인하십시오.

파일 / 산출물 위치와 내용
analysis-job.json 분석 요청 후 실행 파일 옆에 저장하는 현재 시도·상태·진행률·원본 경계
analysis-result.json / analysis-result-next.json 작업 메타데이터가 선택하는 서버 분석 슬롯. 메인 지표, 연구 메시지·모집단·근거, 계산된 그래프·대역폭 시계열, 분포와 적합 결과
analysis-summary.json / analysis-summary-next.json 같은 슬롯의 비교용 경량 응답. 메시지별 경로와 원본 시계열을 제외하고 집계·분포·적합·메시지 수 유지
PNG / 차트 CSV / 차트 정의 JSON 브라우저가 개요·메시지·비교 화면에서 생성. 제목을 펼쳐 개별 다운로드하며, Download ZIP은 화면의 프로토콜 선택·제목 펼침 여부와 관계없이 모든 그래프 프로토콜의 PNG·CSV·차트 정의를 포함한 ZIP을 저장
가져온 v2 파일 / 비교 선택 브라우저 화면에서 유지하며 Controller에 업로드하거나 서버 비교 작업으로 저장하지 않음

서버 분석 파일은 Download results ZIP에 포함되지 않습니다. 계산 JSON은 분석 다운로드 endpoint로, 그림은 차트 다운로드로 각각 보존하십시오. 비교 ZIP은 생성한 차트이며 재분석에 필요한 전체 원본 기록이나 가져온 파일의 묶음이 아닙니다. 원본과 선택한 Series/Case·파라미터·소프트웨어 revision을 함께 남기십시오.

완료 분석은 데이터 볼륨에 보존되어 Controller 재시작 후에도 사용할 수 있습니다. 새 시도는 현재 캐시를 대체하므로 이전 분석 경계를 보존하려면 먼저 다운로드하십시오. 접수한 서버 계산은 브라우저를 닫아도 계속되고 이미지 변환·비교 계산은 화면을 다시 열거나 구성하여 수행합니다. 브라우저 다운로드는 서버가 미리 만든 이미지 보관소가 아닙니다. 실패·중단·취소 작업은 백그라운드 API에 따라 재시도합니다. 삭제 가능한 저장 실행을 지우면 분석 파일도 원본과 함께 제거됩니다.

반복 실험의 Analyze batch mean 작업은 <data-dir>/batch-analyses/{batchId}/job.json에 별도로 보존하며 result.json과 result-next.json을 저장 슬롯으로 사용합니다. 결과에는 run별 동일 가중 평균·표본 SD·유효 수와 평균 개요 재현용 경량 입력이 들어갑니다. 개별 원본을 삭제해도 기존 통합 스냅샷 파일은 남으며, 구성원이 바뀐 뒤 재분석하면 현재 통합 파일을 교체합니다. Download analysis JSON 또는 평균 PNG/CSV ZIP을 내려받고, 서버 백업에는 current-run, runs, batch-analyses, result-groups를 함께 포함하십시오. 백업에는 두 슬롯과 작업 메타데이터를 함께 보존하십시오. 통합 작업의 실패·제외 기준과 표본 수 해석은 통합 평균 사용법에 정리되어 있습니다.

원본 변경과 신뢰성 표시

개별·배치 분석은 비활성 슬롯에 새 파일을 저장하고 각 파일과 디렉터리를 동기화한 뒤 완료 작업 메타데이터를 원자적으로 게시합니다. 전체 분석 저장 후 경량 요약 저장이 실패하는 경우를 포함해, 파일 게시 실패 시에도 이전 저장 분석 참조는 계속 읽을 수 있습니다. 작업 메타데이터가 같은 슬롯의 전체 분석·요약 쌍을 선택하므로 중단된 교체 파일을 이전 분석 ID로 제공하지 않습니다. 기존 메타데이터는 원래 파일명을 선택합니다. 복구할 작업 메타데이터는 JSON 문서 하나와 유효한 슬롯이어야 합니다. 뒤에 공백 이외의 데이터가 붙거나 슬롯이 잘못되면 저장소 오류로 처리하며 해당 메타데이터로 캐시 파일을 제공하지 않습니다.

분석 재사용은 scenario.yaml, experiment.json, events.jsonl, observations.jsonl의 표본 해시로 판단합니다. 목록·상태 조회에서는 NAS 로그를 읽지 않는 가벼운 원본 revision으로 변경 가능성만 감지합니다. Images · Check, Batch mean · Check는 변경된 힌트의 표본을 제한된 백그라운드 작업에서 비교합니다. 표본 해시와 분석기 버전이 같으면 수정 시각만 바뀐 경우를 포함해 기존 분석 파일과 스냅샷을 재사용합니다. 같은 크기의 변경이 표본 밖에 있으면 놓칠 수 있으며, Reanalyze는 항상 입력을 읽고 다시 계산합니다. 읽기 한도·위치 선택·형식은 표본 비교 계약을 참고하십시오. 배치 해시는 구성원과 시도 결과도 반영하며, 제외된 run의 통계에 사용하지 않는 로그와 메모는 평균을 무효화하지 않습니다. 기존 전체 해시 기반 분석은 원본 revision이 같으면 유지하고, revision 변경 시 한 번 계산해 표본 기준을 만듭니다. 해시가 없는 분석도 기준 계산이 필요합니다. 확인·교체 중에도 기존 완료 분석과 다운로드는 유지합니다.

Controller가 로그를 분리하거나 Local → Archived로 이동할 때 파일 배치만 바뀌면 원본 revision을 보존합니다. 따라서 동일한 개별·배치 분석을 다시 열 때 NAS 로그 전체의 해시를 추가로 읽지 않습니다. 로컬 아카이브 manifest에 파일 배치 fingerprint와 원래 revision을 기록하며, 재시작 후에도 fingerprint가 일치할 때만 사용합니다. 늦은 telemetry나 원본 교체는 이를 무효화하고 크기·mtime을 유지한 재작성도 감지합니다. 이동 중 중단되거나 이전 아카이브를 복원한 경우에는 정상 해시 확인이 한 번 필요할 수 있습니다. 동일한 실험 메타데이터를 저장하면 기존 파일을 유지하고 보관·검증을 다시 예약하지 않습니다.

Mean metrics and contributing run counts에는 실제 시작한 시도, 실패·취소·중단·재시도 수와 데이터 불완전·실행 환경 변경 경고를 함께 표시합니다. 실패율은 기록된 전체 시작 시도 중 실패한 비율이며 시작하지 않은 대기 기록은 분모에서 제외합니다. 평균은 계속 최신 완료 회차만 사용합니다. 개별 시도를 삭제해도 결과 이력은 배치 메타데이터에 남기며, 이 기록을 도입하기 전에 삭제한 과거 시도의 결과는 unknown으로 표시합니다.

환경 그룹에는 Controller/Agent 빌드, 확인 가능한 실제 Peer 이미지, Agent 실행 인스턴스와 용량을 보존합니다. 과거 기록의 누락도 표시합니다. 호스트 부하·네트워크 변화 전체를 기록하는 것은 아니므로 서로 다른 환경을 하나의 평균으로 해석하기 전에 확인하십시오.

활성 Run의 Recording experiment data…, **Cleaning up Peers and collecting final logs…**는 중립적인 색상으로 표시합니다. 대기 Run에는 불필요한 정리 대기 경고를 붙이지 않습니다. Peer를 유지한 완료 단일 Run은 **Peers retained · Recording experiment data…**로 표시합니다. 정리 실패, 불완전·미확인 데이터, 중단되어 확인하지 못한 수집은 경고를 유지하고 정리·수집이 모두 완료되면 추가 문구를 생략합니다.

로컬 기록과 NAS 보관

Controller는 runs/를 느릴 수 있는 외부 저장소로 취급합니다. 새 실험의 시나리오·상태·telemetry·관측·메모는 **로컬 <data-dir>/current-run/<run-id>/**에 기록합니다. NAS에는 runs/만 마운트하고 데이터 디렉터리 자체와 current-run/은 로컬 영구 저장소에 두십시오. 기존 NAS 결과는 시작 시와 약 1분 간격으로 백그라운드에서 발견하며 큰 로그를 로컬로 다시 복사하지 않습니다. 최초 발견에는 시간이 걸릴 수 있고 화면의 저장소 상태에서 검색 중 여부를 구분합니다.

하나의 보관 작업자가 결과를 runs/에 복사하고 동기화·SHA-256 검증·보관 manifest 게시를 마친 뒤 복사된 로컬 로그와 큰 개별 분석 파일을 제거합니다. 최초 보관은 숨김 .incoming-<run-id> 디렉터리에서 준비한 후 확정합니다. current-run/에는 시나리오, 실험 메타데이터, 메모, 분석 작업 상태와 .kpl-archive.json으로 이루어진 작은 인덱스를 남깁니다. 이 메타데이터를 유지하여 NAS 응답과 관계없이 목록·메모·삭제·복구 판단을 처리합니다. Run 메모는 즉시 로컬에 저장하고 나중에 NAS에 반영합니다. 배치 메모는 별도의 로컬 result-groups/ 디렉터리에 유지합니다.

복사와 해시 계산은 캡처한 파일 크기 전체를 읽었는지도 확인합니다. 캡처 후 원본이 잘리는 등 예상보다 일찍 파일 끝에 도달하면 게시나 로컬 정리 전에 전송을 실패 처리합니다. 짧아진 앞부분의 체크섬만 일치하는 경우에는 완전한 보관으로 인정하지 않습니다.

활성·대기 실행, 살아 있는 Peer가 확인되는 실행과 분석 작업 진행 중인 결과는 로컬에 둡니다. 열려 있는 두 로그 모두 마지막 기록 후 5초가 지난 다음 분리하며, 실험이 실행 중이면 256 KiB 청크 사이에서 복사와 검증을 대기합니다. 유휴 상태의 백그라운드 복사·검증은 각 단계마다 32 MiB/s로 제한합니다. 두 단계가 모두 끝난 뒤 로컬 데이터를 제거하므로 전체 보관 처리량은 이보다 낮습니다. 이미 발행한 파일시스템 작업은 취소되지 않을 수 있고 명시적 다운로드·분석도 NAS 통신을 발생시키므로 NAS와 실험이 같은 NIC를 사용할 때 물리적인 네트워크 격리를 보장하지는 않습니다.

전송 전 로그를 불변 조각으로 분리합니다. 이전 로그가 보관된 뒤 도착하는 telemetry도 항상 로컬에 추가합니다. 결과 다운로드와 분석은 NAS 조각과 캡처한 로컬 후속 기록을 하나의 논리 로그로 합치며, 정리 도중 중단되어 같은 조각이 양쪽에 남아도 중복 계산하지 않습니다. 전체 결과는 다운로드·분석 API로 조회하십시오. 늦은 로그가 있으면 NAS의 events.jsonl은 첫 조각만 담을 수 있습니다. 디렉터리를 직접 복사할 때는 .kpl-archive.json과 모든 로그 조각·분석 객체를 함께 보존해야 합니다.

Local, Archive pending, Archiving, Archived는 실험 성공·실패와 별도의 저장 상태입니다. NAS 장애 시 로컬 데이터를 유지하며 로컬 기록과 메타데이터 작업은 계속합니다. NAS로 옮긴 원본의 다운로드·분석에는 NAS 연결이 필요합니다. 멈춘 마운트가 하나의 보관 작업자나 최대 두 개의 NAS 읽기를 붙잡을 수 있지만 NAS 파일 작업이 실험의 저장 잠금을 잡지는 않습니다. 재시작하면 미완료 보관을 재시도합니다. 실험 자체는 여전히 중단 상태이며 기존 이어하기·재시도 절차로 재개합니다.

Saved results는 실험과 분석 작업이 모두 끝난 뒤에도 가벼운 저장 상태 조회로 변경을 확인합니다. 페이지가 보이는 동안 기본 15초 주기로 확인하고, 저장 리비전이 바뀌었을 때 로컬 결과 목록을 다시 가져옵니다. 리비전이 그대로이면 전체 목록을 반복 조회하지 않습니다. 페이지로 돌아오면 즉시 확인하며, 목록 요청 도중 생긴 변경은 요청 완료 후 다시 반영합니다. 조회 실패 시 표시 중인 목록을 유지하고 다음 저장 상태 조회 때 재시도합니다. 뒤늦은 메모나 telemetry가 추가되면 새 로컬 데이터를 아카이브할 때까지 Archived가 Archive pending으로 돌아갈 수 있습니다. 파일 내용이 같은 메타데이터 재기록은 원본 파일을 재전송하지 않고 manifest의 로컬 파일 시각을 갱신합니다.

저장소 상태 줄은 복사·검증·최종 반영·보관소 검색/삭제와 Archiving paused while experiments are running을 정상 작업 상태로 구분합니다. 작업 전체가 15초 걸렸다는 이유로 경고하지 않으며 아카이브 I/O 단계에서 진행 기록이 15초 넘게 멈춘 경우 지연을 표시합니다. 기존 전송 제한과 실험 중 대기 정책은 유지합니다.

실행 중에도 약 1초마다 로컬 여유 공간과 기록 오류를 확인합니다. 기준 미달 또는 로그·메타데이터 쓰기 실패가 발생하면 활성 Run을 실패 처리하고 Peer 정리와 대기 회차 취소를 수행합니다. 데이터 불완전을 표시하고 공간이 회복되면 실패 상태 저장도 재시도합니다. 엄격한 용량 할당은 아니므로 검사 사이에 디스크가 찰 수 있고 파일시스템 자체의 응답 지연도 가능합니다. 다음 Run은 공간이 확보될 때까지 대기합니다.

CLI와 Swarm의 기본값은 실험 시작 전 로컬 여유 1 GiB입니다. --run-min-free-bytes 또는 KPL_RUN_MIN_FREE_BYTES로 변경합니다. 예를 들어 sh scripts/swarm.sh configure KPL_RUN_MIN_FREE_BYTES=2147483648 후 재배포하면 2 GiB를 요구하며 0은 여유 공간 검사를 끕니다. 공간이 부족하면 새 제출은 507을 반환합니다. 반복 배치는 다음 Run을 시작하기 전에 대기하고 취소할 수 있으며, 대기 중 보관으로 공간을 확보할 수 있습니다. 이 값은 공간 예약이나 Run별 크기 제한이 아니므로 가장 큰 Run, 분석 출력과 NAS 장애 동안 쌓일 분량을 수용할 로컬 공간이 필요합니다.

처음 정상 연결한 뒤 로컬 .archive-store-id와 runs/.kpl-store-id로 보관 대상을 식별합니다. 마운트가 사라지거나 다른 저장소로 바뀌면 아래의 빈 디렉터리에 복사하지 않고 보관을 대기합니다. 최초 초기화 전에 의도한 NAS가 마운트되어 있어야 하며 두 식별 파일을 백업에 포함하십시오. 대상 변경은 저장소 이전 절차로 처리하고 실행 중 식별 파일만 삭제해서 우회하지 마십시오.

저장소와 백업

Swarm에서 KPL_STACK_NAME=kpl이면 control 노드의 kpl_controller-data volume을 /var/lib/kpl/data에 마운트합니다. 실행 파일과 유지하는 메타데이터 인덱스는 current-run/<run-id>, 보관한 객체는 runs/<run-id>에 있습니다. 일반 서비스 재생성과 swarm.sh remove는 volume을 유지합니다. 원본 이벤트의 자동 보존 한도나 다른 노드로의 복제는 없습니다.

숨김 항목을 포함한 Controller 데이터 디렉터리 전체를 보존하십시오.

내용 보존하는 항목
current-run/ 로컬 실행 파일, 아직 보관하지 않은 telemetry, 최신 메모·메타데이터와 보관 인덱스
runs/ 숨김 manifest, 불변 로그 조각과 분석 객체를 포함한 NAS/로컬 보관소
.archive-store-id 로컬 보관 대상 식별자. 짝인 runs/.kpl-store-id와 함께 보존
.archived-deletions/ 완료된 NAS 삭제 작업 기록
scenarios/ 재사용 시나리오 라이브러리
library-groups.json 저장 시나리오와 결과 묶음의 공유 그룹 및 소속
library-group-admission.json 중단된 결과 그룹 배정을 복구하는 임시 로컬 기록. 파일이 있으면 함께 보존
result-groups/ 배치 메모, 확정 총합, 접수 예약, 최신 시도와 삭제한 시도의 결과 이력
run-ownership/ 재시작·시도 삭제 후 Peer 정리에 사용하는 Agent 소유 정보
run-submissions/ 최초 제출의 중복 실행을 막는 접수 기록
batch-analyses/ 저장된 반복 평균
agent-capacities.json Agent ID별 용량 예외
.deleted-results/ 늦은 telemetry가 삭제 결과를 재생성하지 못하게 하는 표식
logs/ 회전하는 접근·인증 이력

그룹 배정 도중 중단되면 Controller 시작 시 로컬 배치 접수 확정 기록을 확인합니다. 접수가 확정된 배치는 현재 소속을 유지하고, 접수되지 않은 배치의 대기 중 배정은 되돌립니다. 이후 library-group-admission.json을 제거하며, 나중에 수동으로 이동한 소속이나 삭제한 그룹은 그대로 유지합니다. 복구 또는 배치 기록을 읽을 수 없으면 어떤 배정을 유지할지 추정하지 않고 오류로 시작을 중단합니다.

실험 ZIP은 하나의 실험 기록이며 전체 Controller 백업이 아닙니다. Prometheus·Grafana 이력과 설정은 별도 volume을 백업합니다. 모니터링 보존을 참고하십시오. 실행 파일을 복원하면 결과를 조회할 수 있지만 세션·실시간 카운터를 복원하거나 미완료 실행을 자동 시작하지 않습니다. 복구 절차를 선택해 사용하십시오. Volume 위치, 쓰기 내구성과 종료 조건은 배포 저장소와 재시작을 참고하십시오.

Clone this wiki locally