V2 Analysis Coverage KO - k-p2p-lab/kpl-v3 GitHub Wiki

v2 ๋ถ„์„ยท์‹œ๊ฐํ™” ๋Œ€์‘

Wiki home โ€บ ํ•œ๊ตญ์–ด ๋ฌธ์„œ ยท ์˜์–ด ์›๋ฌธ

๋ฌธ์„œ ์•ˆ๋‚ด ยท ์†Œ์Šค ์ €์žฅ์†Œ

์ œ๊ณต๋œ v2 revision 74b71090410cac1315ae08f479a95c086feeaaf6์˜ ๋ถ„์„ ์ถœ๋ ฅ 40๊ฐœ ํ•„๋“œ/๊ณ„์—ด๊ณผ GoยทPythonยท์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ 34๊ฐœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์†Œ์Šค์˜ hash๋Š” ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค. python3 scripts/audit-v2-analysis.py --v2 ../v2๋Š” ๋ชฉ๋ก์˜ ๋ˆ„๋ฝยท๋ณ€๊ฒฝ์„ ํ™•์ธํ•˜๋ฉฐ ์ˆ˜์น˜ ๋™๋“ฑ์„ฑ์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฒ€์‚ฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์•„๋ž˜ ์‹œ๊ฐํ™” ๊ณ„์—ด์„ v3์˜ Saved results โ†’ Images ๋ฐ ๋น„๊ต ๋„๊ตฌ์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์ธ Metrics๋Š” ๊ธฐ์กด ์„ธ์…˜ยท์ˆ˜์‹  ๊ธฐ๊ฐ„ ์ •์˜๋ฅผ ์œ ์ง€ํ•˜๊ณ , ์ถ”๊ฐ€ ๋ถ„์„์€ research.definition = v2-corrected-observations-v1๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ ์ž๋ฃŒ์™€ ํ†ต๊ณ„ ์ •์˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ v2์™€ ๊ฐ™์€ ์ˆ˜์น˜๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ด€์ธก๊ฐ’์€ N/A, ์ถ”์ •ํ•˜์ง€ ๋ชปํ•œ ์ „ํŒŒ ์ถœ์ฒ˜๋Š” unknown์œผ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค.

๋ถ„์„ ์ถœ๋ ฅ

v2 ์ถœ๋ ฅ ๊ณ„์—ด v3 ํ‘œํ˜„๊ณผ ์กฐ๊ฑด
node_count, average_degree, average_degree_excluding_leaves ํ”„๋กœํ† ์ฝœยท๊ทธ๋ฃน๋ณ„ ์‹œ๊ณ„์—ด๊ณผ ์š”์•ฝ. ๋น„์žŽ ๋ถ„๋ชจ ์ง€ํ‘œ๋Š” ์ „์ฒด ์ฐจ์ˆ˜ ํ•ฉ / degree > 1์ธ ๋…ธ๋“œ ์ˆ˜
diameter, shortest_path_length ์ €์žฅ ๊ฐ„์„ ์—์„œ ๊ณ„์‚ฐ. ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ์„œ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ ์Œ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  connected-pair ๋น„์œจ์„ ํ•จ๊ป˜ ํ‘œ์‹œ
clustering_coefficient, assortativity, modularity ํ‰๊ท  ์ง€์—ญ clustering, ์ฐจ์ˆ˜ ์ƒ๊ด€, ๊ฒฐ์ •์  seed์˜ Louvain modularity. ์ •์˜๋˜์ง€ ์•Š๋Š” ํ†ต๊ณ„๋Š” N/A
betweenness_centrality, page_rank, degree_centrality, closeness_centrality, eigenvector_centrality ์ •๊ทœํ™” ์ค‘์‹ฌ์„ฑ์˜ ์ „์ฒดยท๊ทธ๋ฃน ํ‰๊ท . ๊ทธ๋ž˜ํ”„ ์›์ž๋ฃŒ๊ฐ€ ์žˆ๋Š” ์ €์žฅ ํ‘œ๋ณธ์—์„œ ๊ณ„์‚ฐ
degree_distribution-* ๊ด€์ธก snapshot๋ณ„ ํ™•๋ฅ ์„ ํ‰๊ท ํ•œ ์ฐจ์ˆ˜ PDF/CDF์™€ ๊ฐ€์ค‘ Student-t ์ ํ•ฉ
frt, reachability, drc ๋ฉ”์‹œ์ง€๋ณ„ ์ตœ์ดˆ ์ˆ˜์‹  ์ง€์—ฐยท๋„๋‹ฌ๋ฅ ยท์ค‘๋ณต ์ˆ˜์™€ ๋ฉ”์‹œ์ง€ ํ‰๊ท  ์š”์•ฝ. DRC/graph-node ๋ฐ DRC/target๋„ ๋ถ„๋ฆฌ
eager_count, lazy_count, eager_frt, eager_reachability GRAFTยทIHAVEยทIWANTยท๋ฉ”์‹œ์ง€ ID์— ๊ทผ๊ฑฐํ•œ ์ถ”์ •์น˜. ๋ฏธ๋ถ„๋ฅ˜ ์ˆ˜๋ฅผ ๋ณ„๋„ ํ‘œ์‹œํ•˜๊ณ  eager FRT๋Š” ๋ถ„๋ฅ˜๋œ ์ˆ˜์‹  ์ค‘ ์‹œ๊ฐ ๊ทผ๊ฑฐ๊ฐ€ ์žˆ๋Š” ํ‘œ๋ณธ๋งŒ ์‚ฌ์šฉ
pub_map, propa_map, reach_map, eager_propa_map, eager_reach_map research.messages์˜ ๋ฐœํ–‰ยท์ˆ˜์‹ ยท๋ถ€๋ชจยทhopยท๋ชจ์ง‘๋‹จยท์ถ”์ • ๊ทผ๊ฑฐ์™€ ์ „ํŒŒ/์ถ”์ • eager ๋ˆ„์ ๊ณก์„ . JSONยทCSV ๋‚ด๋ณด๋‚ด๊ธฐ
dup_map, time ๋ฉ”์‹œ์ง€๋ณ„ ์ค‘๋ณต ๋ˆ„์ ๊ณก์„  ๋ฐ ์‹œ๊ฐ ์ถ•. ์›์‹œ ์ค‘๋ณต ์ด๋ฒคํŠธ๋Š” events.jsonl์— ๋ณด์กด
send_ihave, recv_ihave, send_iwant, recv_iwant RPC ๋‚ด ํ•ด๋‹น control ์ข…๋ฅ˜์˜ ๊ด€์ธก ํšŸ์ˆ˜, entry ์ˆ˜, message-ID ์ฐธ์กฐ ์ˆ˜๋ฅผ ๊ตฌ๋ถ„
logical_send_ihave, logical_recv_ihave, logical_send_iwant, logical_recv_iwant ๊ด‘๊ณ ยท์š”์ฒญ ID ๊ฐœ์ˆ˜. ๊ณ ์œ  ID ๊ฐœ์ˆ˜๋‚˜ ์‹ค์ œ ์ „๋‹ฌ ๋ฐ”์ดํŠธ์™€ ๋‹ค๋ฆ„
send_graft, send_prune, logical_send_graft, logical_send_prune ๊ด€์ธก mesh ์ „์ด์™€ reciprocal ๋…ผ๋ฆฌ ๊ฐ„์„  ์ƒ์„ฑยท์ œ๊ฑฐ. wire RPC ํšŸ์ˆ˜๋Š” ๋ณ„๋„ _rpc ๊ณ„์—ด
v3 ์ถ”๊ฐ€ IDONTWANT, drop control, ๋ฏธ๋ถ„๋ฅ˜ ๊ฒฝ๋กœ, lifecycleยท์ ์ˆ˜ ์š”์•ฝ, ์‹ค์ œ libp2p ์ŠคํŠธ๋ฆผ ์†ก์ˆ˜์‹  ๋ฐ ํ”„๋กœํ† ์ฝœ๋ณ„ B/W

Pythonยท๋ฐฐ์น˜ ์‹œ๊ฐํ™”

v2 ์†Œ์Šค v3 ๋„๊ตฌ
basic_graph/* Series/Case ๋ฐ˜๋ณต ํ‰๊ท ยทํ‘œ๋ณธ SD, ์ž„์˜ ์ง€ํ‘œ์™€ D ์กฐ๊ฑด, ์ฐจ์ˆ˜ ํ™•๋ฅ  ๋น„๊ต
compare_graph/* ๋™์ผ case ๊ธฐ์ค€ ์ฐจ์ด, target/(target+baseline), target/baseline ๋ฐ ์˜ค์ฐจ ์ „ํŒŒ
trade-off_graph/* FRTโ€“DRC ์‚ฐ์ ๋„, reach ์ƒ‰์ƒ, ๊ธฐ์ค€ ํ™”์‚ดํ‘œ, 2/3๋ชฉ์  Pareto, ๊ฐ€์ค‘ ์ ์ˆ˜, i/f ๊ทธ๋ฃน๊ณผ p ํ•„ํ„ฐ
time_vs_metric_plot.py ์ „ํŒŒยท์ค‘๋ณต ๋ˆ„์ ๊ณก์„ , ์„ ํ˜•/๋กœ๊ทธ ์‹œ๊ฐ„ ์ถ•, ๊ฒฐํ•ฉ ํŒจ๋„
calc_lazy_metric.py ๊ฐ™์€ case์˜ lazy-off ๊ธฐ์ค€์„ ์ด์šฉํ•œ ๊ธฐ์—ฌยท๊ฒน์นจยทํšจ์œจ ๋“ฑ 8๊ฐœ ๊ด€์ธก ์ถ”์ •
dup_regression.py v2 ์ค‘๋ณต ํšŒ๊ท€์‹ 4๊ฐœ, ๊ณ„์ˆ˜ยทrankยทํ•™์Šต ์ž๋ฃŒ Rยฒ ๋ฐ ๊ด€์ธก/์ ํ•ฉ ๋น„๊ต
old/graphic.py v2 metric JSONL๊ณผ x/y ์š”์•ฝ ๊ฐ€์ ธ์˜ค๊ธฐ, ์ž„์˜ ์ง€ํ‘œยท์ถ•ยท์ƒ‰์ƒ์˜ ์‚ฐ์ ๋„
old/propagation.py, old/prop_plot.py ๋ฉ”์‹œ์ง€๋ณ„ ์ตœ์ดˆ ์ˆ˜์‹  ๊ฒฝ๋กœ, ์ง€์—ฐยทhop ๋ถ„ํฌ, ์‹œ๊ฐ„ยทhop๋ณ„ ํ‰๊ท  ๋ˆ„์  ์ˆ˜์‹  ์ˆ˜์™€ ์ฆ๊ฐ€๋Ÿ‰
old/prop_plot_graph.py ์ „ํŒŒ CSVยทJSON ๊ณก์„  overlay, ์›๋ž˜ ํฌ๊ธฐ/์ตœ๋Œ€๊ฐ’ ์ •๊ทœํ™”
old/mean_degree_ratio.py Total/Count ์ž๋ฃŒ ๊ฐ€์ ธ์˜ค๊ธฐ์™€ snapshot ํ‰๊ท  ์ฐจ์ˆ˜ ํ™•๋ฅ 
old/clustering_vs_eigenvector.py ๋‘ ์ง€ํ‘œ ์‚ฐ์ ๋„์™€ ๊ธฐ์ค€ case ํ™”์‚ดํ‘œ
old/frt_drc_graph.py v2์— ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์—ญ์‚ฌ์ /ER ์ฐธ๊ณ  ๊ทธ๋ฆผ 3๊ฐœ. ํ˜„์žฌ ์‹คํ—˜ ๋ฐ์ดํ„ฐ์™€ ๋ถ„๋ฆฌ๋œ ๋ฒ„ํŠผ
old/fitting.py ๊ฐ€์ค‘ Student-t MLE, df/location/scale ๋ณ€ํ™”, ๋‹จ๋ณ€๋Ÿ‰ยท๋‹ค๋ณ€๋Ÿ‰ ์ด์ฐจ ํšŒ๊ท€, ์ง€์ • D ์กฐ๊ฑด์˜ ์˜ˆ์ธก ๋ถ„ํฌ
image_gen.sh, total_image_gen.sh, run*.sh ์„ ํƒ ๊ฒฐ๊ณผ์˜ ์„œ๋ฒ„ ๋ถ„์„ ์ ‘์ˆ˜, ์ „์ฒด PNG/CSV/์ฐจํŠธ ์ •์˜ ZIP. ๊ธฐ์กด Python ๊ฒฝ๋กœ ์„ค์ •์ด๋‚˜ CLI๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์€ ์•„๋‹˜

Import๋Š” ํŒŒ์ผ๋‹น 32MiB๊นŒ์ง€ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ณต ํ˜•์‹์€ metric JSONL, ์ „ํŒŒ tree JSON/JSONL, ์ค‘๋ณต ์‹œ๊ฐ map, x_case/y/yerrยทx/y JSON, ์ˆซ์ž CSV, v3 ๋ถ„์„ JSON์ž…๋‹ˆ๋‹ค. ์ž„์˜์˜ v2 ๋‚ด๋ถ€ ์ž๋ฃŒ ๊ตฌ์กฐ ์ „๋ถ€๋ฅผ ์ž๋™ ํŒ๋ณ„ํ•˜๊ฑฐ๋‚˜ ์›๋ž˜ ๋””๋ ‰ํ„ฐ๋ฆฌยทํŒŒ์ผ๋ช…์„ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์กฐ์ž‘์€ ์‹œ๊ฐํ™”๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

ํ•ด์„๊ณผ ์›์ž๋ฃŒ

์ •ํ™•ํ•œ ์ˆ˜์‹ยท์ง‘๊ณ„ยท๊ทธ๋ž˜ํ”„ ํ‘œ๋ณธยทEager/Lazy ์ถ”์ •์€ ์ €์žฅ ๊ฒฐ๊ณผ ์—ฐ๊ตฌ ์ง€ํ‘œ์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. v2์™€ ๋น„๊ตํ•  ๋•Œ ๋‹ค์Œ ์ฐจ์ด๋ฅผ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.

  • ๋ฉ”์ธ Metrics์˜ ์„ธ์…˜ ๊ธฐ๊ฐ„ ์ •์˜์™€ v2 ๊ทธ๋ฆผ์„ ์œ„ํ•œ research ์ •์˜๋Š” ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค. ์—ฐ๊ตฌ reachability๋Š” ์ˆ˜์‹  ์‹œ์ ์— ์กฐ๊ฑด๋ถ€์ธ ๋ชจ์ง‘๋‹จ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ฉ”์‹œ์ง€๋ณ„ ์ง€ํ‘œ์™€ ๋ˆ„์  ๊ณก์„ ์˜ ๊ฐ€์ค‘ ๋ฐฉ์‹๋„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
  • v2 reciprocal GRAFT ๊ทธ๋ž˜ํ”„์™€ v3์˜ ํ‘œ๋ณธ ์ด์›ƒ ๊ทธ๋ž˜ํ”„๋Š” ๋™์ผํ•œ ๊ด€์ธก์ด ์•„๋‹™๋‹ˆ๋‹ค. v3 ์ €์žฅ ๊ทธ๋ž˜ํ”„๋Š” ํ† ํ”ฝ์„ ํ•ฉ์นœ ๋ฌด๋ฐฉํ–ฅ ๊ฐ„์„ ์ด๋ฉฐ ๋ถ„์„์€ ์ตœ๋Œ€ 1,440๊ฐœ ๊ด€์ธก ํ‘œ๋ณธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ ๊ฐ„์„ ์ด ์—†๋Š” ์˜ˆ์ „ ์š”์•ฝ์œผ๋กœ ์ƒˆ ์ค‘์‹ฌ์„ฑยท๊ฒฝ๋กœ ์ง€ํ‘œ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ถ”์ •๋œ eager/lazy, ์•Œ๋ ค์ง€์ง€ ์•Š์€ ์ถœ์ฒ˜, ๋ชจ๋ธ ์˜ˆ์ธก๊ณผ v2์˜ ๊ณ ์ • ์—ญ์‚ฌ์ /ER ์ฐธ๊ณ ์ž๋ฃŒ๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋กœ๊ทธ์˜ ๋ฉ”์‹œ์ง€ ID๋„ ์‹ค์ œ ๋ฐœ์‹  ํ ์›์ธ์„ ์ง์ ‘ ์ฆ๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ค‘์•™๊ฐ’๊ณผ ๋ชจ์ง‘๋‹จ ํ•ฉ์ง‘ํ•ฉ์„ ๋ฐ”๋กœ์žก์€ ์—ฐ๊ตฌ ์ง‘๊ณ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Student-t๋Š” ๊ฐ€์ƒ ํ‘œ๋ณธ 60,000๊ฐœ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์‹คํŒจ ์‹œ ์ž„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์ง€ ์•Š๊ณ  ๊ด€์ธก ํ™•๋ฅ ์— ์ง์ ‘ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด Python ์ˆ˜์น˜ยทํŒŒ์ผ ๊ตฌ์กฐยท๊ทธ๋ฆผ์˜ ์™„์ „ํ•œ ๋™์ผ์„ฑ์„ ์ฃผ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ƒˆ ์ƒ์„ธ ID์™€ ๊ทธ๋ž˜ํ”„ ๊ฐ„์„ ์€ ํ•ด๋‹น ๋ฒ„์ „์œผ๋กœ ๋ฐฐํฌํ•œ ์ดํ›„ ์ˆ˜์ง‘ํ•œ ๋กœ๊ทธ์—๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œยท์ƒ๋žต ํ•œ๋„๋Š” API, ์›๋ณธยท๋ถ„์„ยท์ด๋ฏธ์ง€ ๊ตฌ๋ถ„์€ ๋ณด์กด ์•ˆ๋‚ด, v3์— ์ถ”๊ฐ€ํ•œ ์‹ค์ œ ์ŠคํŠธ๋ฆผ B/W์˜ ๋ฒ”์œ„๋Š” ๋Œ€์—ญํญ ์ •์˜๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

๊ณ„์‚ฐ ๊ฒ€์ฆ์€ ์—ฐ๊ตฌ ์ง€ํ‘œ ํ…Œ์ŠคํŠธ์™€ ์ถœ์ฒ˜ ์ถ”์ • ํ…Œ์ŠคํŠธ, ๋กœ๊ทธ๋Š” Peer tracer ํ…Œ์ŠคํŠธ, ๊ฐ€์ ธ์˜ค๊ธฐยท๋น„๊ตยท๊ทธ๋ฆผ์€ ์—ฐ๊ตฌ UI ํ…Œ์ŠคํŠธ์™€ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€ ํ…Œ์ŠคํŠธ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ๋ชฉ๋ก ๊ฒ€์‚ฌ๋Š” ๊ฐœ๋ฐœ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.