DevSleep과 RTD3에 대한 내용을 관련 문서를 보고 정리해보았습니다.
용어정리
- D0 - 장치가 켜져있거나 동작할 때의, 장치 전원. 시스템에서부터 full power를 공급받습니다.
- D0active - 소프트웨어에 의하여 장치가 구성되고 활성화 된 장치 전원 상태
- D3hot - 장치가 D3로 전환되었지만, 여전이 Vcc가 적용된 경우 발생하는 장치 전원 상태
- D3cold - 장치가 D3로 전환되었지만, Vcc가 적용되지 않는 경우 발생하는 장치 전원 상태
- HBA - Host Bus Adapter. SATA storage device와 commuication하는데 사용되는 host hardware
- IDENTIFY DEVICE - ATA/ATAPI command set을 통하여 정의된 명령. 호스트 시스템에서 저장 장치의 IDENTIFY DEVICE 데이터를 검색하는데 사용됩니다.
- PBA - 사전 부트 인증. 시스템 유저를 인증하고 저장 장치 잠금 해제하는데 사용되는 프로그램
- Runtime D3 (RTD3) - 플랫폼의 나머지 부분이 S0 상태에 있는 동안 장치를 D3 hot/cold 에 배치하는 것.
- S0 - 시스템 전원 상태. 시스템이 S0 상태에 있으면, 동작하는 상태입니다. 장치 상태는 OS에 의하여 각각 관리되고, 어떠한 상태에라도 있을 수 있습니다. (D0 or D3 or etc…)
- S3 - 시스템 전원 상태(=system sleeping state). 시스템 전원이 S3에 있는 동안에, 프로세서는 명령어를 수행하지 않고 전원은 장치들에서 제거됩니다. DRAM의 context는 유지됩니다. 몇몇 시스템의 BIOS들은 보통 S0로 갈 때, 초기화를 요구합니다.
- S4 - 시스템 전원 상태(=hibernation). DRAM context는 유지되지 않습니다. System BIOS는 시스템이 S0로 변화 될 때, 초기화를 진행하는 것을 요구합니다. System context는 비휘발성 메모리(=주기억장치)에 저장됩니다.
- S5 - 시스템 전원 상태. System context가 저장되지 않습니다.
- SET FEATURES - Host system이 특정 디바이스의 기능을 사용하도록 설정하는데 사용
- Zero Power ODD (ZPODD) - D3cold 상태에서 open/close event가 발생하면 D0으로 돌아가는 optical disk class
Overview
과거에, 플랫폼에 붙어있는 저장장치들은 플랫폼의 전원 상태 변경(아래의 3가지 상태)의 결과로 power off 상태로 변경되었습니다.
- platform hibernation
- platform standby
- platform off
전원 효율성
에 초점을 둔 모바일 장치들의 도입으로 인하여, 다른 플랫폼 컴포넌트들(USB, graphic, networking, etc…)의 전원을 관리해야 되는 새로운 플랫폼과 운영체제의 역할은 꽤 중요해졌습니다.
모바일 장치의 더 강력한 전원/배터리 수명 요구 사항을 충족하기 위하여 발전했습니다. 위에서 언급한 3개의 디바이스 전원 상태는 아래와 같습니다.
- Partial & Slumber : 기존 PHY에 전원이 남아 있고, 복구가 빠릅니다. 소비 전력 100mW 내외. 복귀 시간은 각각 10us, 10ms. 장치 컨트롤러 동작.
- DevSleep : DevSleep 인터페이스는 host는 전원 관리 상태인 Partial and Sluber과 전원 Off(RTD3) 사이의 중간 정도에 위치한 상태. 소비 전력은 5mW 이하. 복귀 시간은 20ms 이하. 서브 시스템까지 절전 관리 가능. 장치 컨트롤러 절전.
- RTD3 : 디바이스의 전원을 완전 차단하여 전력을 많이 절약하지만, 복구 시간이 오래 걸립니다.
새로운 전력 시스템은 오랜 시간 idle 상태인 스토리지 장치 및 스토리지 컨트롤러의 전원을 완벽하게 차단하는 시스템과 OS에 초점을 두고 있습니다. DevSleep과 RTD3가 모두 지원되면, 시스템이 동적이고 효율적인 방식으로 상황에 따라서 전력과 대기시간 중에서 더 나은 것을 선택합니다.
Device Sleep (DevSleep)
저전력 소비와 확장된 배터리 수명의 필요는 모바일 디바이스에서 매우 중요한 요소입니다. DevSleep은 SATA 스펙에서 새롭게 추가되었습니다. 이는 SATA 기반의 저장장치가 새로운 저전력 상태로 갈 수 있다는 것을 의미합니다.
Interface Power Management in SATA today
저전력 인터페이스로의 진입은 명령어에 즉각적으로 반응하기 어렵다는 것, 즉 느리다는 것을 의미합니다. 전원 공급이 Full일 때 보다 느릴 수 밖에 없는데, 전원 절약과 속도는 트레이드 오프라고 생각하면 됩니다.
Partial & Slumber 인터페이스 상태는 in band signaling
이라고 불려집니다. host와 device 사이에서 전원 상태를 변경하기 위하여 사용되는 명령어는 SATA bus로 전송됩니다.
in-band
SATA 전원 관리는 SATA PHY가 완벽하게 전원을 차단한 상태가 아닙니다. 상태 변경을 위하여 전원을 남겨두고 있어야합니다. 그러므로, Host가 SATA 인터페이스에서 추가적인 전원을 절약하기 위해서는, 아래의 2가지 중 하나를 만족해야 합니다.
- Host controller 측에서, 연관된 host port가 offline state로 변경되는 것입니다. 불행하게도, host SATA port가 offline 모드로 배치해도 연결된 저장장치의 PHY가 비슷한 상태로 가지는 않습니다.
- 완벽하게 SATA Device power off 한 상태. 하지만, 이 경우에는 long exit latency를 야기할 수 있습니다. 또, 전체 device의 전원을 껐다가 켜야 되기 때문에, Partial 나 Slumber 상태에서 유지하는 것 보다 더 많은 전력을 사용할 수 있습니다. device 전원의 제거는 RTD3(Runtime D3)라고 언급됩니다.
DevSleep
에서 추가로, hosts/devices에서 새로운 전원 관리 옵션이 있습니다. 이 옵션에서는 host와 device가 각각의 PHY 및 다른 링크 관련 회로의 전원을 내릴 수 있습니다. Devices는 DevSleep에 있는 동안 추가적인 sub-system의 전원을 끄도록 하여 전력을 더욱 절약할 수도 있습니다. 하지만, exit latency는 및 DevSleep 전환 에너지는 RTD3와 비교하여 더 낮습니다.
DevSleep 인터페이스는 host는 전원 관리 상태인 Partial and Sluber과 전원 Off(RTD3) 사이의 중간 정도에 위치하고 있습니다. 다른 sub-system 뿐 만 아니라 이제 host & device PHY가 완벽하게 전원을 끌 수 있는, low latency power mode로 전환할 수 있습니다. 하지만, 전체 대기 시간(RTD3)보다 Slumber에 훨씬 더 가까운 대기 시간을 유지합니다. DevSleep은 이 상태에 있는 동안 장치가 도달해야 할 전력을 명시하지는 않지만, 5mW 이하를 목표로 두고 있습니다.
DevSleep Theory of Operation
host와 저장장치 사이에 연결되어 있는 DEVSLP이라는 새로운 signal을 정의함으로서 DevSleep는 동작합니다. host가 DEVSLP 신호를 assert할 때, device는 DevSleep 인터페이스 전원 상태로 들어가게 됩니다. host가 DEVSLP 신호를 무효화하면, device는 DevSleep 상태에서 돌아옵니다. DevSleep 스펙에서는 DEVSLP 신호가 assert될 때, device가 실제로 어떤 활동을 할 지에 대하여 유연하게 구현하는 것을 허락합니다. 디바이스는 PHY의 전원을 완전 끌 수 있고, exit latency 요구사항을 만족시키는 다른 subsystem의 전원을 끌 수 있습니다.
Runtime D3 (RTD3)
새로운 DevSleep 특징이 효과적인 저전력과 exit latency 특징을 제공하지만, Vcc가 적용되는 한 전력은 계속해서 소모됩니다. 오래동안 idle 상태에 있는 장치에서 완벽한 전원의 제거를 하면, 가능한 최대의 전원 절약을 할 수 있습니다. (엄격한 전원 요구 사항이 있는 플랫폼에서)
시스템이 S0에 있는 동안에, 장치에서 전원을 완전하게 제거하는 것(D3cold)은 가능한 동작입니다. 이 상태를 Runtime D3 (RTD3)
라고 합니다. 이는 일반적으로 오랜 시간 동안 idleness state(유휴 상태)에 device가 있을 때, 전원을 보호하기 위해서 수행됩니다. RTD3 지원 기능은 양쪽 system 및 OS 지원에 의존적입니다(system과 OS에 의하여 달라집니다).
출처
- https://sata-io.org/sites/default/files/documents/SATADevSleep-and-RTD3-WP-037-20120102-2_final.pdf