Websockify: numpy ์‚ฌ์šฉ๋ฒ• ๋ฐ ๊ถŒ์žฅ ์‚ฌํ•ญ ์žฌ๊ณ 

์— ๋งŒ๋“  2013๋…„ 04์›” 19์ผ  ยท  2์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: novnc/websockify

ํ˜„์žฌ websockify/websocket.py๋Š” "numpy"๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ : 'numpy' ๋ชจ๋“ˆ ์—†์Œ, HyBi ํ”„๋กœํ† ์ฝœ์ด ๋” ๋Š๋ฆฌ๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”๋จ

์ด๊ฒƒ์€ ๋‹ค์†Œ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์šฐ์„ , HyBi๋Š” ํ™•์‹คํžˆ "๋น„ํ™œ์„ฑํ™”"๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •๋ง ๋Š๋ฆฐ๊ฐ€์š”? ๋‚˜๋Š” noVNC๋กœ ๋ช‡ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ๋†’์€ ํ”„๋ ˆ์ž„ ์†๋„๋กœ Youtube ๋น„๋””์˜ค๋ฅผ ์žฌ์ƒํ•  ๋•Œ์—๋„ websocket.py๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” CPU๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "์ƒ์œ„" ๋ชฉ๋ก์—๋Š” ๊ฑฐ์˜ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์‹ค์ œ ์ธก์ •์ด ์ด๋ฃจ์–ด์กŒ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰์„ ํ•ด๋ณด์•˜์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค(numpy ๋ฌธ์ œ ์ œ์™ธ...). IMHO, numpy๊ฐ€ ์ƒ๋‹นํ•œ ์ฐจ์ด๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์„ ์ธก์ •ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ํ‘œ์ค€ Python ๊ธฐ๋Šฅ๋งŒ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹๊ณ  ๊นจ๋—ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

"๋Š๋ฆฌ๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”๋œ" ๋ถ€๋ถ„์€ websocket.py ์ƒ๋‹จ์—์„œ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํƒ์ ์ด๊ณ  ํ™•์ธ๋˜๋Š” 4๊ฐœ์˜ ๋‹ค๋ฅธ python ๋ชจ๋“ˆ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ssl ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด TLS/wss๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ‘ธ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

Numpy๊ฐ€ ํ™•์‹คํžˆ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. tests/latency.py + tests/latency.html ํ…Œ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค(10ms ์ „์†ก ์ง€์—ฐ ๋ฐ localhost์—์„œ ์‹คํ–‰).

ํŒจํ‚ท ํฌ๊ธฐ 2000๋ฐ”์ดํŠธ:

  • numpy๋ฅผ ์‚ฌ์šฉํ•œ ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 0.8ms
  • numpy๊ฐ€ ์—†๋Š” ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 1.6ms

ํŒจํ‚ท ํฌ๊ธฐ 20000๋ฐ”์ดํŠธ:

  • numpy๋ฅผ ์‚ฌ์šฉํ•œ ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 2.5ms
  • numpy๊ฐ€ ์—†๋Š” ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 9.2ms

ํŒจํ‚ท ํฌ๊ธฐ 100000๋ฐ”์ดํŠธ:

  • numpy๋ฅผ ์‚ฌ์šฉํ•œ ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 6.3ms
  • numpy๊ฐ€ ์—†๋Š” ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 40.1ms

๋˜ํ•œ ํŒจํ‚ท ํฌ๊ธฐ๊ฐ€ 100kb์ธ ๊ฒฝ์šฐ numpy๊ฐ€ ์—†์œผ๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด 6๋ฐฐ ๋” ๋†’์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„œ๋ฒ„๊ฐ€ ๋’ค์ณ์ง€๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์ค‘์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐฑ์˜คํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

numpy๋Š” ์‹ค์ œ๋กœ ํด๋ผ์ด์–ธํŠธ->์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ๋งˆ์Šคํ‚น์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ noVNC์™€ ๊ฐ™์€ ์šฉ๋„์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ websockify๋Š” noVNC๋งŒ์„ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ numpy๋Š” ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

"๋Š๋ฆฌ๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”๋œ" ๋ถ€๋ถ„์€ websocket.py ์ƒ๋‹จ์—์„œ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํƒ์ ์ด๊ณ  ํ™•์ธ๋˜๋Š” 4๊ฐœ์˜ ๋‹ค๋ฅธ python ๋ชจ๋“ˆ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ssl ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด TLS/wss๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ‘ธ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

Numpy๊ฐ€ ํ™•์‹คํžˆ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. tests/latency.py + tests/latency.html ํ…Œ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค(10ms ์ „์†ก ์ง€์—ฐ ๋ฐ localhost์—์„œ ์‹คํ–‰).

ํŒจํ‚ท ํฌ๊ธฐ 2000๋ฐ”์ดํŠธ:

  • numpy๋ฅผ ์‚ฌ์šฉํ•œ ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 0.8ms
  • numpy๊ฐ€ ์—†๋Š” ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 1.6ms

ํŒจํ‚ท ํฌ๊ธฐ 20000๋ฐ”์ดํŠธ:

  • numpy๋ฅผ ์‚ฌ์šฉํ•œ ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 2.5ms
  • numpy๊ฐ€ ์—†๋Š” ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 9.2ms

ํŒจํ‚ท ํฌ๊ธฐ 100000๋ฐ”์ดํŠธ:

  • numpy๋ฅผ ์‚ฌ์šฉํ•œ ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 6.3ms
  • numpy๊ฐ€ ์—†๋Š” ํ‰๊ท  ์™•๋ณต ๋Œ€๊ธฐ ์‹œ๊ฐ„ 40.1ms

๋˜ํ•œ ํŒจํ‚ท ํฌ๊ธฐ๊ฐ€ 100kb์ธ ๊ฒฝ์šฐ numpy๊ฐ€ ์—†์œผ๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด 6๋ฐฐ ๋” ๋†’์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„œ๋ฒ„๊ฐ€ ๋’ค์ณ์ง€๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์ค‘์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐฑ์˜คํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

numpy๋Š” ์‹ค์ œ๋กœ ํด๋ผ์ด์–ธํŠธ->์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ๋งˆ์Šคํ‚น์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ noVNC์™€ ๊ฐ™์€ ์šฉ๋„์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ websockify๋Š” noVNC๋งŒ์„ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ numpy๋Š” ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

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