Zstd: gzip๊ณผ zstd์˜ ์ฐจ์ด์ 

์— ๋งŒ๋“  2017๋…„ 09์›” 19์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/zstd

Linux์˜ zstd : ๋‘ ๊ฐ€์ง€ ๊ด€์ฐฐ

1) ํฐ ํŒŒ์ผ์„ ์••์ถ•ํ•˜๊ธฐ ์œ„ํ•ด gzip์„ ์‹œ์ž‘ํ•˜๊ณ  ^ C๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ gzip์„ ์ข…๋ฃŒํ•˜๋ฉด ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— gzip์ด ์ถœ๋ ฅ ํŒŒ์ผ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. zstd๋Š” ํ˜„์žฌ ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ถˆ์™„์ „ํ•˜๊ฑฐ๋‚˜ ์†์ƒ๋œ ์ถœ๋ ฅ ํŒŒ์ผ์„ ๊ฐ–๋Š” ๊ฒƒ๋ณด๋‹ค ์ถœ๋ ฅ ํŒŒ์ผ์ด์—†๋Š” ๊ฒƒ์ด ๋‚ซ๊ธฐ ๋•Œ๋ฌธ์— gzip์˜ ๋™์ž‘์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

2) ํŒŒ์ผ์„ ์••์ถ•ํ•˜๊ฑฐ๋‚˜ ์••์ถ•์„ ํ’€ ๋•Œ zstd๋Š” ์•„๋ž˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์—ฌ strace์—์„œ ์ถœ๋ ฅ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
open("file.zst", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
gzip ๋ฐ xz๋Š” ์œ ์‚ฌํ•œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ชจ๋“œ 0600์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ๋‹ซํžŒ ํ›„ ์ถœ๋ ฅ ํŒŒ์ผ์˜ ๋ชจ๋“œ๋ฅผ ์›ํ•˜๋Š” ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. zstd๊ฐ€ 0666์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? 0600์ด ๋” ๋‚˜์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์ค€๋น„๋˜๊ธฐ ์ „์— ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฝ๊ธฐ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

feature request question

๋ชจ๋“  4 ๋Œ“๊ธ€

  1. ^C ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ž˜ํ•‘ํ•˜๋ ค๋ฉด ์‹ ํ˜ธ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ์กฐ์‚ฌํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํœด๋Œ€ ์„ฑ ๋ฌธ์ œ๋„ ๊ฑฑ์ •์ž…๋‹ˆ๋‹ค.

  2. ๋‹น์‹ ์˜ ํ”์ ์€ ์šฐ๋ฆฌ ์ฝ”๋“œ๋ณด๋‹ค ๋” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.
    ๋Œ€์ƒ ํŒŒ์ผ ์—ด๊ธฐ ํ˜ธ์ถœ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    https://github.com/facebook/zstd/blob/dev/programs/fileio.c#L324
    ํ‘œ์ค€ fopen("name", "wb"); ์ผ ๋ฟ์ด๋ฉฐ ์†์„ฑ ๋น„ํŠธ๋ฅผ ์ œ์–ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์˜ ์‹œ์Šคํ…œ์—์„œ์ด ์ถ”์ ์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ง€ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ํ†ต์ œ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•„์‹ญ์‹œ์˜ค.
    ์ผ๋ฐ˜์ ์œผ๋กœ ์ด์‹์„ฑ (๋ฐ ์˜์กด์„ฑ ๋ฌธ์ œ ๊ฐ์†Œ)์„ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ ํ•œ ํ‘œ์ค€ C์— ๊ฐ€๊น๊ฒŒ ์œ ์ง€ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

์šฐ์„  : zstd๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์†๋„์™€ ์••์ถ•๋น„์— ๋†€๋ž์Šต๋‹ˆ๋‹ค! ์•„์ฃผ ์ข‹์•„์š”!

์ด ํ‹ฐ์ผ“์„ ๋‹ซ์œผ์‹ญ์‹œ์˜ค. ๋‚ด ๋‘ ๊ฐ€์ง€ ๊ด€์ฐฐ์€ ์‚ฌ์†Œํ•œ ์ผ๋ฟ์ด๋ฉฐ ์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

  1. ^ C ํŠธ๋ž˜ํ•‘์—๋Š” ์‹ ํ˜ธ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ํฅ๋ฏธ ๋กญ๊ตฐ. xz์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์•„๋ž˜ ์ฝ”๋“œ๋กœ ์ถœ๋ ฅ ํŒŒ์ผ์„ ์—ฝ๋‹ˆ ๋‹ค.
      int flags = O_WRONLY | O_BINARY | O_NOCTTY | O_CREAT | O_EXCL;
      #ifndef TUKLIB_DOSLIKE
          flags |= O_NONBLOCK;
      #endif
      const mode_t mode = S_IRUSR | S_IWUSR;
      dest_fd = open( dest_name, flags, mode );

fopen () ๋Œ€์‹  open ()์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ถœ๋ ฅ ํŒŒ์ผ์˜ ๊ถŒํ•œ ๋น„ํŠธ๋ฅผ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. xz ์€ (๋Š”) POSIX ํ˜ธํ™˜ ์‹œ์Šคํ…œ์„ ๋Œ€์ƒ์œผ๋กœํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ posix ๊ฐ€ ์•„๋‹Œ ์‹œ์Šคํ…œ๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ๋ž˜ํผ๊ฐ€ ํ•„์š”ํ•œ

zstd ๋Š” ์ด์‹์„ฑ ๊ด€์ ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ ํ•œ ํ‘œ์ค€ C ๊ฐ€ ๋˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์ ์œผ๋กœ๋Š” ํ‘œ์ค€ C์— ํ•ด๋‹นํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†์„ ๋•Œ ์ผ๋ถ€ OS ์ข…์† ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๋Œ€์ƒ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ณ€ํ˜•์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  ์ง€์›๋˜์ง€ ์•Š๋Š” ๋Œ€์ƒ์˜ ๊ฒฝ์šฐ ๊ด€๋ จ ๊ธฐ๋Šฅ์ด ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค (ํ•„์ˆ˜์ ์ด์ง€ ์•Š์€ ๊ฒฝํ–ฅ์ด ์žˆ์Œ).

๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ๋ฐฐ์šฐ๋ฉด ํ•จ์ˆ˜ signal() ๋Š” ์‹ค์ œ๋กœ ํ‘œ์ค€ C์˜ ์ผ๋ถ€์ด๋ฏ€๋กœ ์ด์‹์„ฑ์ด ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ dev ๋ธŒ๋žœ์น˜ ์—…๋ฐ์ดํŠธ์—์„œ zstd cli์— Ctrl-C ํŠธ๋ž˜ํ•‘์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
Ctrl-C ๋ˆ„๋ฅด๋ฉด ์ด์ œ ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— ์ž‘์—… ์•„ํ‹ฐํŒฉํŠธ (์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๋Œ€์ƒ ํŒŒ์ผ)๋ฅผ ์ง€ ์›๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰