FreeBSD 2019๋…„ XNUMX๋ถ„๊ธฐ ์ง„ํ–‰ ๋ณด๊ณ ์„œ

๊ฒŒ์‹œ ๋จ 2019๋…„ XNUMX์›”๋ถ€ํ„ฐ XNUMX์›”๊นŒ์ง€ FreeBSD ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ๋ณด๊ณ ์„œ์ž…๋‹ˆ๋‹ค. ์ฃผ๋ชฉํ•  ๋งŒํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ผ๋ฐ˜ ๋ฐ ์‹œ์Šคํ…œ ์งˆ๋ฌธ
    • Core ํŒ€์€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ค‘์•™ ์ง‘์ค‘์‹ Subversion ์†Œ์Šค ์ œ์–ด ์‹œ์Šคํ…œ์—์„œ ๋ถ„์‚ฐ Git ์‹œ์Šคํ…œ์œผ๋กœ ์ด๋™ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—… ๊ทธ๋ฃน์„ ๊ตฌ์„ฑํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ FreeBSD ์ปค๋„์˜ ํผ์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์ฆˆ์นผ๋Ÿฌ ๊ทธ๋ฆฌ๊ณ  ํ™•์ธ๋œ ์—ฌ๋Ÿฌ ์˜ค๋ฅ˜๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 32๋น„ํŠธ ์ปค๋„์ด ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ 64๋น„ํŠธ ํ™˜๊ฒฝ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํผ์ง• ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. bhyve ๊ธฐ๋ฐ˜ ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ syzkaller๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ํ™•๋Œ€ํ•˜๊ณ , LLVM sanitizer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋„์„ ํ™•์ธํ•˜๊ณ , netdump๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํผ์ง• ํ…Œ์ŠคํŠธ ์ค‘ ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ์ปค๋„ ๋คํ”„๋ฅผ ์ €์žฅํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.
    • ์ปค๋„ ์ˆ˜์ค€์—์„œ zlib ๊ตฌํ˜„์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ž‘์—…์ด ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. zlib ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ปค๋„ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด contrib/zlib ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์ด sys/contrib/zlib๋กœ ๋ฐ”๋€Œ์—ˆ๊ณ  crc.h ํ—ค๋” ํŒŒ์ผ๋„ zlib/crc.h์™€์˜ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฆ„์ด ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. zlib ๋ฐ inflate์— ์˜์กดํ•˜๋Š” ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ, ์••์ถ•์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ๊ธฐ๋Šฅ์œผ๋กœ ์ ์ง„์ ์œผ๋กœ ์ด์ „ํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „ ๋ฐ ์ƒˆ zlib์™€ ๋™์‹œ์— ์ปค๋„์„ ๋นŒ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.
    • Linux ํ™˜๊ฒฝ ์—๋ฎฌ๋ ˆ์ด์…˜ ์ธํ”„๋ผ(Linuxulator)๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. strace ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ ๊ฐ™์€ Linux ๋””๋ฒ„๊น… ๋„๊ตฌ์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. linux-c7-strace ํŒจํ‚ค์ง€๊ฐ€ ํฌํŠธ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒจํ‚ค์ง€๋Š” ์•„์ง ์ผ๋ถ€ Linux ๊ด€๋ จ ํ”Œ๋ž˜๊ทธ ๋ฐ ๊ตฌ์กฐ๋ฅผ ๋””์ฝ”๋”ฉํ•  ์ˆ˜ ์—†๋Š” ํ‘œ์ค€ truss ๋ฐ ktrace ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋Œ€์‹  Linux ์‹คํ–‰ ํŒŒ์ผ์„ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Linux ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ ์‹คํ–‰ ํŒŒ์ผ์ด ํฌํ•จ๋œ linux-ltp ํŒจํ‚ค์ง€๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ์ƒˆ ๋ฒ„์ „์˜ glibc์™€ ์—ฐ๊ฒฐ๋œ ์‹คํ–‰ ํŒŒ์ผ๊ณผ์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • pmap ๋ฉ”์ปค๋‹ˆ์ฆ˜์—์„œ ์ง€์—ฐ๋œ ๋ฌดํšจํ™” ์ž‘์—… ๊ตฌํ˜„์€ ์ž ๊ธˆ ์—†์ด ์ž‘๋™ํ•˜๋Š” ๋Œ€๊ธฐ์—ด ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‚ฌ์šฉ์œผ๋กœ ์ „ํ™˜๋˜์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋งŽ์€ ์ˆ˜์˜ ๋ณ‘๋ ฌ ๋งคํ•‘ ํ•ด์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ํ™•์žฅ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • execve() ๊ณ„์—ด์˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์‹คํ–‰ ์ค‘ vnode๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋ณ€๊ฒฝ๋˜์–ด ๋™์ผํ•œ ํŒŒ์ผ์— ๋Œ€ํ•ด execve()๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•  ๋•Œ(์˜ˆ: ๋ณ‘๋ ฌํ™”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด์…ˆ๋ธ”๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ) ํšจ์œจ์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ์ถœ์‹œ);
  • ะ‘ะตะทะพะฟะฐัะฝะพัั‚ัŒ
    • bhyve ํ•˜์ดํผ๋ฐ”์ด์ €๋Š” ํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ๋กœ ๊ฒŒ์ŠคํŠธ ํ™˜๊ฒฝ์˜ ์‹ค์‹œ๊ฐ„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๊ณผ ๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ์„ ์ •์ง€ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•œ ๋‹ค์Œ ์‹คํ–‰์„ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ/๋ณต์› ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์„ ์ง€์†์ ์œผ๋กœ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • libvdsk ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ bhyve๋Š” QCOW2 ํ˜•์‹์˜ ๋””์Šคํฌ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜๋ ค๋ฉด ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
      ํŠน๋ณ„ํžˆ ๊ฐœ์กฐ๋œ libvdsk ๊ธฐ๋ฐ˜์˜ ํŒŒ์ผ ์ž‘์—… ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€ํ™˜๋œ bhyve ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ๋ณด๊ณ  ๊ธฐ๊ฐ„ ๋™์•ˆ libvdsk๋Š” ์ƒˆ๋กœ์šด ํ˜•์‹์— ๋Œ€ํ•œ ์ง€์› ํ†ตํ•ฉ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ณ , Copy-On-Write์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ์ž‘์—… ์ค‘์—์„œ libvdsk๋ฅผ bhyve์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์— ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์ด ์ฃผ๋ชฉ๋ฉ๋‹ˆ๋‹ค.

    • ํ•ญ๋งŒ์— ๊ตํ†ต์ •๋ณด ์ˆ˜์ง‘ ์‹œ์Šคํ…œ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
      ๋งํŠธ๋ ˆ์ผ, ์•…์˜์ ์ธ ๋„คํŠธ์›Œํฌ ์š”์ฒญ(๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์˜ IP ๋ฐ ๋„๋ฉ”์ธ ํ™•์ธ)์— ๋Œ€ํ•œ ํŠธ๋žฉ์„ ์ƒ์„ฑํ•˜๊ณ , ๊ณต๊ฒฉ ์‹œ๋„์— ๋Œ€ํ•œ ํ›„์† ์ฐจ๋‹จ ๋˜๋Š” ๋ถ„์„์„ ์œ„ํ•ด ๊ฐ์ง€๋œ ํ™œ๋™์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ค‘์•™ ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๊ณต๊ฒฉ ํƒ์ง€, ๋กœ๊ทธ ๋ถ„์„, ํŒŒ์ผ ๋ฌด๊ฒฐ์„ฑ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ํ”Œ๋žซํผ์ด ํฌํŠธ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์™€์šฐ (ํ†ตํ•ฉ์„ ์ง€์›ํ•˜๋Š” Ossec ํฌํฌ ELK ์Šคํƒ);
  • ๋„คํŠธ์›Œํฌ ํ•˜์œ„ ์‹œ์Šคํ…œ
    • ena ๋“œ๋ผ์ด๋ฒ„๋Š” EC2(Elastic Compute Cloud) ์ธํ”„๋ผ์—์„œ ์‚ฌ์šฉ๋˜๋Š” 2์„ธ๋Œ€ ENAv2(ํƒ„๋ ฅ์  ๋„คํŠธ์›Œํฌ ์–ด๋Œ‘ํ„ฐ) ๋„คํŠธ์›Œํฌ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ง€์›ํ•˜์—ฌ ์ตœ๋Œ€ 25Gb/s์˜ ์†๋„๋กœ ECXNUMX ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์„ ๊ตฌ์„ฑํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ena ๋“œ๋ผ์ด๋ฒ„์— NETMAP ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • FreeBSD HEAD๋Š” CAM ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ƒˆ๋กœ์šด MMC/SD ์Šคํƒ์„ ์ฑ„ํƒํ•˜์—ฌ SDIO(Secure Digital I/O) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฅ์น˜๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, SDIO๋Š” Raspberry Pi 3๊ณผ ๊ฐ™์€ ๋งŽ์€ ๋ณด๋“œ์˜ WiFi ๋ฐ Bluetooth ๋ชจ๋“ˆ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒˆ๋กœ์šด ์Šคํƒ์„ ์‚ฌ์šฉํ•˜๋ฉด CAM ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ SD ๋ช…๋ น์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์žฅ์น˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„. FullMAC ๋ชจ๋“œ์—์„œ ์ž‘๋™ํ•˜๋Š” Broadcom ๋ฌด์„  ์นฉ์šฉ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—…์ด ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์นฉ ์ธก๋ฉด์—์„œ๋Š” 802.11 ๋ฌด์„  ์Šคํƒ์„ ๊ตฌํ˜„ํ•˜์—ฌ ์ž์ฒด ์šด์˜ ์ฒด์ œ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์‹คํ–‰๋จ).
    • FreeBSD์šฉ NFSv4.2(RFC-7862)๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. NFS์˜ ์ƒˆ ๋ฒ„์ „์—๋Š” posix_fadvise, posix_fallocate ํ•จ์ˆ˜, lseek์˜ SEEKHOLE/SEEKDATA ๋ชจ๋“œ์— ๋Œ€ํ•œ ์ง€์›๊ณผ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†กํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„์—์„œ ํŒŒ์ผ ์ผ๋ถ€๋ฅผ ๋กœ์ปฌ๋กœ ๋ณต์‚ฌํ•˜๋Š” ์ž‘์—…์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

      FreeBSD๋Š” ํ˜„์žฌ LayoutError, IOAdvise, Allocate ๋ฐ Copy ์ž‘์—…์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‚จ์€ ๊ฒƒ์€ NFS์™€ ํ•จ๊ป˜ lseek(SEEKHOLE/SEEKDATA)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ Seek ์ž‘์—…์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. NFSv4.2 ์ง€์›์€ FreeBSD 13์— ๊ณ„ํš๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ
    • ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ตฌํ˜„์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” FUSE(USErspace์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ) ํ•˜์œ„ ์‹œ์Šคํ…œ์šฉ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์žฌ์ž‘์—…ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ฑฐ์˜ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ ์ œ๊ณต๋œ ๋“œ๋ผ์ด๋ฒ„๋Š” ์˜ค๋ž˜๋˜์—ˆ์œผ๋ฉฐ ๋งŽ์€ ๋ฒ„๊ทธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„ ํ˜„๋Œ€ํ™” ํ”„๋กœ์ ํŠธ์˜ ์ผํ™˜์œผ๋กœ FUSE 7.23 ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค(7.8๋…„ ์ „์— ์ถœ์‹œ๋œ ์ด์ „ ๋ฒ„์ „ 11์ด ์ง€์›๋จ). ์ปค๋„ ์ธก์—์„œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ("-o default_permissions")๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. VOP_MKNOD, VOP_BMAP ๋ฐ VOP_ADVLOCK์ด ์ถ”๊ฐ€๋˜์—ˆ๊ณ  FUSE ์ž‘์—…์„ ์ค‘๋‹จํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ํ“จ์ฆˆํ”„์— ๋ช…๋ช…๋˜์ง€ ์•Š์€ ํŒŒ์ดํ”„ ๋ฐ Unix ์†Œ์ผ“์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. /dev/fuse์— kqueue๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ "mount -u"๋ฅผ ํ†ตํ•ด ๋งˆ์šดํŠธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. NFS๋ฅผ ํ†ตํ•œ ํ“จ์ฆˆ ๋‚ด๋ณด๋‚ด๊ธฐ, RLIMIT_FSIZE ๊ณ„์ • ๊ตฌํ˜„, FOPEN_KEEP_CACHE ํ”Œ๋ž˜๊ทธ ๋ฐ FUSE_ASYNC_READ ์ถ”๊ฐ€, ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ด๋ฃจ์–ด์กŒ์œผ๋ฉฐ ์บ์‹ฑ ๊ตฌ์„ฑ์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • BIO_DELETE ์ž‘์—…์— ๋Œ€ํ•œ ์ง€์›์ด ์Šค์™‘ ํ˜ธ์ถœ๊ธฐ ์ฝ”๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด SSD ๋“œ๋ผ์ด๋ธŒ์—์„œ ๋ธ”๋ก์„ ์ œ๊ฑฐํ•  ๋•Œ TRIM ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ์ˆ˜๋ช…์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜๋“œ์›จ์–ด ์ง€์›
    • ๋ผ์šฐํ„ฐ, ๊ฒŒ์ดํŠธ์›จ์ด ๋ฐ ๋„คํŠธ์›Œํฌ ์Šคํ† ๋ฆฌ์ง€์—์„œ์˜ ์‚ฌ์šฉ์„ ๋ชฉํ‘œ๋กœ ARMv64 Cortex-A5871 ํ”„๋กœ์„ธ์„œ๋ฅผ ๊ฐ–์ถ˜ ARM8 SoC Broadcom BCM57X์— ๋Œ€ํ•œ ์ง€์›์„ ๊ตฌํ˜„ํ•˜๋Š” ์ž‘์—…์ด ๊ณ„์†๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ  ๊ธฐ๊ฐ„ ๋™์•ˆ ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€ iProc PCIe ๋ฒ„์Šค์— ๋Œ€ํ•œ ์ง€์›์ด ๊ฐœ์„ ๋˜๊ณ  BNXT ์ด๋”๋„ท์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ๋‚ด์žฅ ์•”ํ˜ธํ™” ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ IPsec์„ ๊ฐ€์†ํ™”ํ•˜๋Š” ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. HEAD ๋ถ„๊ธฐ์— ์ฝ”๋“œ ํ†ตํ•ฉ์€ ์˜ฌํ•ด ํ•˜๋ฐ˜๊ธฐ์— ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.
    • ํ†ตํ•ฉ ๋„คํŠธ์›Œํฌ ํŒจํ‚ท ์ฒ˜๋ฆฌ ๊ฐ€์† ์—”์ง„, 64Gb ์ด๋”๋„ท, PCIe 1046, SATA 8 ๋ฐ USB 72์„ ๊ฐ–์ถ˜ ARMv10 Cortex-A3.0 ํ”„๋กœ์„ธ์„œ ๊ธฐ๋ฐ˜ 3.0๋น„ํŠธ SoC NXP LS3.0A์— ๋Œ€ํ•œ ์ง€์› ์ž‘์—…์ด ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ”Œ๋žซํผ(๋‹ค์ค‘ ์‚ฌ์šฉ์ž SMP) ๋ฐ SATA 3.0์— ๋Œ€ํ•œ ์ง€์›์ด ์ด๋ฏธ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. USB 3.0, SD/MMC ๋ฐ I2C์— ๋Œ€ํ•œ ์ง€์›์€ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ณ„ํš์—๋Š” ์ด๋”๋„ท, GPIO ๋ฐ QSPI์— ๋Œ€ํ•œ ์ง€์›์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ณ  HEAD ์ง€์ ์— ํฌํ•จ๋˜๋Š” ๊ฒƒ์€ 4๋…„ 2019๋ถ„๊ธฐ์— ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.
    • Mellanox ConnectX-5 [Lx], ConnectX-5 [Ex], ConnectX-4 [Dx] ์ด๋”๋„ท ๋ฐ InfiniBand ์–ด๋Œ‘ํ„ฐ์šฉ mlx5en ๋ฐ mlx6ib ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Mellanox Socket Direct(ConnectX-6) ์–ด๋Œ‘ํ„ฐ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์–ด PCIe Gen 200 ๋ฒ„์Šค์—์„œ ์ตœ๋Œ€ 3.0Gb/s์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ ์ฝ”์–ด BlueField ์นฉ์˜ ๊ฒฝ์šฐ RShim ๋“œ๋ผ์ด๋ฒ„์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Mellanox ์–ด๋Œ‘ํ„ฐ์šฉ ์ง„๋‹จ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์„ธํŠธ๊ฐ€ ํฌํ•จ๋œ mstflint ํŒจํ‚ค์ง€๊ฐ€ ํฌํŠธ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ํฌํŠธ ์‹œ์Šคํ…œ
    • ๊ทธ๋ž˜ํ”ฝ ์Šคํƒ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. drm.ko(Direct Rendering Manager) ๋“œ๋ผ์ด๋ฒ„๋Š” Linux 5.0 ์ปค๋„์—์„œ ์ด์‹๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋“œ๋ผ์ด๋ฒ„๋Š” ์‹คํ—˜์ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ ํฌํŠธ ํŠธ๋ฆฌ์— Graphics/drm-devel-kmod๋กœ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋Š” ์—…๋ฐ์ดํŠธ๋œ Linux KPI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux ์ปค๋„ DRM API์™€ ํ˜ธํ™˜๋˜๋ฏ€๋กœ FreeBSD CURRENT๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. VirtualBox ๊ฐ€์ƒ GPU์šฉ vboxvideo.ko drm ๋“œ๋ผ์ด๋ฒ„๋„ Linux์—์„œ ํฌํŒ…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Mesa ํŒจํ‚ค์ง€๊ฐ€ ๋ฆด๋ฆฌ์Šค 18.3.2๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์œผ๋ฉฐ devel/llvm80 ๋Œ€์‹  devel/llvm60 ํฌํŠธ์—์„œ LLVM์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • FreeBSD ํฌํŠธ ํŠธ๋ฆฌ๋Š” 37000๊ฐœ ํฌํŠธ๋ฅผ ์ดˆ๊ณผํ–ˆ์œผ๋ฉฐ, ๋‹ซํžˆ์ง€ ์•Š์€ PR ์ˆ˜๋Š” 2146๊ฐœ๋กœ ์œ ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ  ๊ธฐ๊ฐ„ ๋™์•ˆ 7837๋ช…์˜ ๊ฐœ๋ฐœ์ž๋กœ๋ถ€ํ„ฐ 172๊ฐœ์˜ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์„ธ ๋ช…์˜ ์ƒˆ๋กœ์šด ์ฐธ๊ฐ€์ž๊ฐ€ ์ปค๋ฏธํ„ฐ ๊ถŒํ•œ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ํฌํŠธ์˜ ์ค‘์š”ํ•œ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ์—๋Š” MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0, Chromium 75.0.3770.100์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  Go ํฌํŠธ๋Š” "USES=go" ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Haskell ์ฝ”๋“œ์— ์‚ฌ์šฉ๋˜๋Š” Cabal ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์— "USES=cabal" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—„๊ฒฉํ•œ ์Šคํƒ ๋ณดํ˜ธ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Python ๋ฒ„์ „์€ 3.6์ด ์•„๋‹Œ 2.7์ž…๋‹ˆ๋‹ค.
    • ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. nsysctl 1.0, ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜๋Š” /sbin/sysctl๊ณผ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. libxo ์ถœ๋ ฅ์„ ์œ„ํ•œ ํ™•์žฅ๋œ ์˜ต์…˜ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Nsysctl์„ ์‚ฌ์šฉํ•˜๋ฉด sysctl ๊ฐ’์˜ ์ƒํƒœ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ตฌ์กฐํ™”๋œ ํ˜•์‹์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. XML, JSON ๋ฐ HTML ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€