OpenZL 0.2.0 OpenZL 0.2.0

7๊ฐœ์›”๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— ํ”„๋ ˆ์ž„์›Œํฌ ๋ฒ„์ „ 0.2.0์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆZL๋ฐ์ดํ„ฐ ์†์‹ค ์—†๋Š” ์••์ถ•๊ธฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•ด๋‹น ์–ธ์–ด๋กœ ์„ค๋ช…๋œ ํŠน์ˆ˜ ์••์ถ•๊ธฐ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. SDDL.
ํ›Œ๋ฅญํ•œ ์ „์šฉ ์••์ถ•๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ๋Š” ๋‘ ๋‹จ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ํ†ตํ•ด ๊ตฌ์กฐ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฒฐ๊ณผ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์šฐ์ˆ˜ํ•œ ์••์ถ•๋ฅ ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋›ฐ์–ด๋‚œ ๋ฐฑ์—”๋“œ ์••์ถ•๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

OpenZL์€ ๋‘ ๋‹จ๊ณ„ ๋ชจ๋‘์— ํ•„์š”ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” C์™€ C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ BSD ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ

SDDL2

SDDL์€ ์›๋ž˜ ์„ค๊ณ„ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„์ „ํžˆ ์žฌ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๋ฐ๋ชจ ๋ฒ„์ „์€ ๋‹จ์ˆœํ™”๋œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด์—ˆ์ง€๋งŒ, SDDL2๋Š” ์™„์ „ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์ปดํŒŒ์ผ๋Ÿฌ์ž…๋‹ˆ๋‹ค. ํŒŒ์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธ ๋ถ„์„๊ธฐ์— ์ „๋‹ฌํ•˜๊ณ , ์˜๋ฏธ ๋ถ„์„๊ธฐ๋Š” ๋‹ค์‹œ ํƒ€์ž…์ด ์ง€์ •๋œ ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST)๋ฅผ ์ตœ์ ํ™”๊ธฐ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ ํ™”๊ธฐ๋Š” ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋ฅผ ์ œ์–ดํ•˜์—ฌ ๊ฐ€์ƒ ๋จธ์‹  ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ์ ์ธ ๊ฒฐ๊ณผ๋Š” ์ฆ‰๊ฐ์ ์ธ ํŒŒ์‹ฑ์ž…๋‹ˆ๋‹ค. ๋ ˆ์ฝ”๋“œ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜๋งŒ์œผ๋กœ ์™„์ „ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ, ์—”์ง„์€ ์ด์ „ ๋ฐ”์ดํŠธ๋ฅผ ์Šค์บ”ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ํ•ด๋‹น ํ•„๋“œ๋กœ ์ด๋™ํ•˜์—ฌ ๋ณต์‚ฌ ์—†๋Š” ์•ก์„ธ์Šค์™€ ์ˆ˜ GB/s์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์–ธ์–ด ์ž์ฒด๋Š” ๋„๊ตฌ ์„ธํŠธ์™€ ํ•จ๊ป˜ ๋ฐœ์ „ํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์ด์ œ ์กฐ๊ฑด๋ฌธ์„ ์œ„ํ•œ when ์ ˆ, ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ ๋ ˆ์ฝ”๋“œ ๋ฐ ์ต๋ช… ๋ ˆ์ฝ”๋“œ, ๋ ˆ์ฝ”๋“œ ํ•„๋“œ ๋ฉค๋ฒ„์— ๋Œ€ํ•œ ์ ‘๊ทผ, ๋น„ํŠธ ์—ฐ์‚ฐ์ž ๋ฐ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ์ธก๋ฉด์—์„œ๋Š” ์˜๋ฏธ ๋ถ„์„ ๋‹จ๊ณ„์—์„œ ์ด์ œ ๋Ÿฐํƒ€์ž„์ด ์•„๋‹Œ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์†Œ์Šค ์ฝ”๋“œ ์œ„์น˜์™€ ํ•จ๊ป˜ ์ •์˜๋˜์ง€ ์•Š์€ ์ฐธ์กฐ, ํ˜•์‹ ๋ถˆ์ผ์น˜ ๋ฐ ์ธ์ž ๊ฐœ์ˆ˜ ์˜ค๋ฅ˜๋ฅผ ์‹๋ณ„ํ•˜๋ฉฐ, .sddl ํŒŒ์ผ์˜ ๊ตฌ๋ฌธ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฅผ ์œ„ํ•œ VS Code ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋‚ด์žฅ LZ ์ฝ”๋ฑ

OpenZL์€ ์ด์ œ ์ž์ฒด LZ ์ฝ”๋ฑ์ธ ZL_GRAPH_LZ์™€ zli ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ํฌํ•จ๋œ ์ˆœ์ฐจ ์••์ถ• ํ”„๋กœํŒŒ์ผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋ฑ ๊ฐœ๋ฐœ์€ ๊ณ„์† ์ง„ํ–‰ ์ค‘์ด๋ฉฐ, ๊ธฐ๋Šฅ ์„ธํŠธ๋ฅผ ํ™•์žฅํ•˜๊ณ  ์ž‘์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” 64KB ์••์ถ• ์œˆ๋„์šฐ๋ฅผ ์ง€์›ํ•˜๋ฉฐ zstd ๋ ˆ๋ฒจ 1์— ํ•ด๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

OpenZL์€ LZ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ฐ ๋‹จ๊ณ„๋ฅผ ์†๋„ ํ–ฅ์ƒ์— ๋งž์ถฐ ์žฌ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ทธ๋ž˜ํ”„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋™์ผํ•˜๊ฒŒ ์ ํ•ฉํ•œ ๋‹จ์ผ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ , ์—ฌ๋Ÿฌ ์—”ํŠธ๋กœํ”ผ ์ธ์ฝ”๋”ฉ ๋‹จ๊ณ„๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ๋‹จ์ผ ์ž‘์—…์œผ๋กœ ํ†ตํ•ฉํ•˜์—ฌ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง• ๋•๋ถ„์— OpenZL์€ ์‹ค๋ ˆ์‹œ์•„ ์ฝ”ํผ์Šค์—์„œ Zstandard ๋ ˆ๋ฒจ 1 ๋Œ€๋น„ ์••์ถ• ์†๋„๋Š” 10%, ์••์ถ• ํ•ด์ œ ์†๋„๋Š” 70% ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ํ…Œ์ŠคํŠธ:

์••์ถ•๊ธฐ์••์ถ• ๋น„์œจ์••์ถ• ์†๋„๊ฐ์•• ์†๋„
OpenZL LZ ๋ ˆ๋ฒจ 12.74466 MB / s์˜2288 MB / s์˜
Zstd ๋ ˆ๋ฒจ 1, ์ฐฝ ํฌ๊ธฐ 64K2.74419 MB / s์˜1254 MB / s์˜
Zstd ๋ ˆ๋ฒจ 12.89424 MB / s์˜1345 MB / s์˜

๋งค์šฐ ํฐ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ง€์›

zli๋Š” ์ด์ œ ์ˆ˜ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ ๋Œ€์šฉ๋Ÿ‰ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์••์ถ• ์ „์— ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ํฌ๊ธฐ(๊ธฐ๋ณธ๊ฐ’ ์•ฝ 16MB)์˜ ์ฒญํฌ๋กœ ๋ถ„ํ• ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ง€์—ญ์„ฑ์„ ๊ฐœ์„ ํ•˜๋ฉฐ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. SDDL2๋Š” ์Šคํ‚ค๋งˆ ์ฒ˜๋ฆฌ ์‹œ์—๋„ ์œ ์‚ฌํ•œ ์ž๋™ ์ฒญํฌ ๋ถ„ํ•  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ CSV, Parquet ๋ฐ ํ‘œ์ค€ ์ˆซ์ž ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์„ธ๊ทธ๋ฉ˜ํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์œผ๋ฉฐ, ๋ชจ๋“  ์„ธ๊ทธ๋ฉ˜ํ„ฐ๋Š” ์ด์ œ ์ง๋ ฌํ™” ๋ฐ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์„ ํƒํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์••์ถ•๊ธฐ์— ์ €์žฅํ•˜๊ณ  ๋‚˜์ค‘์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ์••์ถ• ๊ณผ์ •์—์„œ ํˆฌ๋ช…ํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•™์Šต ํŒŒ์ดํ”„๋ผ์ธ์€ ๋‹ค๋ฅด๋ฉฐ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฐฉ๋Œ€ํ•œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šต ์ž๋ฃŒ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์˜จ๋ผ์ธ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™” ๋„๊ตฌ์˜ ๊ฐœ์„  ์‚ฌํ•ญ (์‹œ๋„ํ•˜๋‹ค)
์ด์ œ ์‹œ๊ฐํ™” ๋„๊ตฌ๋Š” ์••์ถ• ๋ฐ ์••์ถ• ํ•ด์ œ ๊ณผ์ •์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํŒจ๋„์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ๋”ฐ๋ผ ์‹ค์ œ๋กœ ํ๋ฅด๋Š” ๋ฐ”์ดํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠธ๋ฆฌ๋ฐ ์ปจํŠธ๋กค์„ ํ†ตํ•ด ๋Œ€๊ทœ๋ชจ ์ŠคํŠธ๋ฆผ๋„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์ • ํŒจ๋„์€ ๋ชจ๋“  ํ‘œ์‹œ ์˜ต์…˜์„ ํ•œ ๊ณณ์— ๋ชจ์•„๋‘๊ณ , ๋ฐฉํ–ฅ ํƒ์ƒ‰, ์ˆœํšŒ, ํ™•์žฅ ๋ฐ ์ถ•์†Œ, ๋…ธ๋“œ ์„ ํƒ ๋“ฑ ๋‹ค์–‘ํ•œ ๋‹จ์ถ•ํ‚ค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋งˆ์šฐ์Šค ์—†์ด๋„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ถ”์  ํŒŒ์ผ์— ๋ฒ„์ „์ด ์ง€์ •๋˜๊ณ , ๋ธ”๋ก ๊ธฐ๋ฐ˜ ์••์ถ•์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œ๋˜๋ฉฐ, zli๋Š” ์ƒˆ๋กœ์šด --trace ๋ฐ --trace-streams-dir ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ์ถ”์  ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žก๋‹คํ•œ

  • ์นดํƒˆ๋กœ๊ทธ์— ์—ฌ๋Ÿฌ ์ฝ”๋ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŒŒํ‹ฐ์…˜ ๋ฐ ๋น„ํŠธํŒฉ ์ฝ”๋ฑ์€ ์ด์ œ ํ†ตํ•ฉ ๋””์ฝ”๋”๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋™ ์†Œ์ˆ˜์  ๋น„ํŠธ ๋ถ„ํ•  ์ฝ”๋ฑ์€ ์ด์ œ fp16, fp32, fp64 ๋ฐ bf16 ํ˜•์‹์— ๋Œ€ํ•œ ์ „์šฉ ์ธ์ฝ”๋”์™€ ๋””์ฝ”๋”๋ฅผ ํฌํ•จํ•˜๋ฉฐ, ํŠน์ˆ˜ ๊ฐ€์† ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์ธ์‹ ๋ถ„ํ• (split_byrange), ๊ธธ์ด ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ, ์„ผํ‹ฐ๋„ฌ ์ฝ”๋ฑ, lz4 ๊ทธ๋ž˜ํ”„, ๊ทธ๋ฆฌ๊ณ  tryParseInt ๋ฐ splitByParam๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ๋„์šฐ๋ฏธ ํ•จ์ˆ˜๋“ค์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • API๊ฐ€ ๊ฐ„์†Œํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํผ์ฆˆ ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋” ๋งŽ์€ ํ”Œ๋žซํผ์„ ์œ„ํ•œ ๋นŒ๋“œ ๋ฐ ํŒจํ‚ค์ง• ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : linux.org.ru