Skip to content

Latest commit

ย 

History

History
105 lines (76 loc) ยท 4.99 KB

File metadata and controls

105 lines (76 loc) ยท 4.99 KB

์ œํ’ˆ ๋ช…์„ธ์„œ

๋ชฉํ‘œ

Awake๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ์‹คํ–‰ ์ค‘ ์•ฑ/์œˆ๋„์šฐ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ macOS ์œ ํœด ์ž ์ž๊ธฐ๋ฅผ ๋ง‰๋Š” ๋ฉ”๋‰ด๋ฐ” ์•ฑ์ด๋‹ค. ์ œํ’ˆ์€ ์‹ ๋ขฐ ๊ฐ€๋Šฅํ•œ ์ „์› assertion, ๋ช…ํ™•ํ•œ ์ƒํƒœ ํ‘œ์‹œ, ์ž๋™ ํ•ด์ œ, ํ™˜๊ฒฝ๋ณ„ ํ•œ๊ณ„ ์•ˆ๋‚ด์— ์ง‘์ค‘ํ•œ๋‹ค.

์‚ฌ์šฉ์ž ํ๋ฆ„

๋ณดํ˜ธ ์„ธ์…˜ ์‹œ์ž‘

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฉ”๋‰ด๋ฐ” ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ์ „์—ญ ๋‹จ์ถ•ํ‚ค๋ฅผ ๋ˆ„๋ฅธ๋‹ค.
  2. Awake๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์•ฑ๊ณผ ๊ฐ์ง€ ๊ฐ€๋Šฅํ•œ ์œˆ๋„์šฐ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•œ๋‹ค.
  3. ์‚ฌ์šฉ์ž๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋Œ€์ƒ์„ ์„ ํƒํ•œ๋‹ค.
  4. ์‚ฌ์šฉ์ž๊ฐ€ Start๋ฅผ ๋ˆ„๋ฅธ๋‹ค.
  5. Awake๊ฐ€ ์ „์› assertion์„ ์ƒ์„ฑํ•˜๊ณ  ์„ธ์…˜์„ active ์ƒํƒœ๋กœ ๋ฐ”๊พผ๋‹ค.
  6. ๋ฉ”๋‰ด๋ฐ”์— active ์ƒํƒœ์™€ ์„ ํƒ ๋Œ€์ƒ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

๋ณดํ˜ธ ์„ธ์…˜ ์œ ์ง€

  • Awake๋Š” ์„ ํƒ ๋Œ€์ƒ์˜ ํ”„๋กœ์„ธ์Šค ์ƒ์กด ์—ฌ๋ถ€๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•œ๋‹ค.
  • ์„ ํƒ ๋Œ€์ƒ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‚ด์•„ ์žˆ์œผ๋ฉด ์„ธ์…˜์€ ์œ ์ง€๋œ๋‹ค.
  • ์„ ํƒ ๋Œ€์ƒ์ด ๋ชจ๋‘ ์ข…๋ฃŒ๋˜๋ฉด ์„ธ์…˜์„ ์ž๋™ ์ข…๋ฃŒํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ๋ฉ”๋‰ด๋ฐ”์—์„œ ์–ธ์ œ๋“  ์ˆ˜๋™ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ „์› ๊ด€๋ จ ์„ค์ •์„ ๋ฐ”๊พธ๋ฉด active ์„ธ์…˜์˜ assertion์— ์ฆ‰์‹œ ๋ฐ˜์˜ํ•œ๋‹ค.

๋ณดํ˜ธ ์„ธ์…˜ ์ข…๋ฃŒ

  • ์ž๋™ ์ข…๋ฃŒ ์กฐ๊ฑด: ์„ ํƒํ•œ ๋Œ€์ƒ์ด ๋ชจ๋‘ ์ข…๋ฃŒ๋จ
  • ์ˆ˜๋™ ์ข…๋ฃŒ ์กฐ๊ฑด: ์‚ฌ์šฉ์ž๊ฐ€ Stop Keeping Awake ์„ ํƒ
  • ์•ฑ ์ข…๋ฃŒ ์กฐ๊ฑด: Awake ์ข…๋ฃŒ ์‹œ assertion์„ ๋ฐ˜๋“œ์‹œ ํ•ด์ œ

๋ฒ”์œ„

ํฌํ•จ

  • macOS ๋ฉ”๋‰ด๋ฐ” ์•ฑ
  • ์‹คํ–‰ ์ค‘ ์•ฑ ๋ชฉ๋ก ํ‘œ์‹œ
  • ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์•ฑ๋ณ„ ์œˆ๋„์šฐ ๋ชฉ๋ก ํ‘œ์‹œ
  • ๋‹ค์ค‘ ์„ ํƒ
  • ์ „์› assertion ์ƒ์„ฑ/ํ•ด์ œ
  • ์„ ํƒ ๋Œ€์ƒ ์ข…๋ฃŒ ๊ฐ์ง€
  • ์„ธ์…˜ ์ƒํƒœ ๋ฉ”๋‰ด๋ฐ” ํ‘œ์‹œ
  • ๊ถŒํ•œ ๋ถ€์กฑ ์•ˆ๋‚ด
  • ๊ธฐ๋ณธ ์„ค์ • ์ €์žฅ
  • ๋ฎ๊ฐœ ๋‹ซํž˜ ์ƒํƒœ์—์„œ ๋ณดํ˜ธ ์„ธ์…˜์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ๊ธฐ๋ฐ˜ ๊ณ ๊ธ‰ ๋ชจ๋“œ
  • ๊ณ ๊ธ‰ ๋ชจ๋“œ ์ข…๋ฃŒ ํ›„ macOS sleep ์„ค์ • ๋ณต๊ตฌ

์ œ์™ธ

  • private API ์‚ฌ์šฉ
  • ์ปค๋„ ํ™•์žฅ ๋˜๋Š” ์‹œ์Šคํ…œ ํ™•์žฅ ์„ค์น˜
  • ์ €๋ฐฐํ„ฐ๋ฆฌ, ์—ด ๋ณดํ˜ธ, MDM ์ •์ฑ…, ๊ฐ•์ œ ์ข…๋ฃŒ ๊ฐ™์€ ์‹œ์Šคํ…œ ๋ณดํ˜ธ ๋™์ž‘ ์šฐํšŒ
  • ์ž‘์—… ๋‚ด์šฉ ๋ถ„์„
  • ํ„ฐ๋ฏธ๋„/tmux ์„ธ์…˜ ๋‚ด๋ถ€ ํ”„๋กœ์„ธ์Šค ์ถ”์ 
  • ์•ฑ๋ณ„ ์ž๋™ ์ถ”์ฒœ
  • iCloud ๋™๊ธฐํ™”

๋ฎ๊ฐœ ๋‹ซํž˜ ์ •์ฑ…

Awake๋Š” ์ผ๋ฐ˜ ์„ธ์…˜์—์„œ macOS ๊ณต๊ฐœ IOKit assertion์„ ์‚ฌ์šฉํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ lid-closed ๋ชจ๋“œ๋ฅผ ์ผœ๋ฉด ์ตœ์ดˆ 1ํšŒ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ์š”์ฒญํ•ด LaunchDaemon helper๋ฅผ ์„ค์น˜ํ•œ๋‹ค. helper๋Š” ์„ธ์…˜ ์‹ ํ˜ธ ํŒŒ์ผ์„ ๊ฐ์‹œํ•˜๊ณ , ์„ธ์…˜ ๋™์•ˆ pmset -a disablesleep 1์„ ์ ์šฉํ•œ ๋’ค ๋ณดํ˜ธ ๋Œ€์ƒ์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์„ธ์…˜์„ ๋ฉˆ์ถ”๊ฑฐ๋‚˜ ์•ฑ์ด ์ข…๋ฃŒ๋  ๋•Œ pmset -a disablesleep 0์œผ๋กœ ๋ณต๊ตฌํ•œ๋‹ค.

์ œํ’ˆ์ด ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ์ด๋‹ค.

  • ์„ ํƒ ๋Œ€์ƒ์ด ์‚ด์•„ ์žˆ๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž ์œ ํœด๋กœ ์ธํ•œ ์‹œ์Šคํ…œ ์ž ์ž๊ธฐ๋ฅผ ๋ฐฉ์ง€
  • ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์‚ฌ์šฉ์ž ์œ ํœด๋กœ ์ธํ•œ ๋””์Šคํ”Œ๋ ˆ์ด ์ž ์ž๊ธฐ๋ฅผ ๋ฐฉ์ง€
  • closed-display ํ™˜๊ฒฝ์„ ์œ„ํ•ด public NetworkClientActive assertion์„ best-effort๋กœ ํ•จ๊ป˜ ์‚ฌ์šฉ
  • lid-closed ๋ชจ๋“œ์—์„œ๋Š” ์‹œ์Šคํ…œ sleep disabled ์„ค์ •์œผ๋กœ ๋ฎ๊ฐœ ๋‹ซํž˜ sleep์„ ๋ฐฉ์ง€
  • lid-closed ์„ธ์…˜ ์ค‘ ์‹ค์ œ ๋ฎ๊ฐœ ๋‹ซํž˜ ์ด๋ฒคํŠธ ๋˜๋Š” clamshell ์ƒํƒœ ๋ณ€๊ฒฝ์ด ํ™•์ธ๋˜๋ฉด ํ™”๋ฉด๋ณดํ˜ธ๊ธฐ๋ฅผ ์‹คํ–‰ํ•ด ๋‹ค์‹œ ์—ด์—ˆ์„ ๋•Œ ์ž ๊ธˆ ํ™”๋ฉด ํ๋ฆ„์„ ์œ ๋„
  • ๋ฉ”๋‰ด๋ฐ”์—์„œ macOS sleep ์„ค์ •์„ ์ˆ˜๋™ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์•ก์…˜ ์ œ๊ณต

์ œํ’ˆ์ด ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋‹ค์Œ์ด๋‹ค.

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ž ์ž๊ธฐ๋ฅผ ์„ ํƒํ•œ ์ƒํƒœ์—์„œ ๊ณ„์† ์‹คํ–‰
  • ๋ฐฐํ„ฐ๋ฆฌ ๋ฐฉ์ „, ์ €๋ฐฐํ„ฐ๋ฆฌ ๊ฐ•์ œ ์ข…๋ฃŒ, ์—ด ๋ณดํ˜ธ, ํšŒ์‚ฌ ๊ด€๋ฆฌ ์ •์ฑ…์„ ์šฐํšŒํ•œ ๊ณ„์† ์‹คํ–‰

์ƒํƒœ ๋ชจ๋ธ

  • idle: ๋ณดํ˜ธ ์„ธ์…˜ ์—†์Œ
  • selecting: ๋Œ€์ƒ ์„ ํƒ ํ™”๋ฉด ์—ด๋ฆผ
  • active: assertion์ด ์ผœ์ ธ ์žˆ๊ณ  ๋Œ€์ƒ ๊ฐ์‹œ ์ค‘
  • stopping: assertion ํ•ด์ œ ์ค‘
  • error: assertion ์ƒ์„ฑ ์‹คํŒจ, ๊ถŒํ•œ ๋ถ€์กฑ, ๊ฐ์‹œ ์‹คํŒจ ๋“ฑ ์‚ฌ์šฉ์ž ์กฐ์น˜ ํ•„์š”

์„ธ์…˜ ์ข…๋ฃŒ ๊ทœ์น™

์„ ํƒํ•œ ๋Œ€์ƒ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‚ด์•„ ์žˆ์œผ๋ฉด ๋ณดํ˜ธ ์„ธ์…˜์„ ์œ ์ง€ํ•œ๋‹ค. ๋ชจ๋“  ๋Œ€์ƒ์ด ์ข…๋ฃŒ๋˜๋ฉด ํ•ด์ œํ•œ๋‹ค.

์œˆ๋„์šฐ ๋‹จ์œ„ ์„ ํƒ์€ UI์—์„œ ์ œ๊ณตํ•˜๋˜, ํ˜„์žฌ ์ข…๋ฃŒ ๊ฐ์ง€๋Š” ์•ฑ ํ”„๋กœ์„ธ์Šค ๋‹จ์œ„๋กœ ์‹œ์ž‘ํ•œ๋‹ค. ์œˆ๋„์šฐ ๋‹จ์œ„ ์ž๋™ ์ข…๋ฃŒ๋Š” macOS ์•ฑ๋ณ„ ์œˆ๋„์šฐ ๋™์ž‘ ์ฐจ์ด๊ฐ€ ํฌ๋ฏ€๋กœ ๋ณ„๋„ ๊ธฐ๋Šฅ์œผ๋กœ ์ •๊ตํ™”ํ•œ๋‹ค.

์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€ ์›์น™

  • lid-closed ๋ชจ๋“œ๋Š” ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹œ์Šคํ…œ ์ „์ฒด sleep ์„ค์ •์„ ๋ฐ”๊พธ๋ฉฐ, ์„ธ์…˜ ์ข…๋ฃŒ ์‹œ ๋ณต๊ตฌ๋œ๋‹ค๊ณ  ์•ˆ๋‚ดํ•œ๋‹ค.
  • ์ตœ์ดˆ 1ํšŒ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ helper๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ดํ›„ ์„ธ์…˜ ์‹œ์ž‘/์ข…๋ฃŒ๋Š” ๋ฐ˜๋ณต ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด ์ฒ˜๋ฆฌ๋œ๋‹ค๊ณ  ์•ˆ๋‚ดํ•œ๋‹ค.
  • ๊ฐ€๋ฐฉ์ด๋‚˜ ๋ฐ€ํ๋œ ๊ณต๊ฐ„์—์„œ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ  ์•ˆ๋‚ดํ•œ๋‹ค.
  • ์‹คํŒจํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ์— ํ•  ํ–‰๋™์„ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ์“ด๋‹ค.

๊ธฐ๋ณธ ์„ค์ •

  • ๊ธฐ๋ณธ assertion ๋ชจ๋“œ: system sleep ๋ฐฉ์ง€ + display sleep ๋ฐฉ์ง€ + closed-display best-effort ์ผฌ + lid-closed ๋ชจ๋“œ ์ผฌ
  • ์ฒดํฌ ๊ฐ„๊ฒฉ: 5์ดˆ
  • lid-closed ์„ธ์…˜ ์ตœ๋Œ€ ์‹œ๊ฐ„: 240๋ถ„
  • lid-closed ๋ฐฐํ„ฐ๋ฆฌ ์•ˆ์ „ ์ข…๋ฃŒ ๊ธฐ์ค€: 20%
  • ์„ธ์…˜ ์ข…๋ฃŒ ํ›„ ์•Œ๋ฆผ: ์ผฌ
  • ๋ฉ”๋‰ด๋ฐ” active ํ‘œ์‹œ: ์ผฌ
  • ์–ธ์–ด: ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ์–ธ์–ด๋ฅผ ๋”ฐ๋ฆ„. ์„ค์ •์—์„œ ํ•œ๊ตญ์–ด, ์ค‘๊ตญ์–ด, ์ผ๋ณธ์–ด, ์˜์–ด๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ