Title
#zephyr
u

권경환

08/24/2021, 8:16 AM
시스템 틱이 어떻게 업데이트되나 살펴보다가 “SMP 인 경우” 의문점이 하나 생겼습니다: 하드웨어 클럭 사이클을 시스템 틱으로 announce 하는
sys_clock_announce()
는 하나의 core 에서만 호출되어야 하지 않나요?
arm_arch_timer.c
xtensa_sys_timer.c
다른 두개의 아키텍처에서 확인해보니 core 마다 announce 하게 되어 있던데 제가 뭔가를 놓치고 있는걸까요? 모든 core 에서 announce 하게 되면 시스템 틱이 실제 흐른 시간보다 core 수만큼 많이 흐르게 될 것 같은데요. 😓
👍 1
Stephanos Ioannidis

Stephanos Ioannidis

08/24/2021, 9:42 AM
시스템 틱이 실제 흐른 시간보다 더 흐르지는 않고 대신 CPU가 wake-up하지 않아야될 때도 wakeup하는 문제는 있습니ㅏㄷ.
9:43 AM
현재 Zephyr 커널 설계 구조적인 문제이기는 한데 tickless 커널에서 timeout이 모든 CPU에 공통으로 관리되기 때문에 CPU 들 중 하나라도 wakeup timeout이 해당되는 것이 있다면 모든 CPU가 일괄 wakeup하게 되어있습니다.
👍 1
u

권경환

08/24/2021, 10:46 AM
와, 감사합니다. 덕분에 이해됐습니다. ‘시간이 더 흐를 것 같다’ 했던건 제가 per-cpu counter 로 생각해서 그랬었어요. 근데 PR에 커밋 이력이 남으면 더 좋을 것 같은데, force-push 되는 게 좀 아쉽네요.
10:47 AM
👍
10:55 AM
그리고 이건 중요한 건 아닌데,
z_kernel
구조체의
timeout_q
를 사용하지 않고 timeout.c 모듈의
timeout_list
static 변수를 쓰는 이유가 있는지도 궁금합니다.
👍 1
11:03 AM
이제는 더이상 사용되지 않는 구조체입니다
11:04 AM
몇년전에 timeout.c 전에 sys_clock.c라고 비슷한 매커니즘이 있었는데 그 때 사용했던 것이네요
11:04 AM
잊고 삭제안한듯 ..
u

권경환

08/24/2021, 11:05 AM
네,
timeout_list
용도로
timeout_q
멤버변수를
z_kernel
구조체에 선언해둔 것 같은데, 까먹고
timeout_list
를 사용했나 생각했었어요.