전 세계 전력망에 1분 주기 주파수 진동, 원인은 UPS와 배터리 저장장치의 동기화된 자가진단
- 전 세계 전력망 주파수 시계열에서 1분 주기 진동 패턴이 꾸준히 관측됐지만 그동안 원인이 설명되지 않았음
- 원인은 디지털 제어 에너지 기기, 특히 무정전 전원장치(UPS)와 배터리 에너지 저장장치(BESS)의 시계 동기화 제어 소프트웨어가 매분 전력 수요 피크를 만들어 전압 레벨을 넘어 전파되는 것임
- 이 진동의 진폭은 최근 몇 년간 여러 전력망에서 크게 커졌고, 수력발전 설비의 마모에 영향을 주면서 더 엄격한 주파수 제어 요구로 이어짐
- 제조사가 배터리 EMS의 주기적 자가진단이 전류 피크의 원인임을 확인했고, 다른 상용 UPS 매뉴얼에도 배터리 회로를 60초마다 1초씩 시험한다고 적혀 있음
- 배터리 저장장치, 데이터센터, IoT가 빠르게 늘면 이런 사이버-물리 전력 진동이 더 커질 수 있어 제어 설계 개선이 필요함
Hacker News 의견들
우리 회사 APC UPS들은 주 1회 자가진단 도는데 요즘 장비는 훨씬 자주 하나 봐. 게다가 다 인터넷에 붙어 있으니 시계가 수백 ms 안에서 맞춰지는 거고. 나도 일요일 아침 정각에 도는 GitHub Actions 잔뜩 있는데, 정각이나 :15, :30, :45에 몰리는 게 분명히 영향이 있을 듯.
그래서 systemd에 RandomizedDelaySec가 있는 거임. N초로 잡아두면 트리거 시각에서 최대 N초 늦게 시작하고 매일 달라짐. 하루 한 번 도는 잡이면 1800초쯤 잡아두면 스파이크가 확 퍼짐.
기어도 같은 문제라 톱니 수가 서로소가 아니면 마모가 한쪽으로 몰림. 타이머를 59.XXX초마다 돌려서 분침과 위상을 어긋나게 하거나, 첫 초기화 때 WAIT(RAND(60e6)) 마이크로초를 넣어 만 개가 동시에 시작하지 않게 하는 게 정석임. 자동 업데이트 주기가 17시간인 것도 24와 서로소라 그런 거고, 전원이나 인프라가 끊겼다 붙을 때 타이머가 동기화되는지도 꼭 테스트해봐야 함.
Wait(50+rand(10))이 1분 간격에 더 맞음. 원래 제안대로면 평균 30초 간격에 편차 17초고, 1분 주기에 랜덤 슬립을 넣으면 간격이 120초까지 벌어질 수 있음. 그리고 C rand는 통계적으로 문제가 있어서 쓰지 마셈.
59초로 해도 초 단위 정렬은 남음. 밀리초나 마이크로초 단위 소수로 가야 함.
동시 기동 돌입전류를 계산 안 한 장비가 너무 많음. 개별 브레이커는 버티게 잡아놨는데 메인 브레이커는 전부 동시에 켜지는 걸 못 버팀. 순차 기동 로직을 넣어야 하는데, 설계자가 다 생각했다고 설득하는 게 제일 힘든 싸움임.
UPS 제어 로직 때문이라는 결론엔 좀 못 미덥다. 그렇게 많은 제조사, 모델, 설정이 저렇게 정확히 맞춰지기 어렵고, FFT를 보면 하루나 주 단위가 아니라 하루 종일 계속 도는 주기 신호임. 외부 동기 신호 때문이라기보다 같은 그리드에 물려 있어서 서로 끌어당기는 injection locking 쪽이 더 그럴듯함.
외부 동기는 NTP임. 시계가 맞고 타이머로 동작이 예약되면 전 세계가 같이 움직임. 논문에도 제조사가 배터리 EMS의 주기적 자가진단이 원인이라고 확인해줬다고 나오고, 다른 UPS 매뉴얼에도 배터리 회로 테스트를 60초에 1초씩 한다고 적혀 있음.
그리드 공격은 IoT보다 컴퓨팅 인프라가 더 좋은 표적일지도. 토큰을 전략적으로 태우거나 악성 잡을 동기화해서 계통 주파수 제어의 공진점을 찾아내는 그림이 가능함. 실시간 주파수를 읽어서 그네 밀듯이 부하를 밀어주면 되고, 막으려면 현장이나 근처에 더미 부하나 분 단위 저장장치를 둬야 함.
수 MW는 노이즈 수준임. 알루미늄 제련소 하나가 통째로 붙었다 떨어져도 내 계통은 안 흔들림. 게다가 그리드 공진 주파수는 하나로 정해진 게 아니라 발전기, 송전선, 변압기가 붙었다 떨어지고 데워지면서 순간마다 바뀜. 그네 밀기 문제가 아님.
논문이 재밌긴 한데 UPS 자가진단이 정확히 뭘 하는지, 어떻게 계통을 흔드는지가 너무 뭉뚱그려져 있음. Figure 5b를 보면 건물 UPS가 매분 정확히 20A 스파이크를 만드는데 꽤 큰 값임. 관측된 주파수 교란은 1.5mHz로 0.003% 수준이라 아주 작긴 한데, 원인이 밝혀졌으니 제조사가 없애는 건 간단할 듯. 참고로 URL과 달리 Nature Energy임.
crontab에서 시작하는 게 너무 많은 듯. 공용 NTP 서버는 관리자들이 제대로 된 NTP 데몬 대신 ntpdate를 크론에 넣어서 매분 정각에 트래픽이 확 튐.