시스템 가동 시간은 에 저장됩니다 /proc/uptime
. 아시다시피 Linux 커널에는 jiffies
매개변수로 지정된 각 타이머 인터럽트에 따라 증가하는 변수가 있습니다 HZ
. HZ
다음 명령으로 값을 얻었습니다 .
$ zcat /proc/config.gz | grep CONFIG_HZ=
CONFIG_HZ=300
내 컴퓨터에서는 300과 같습니다. 그래서 jiffies
주어진 값을 /proc/timer_list
이 숫자로 나눕니다 .
# cat /proc/timer_list | grep -E "^jiffies" | head -n1 && cat /proc/uptime
jiffies: 4356505571
516409.13 1432145.01
같은 숫자가 나오리라 예상했지만 결과는 전혀 달랐습니다. 제 말 4356505571/300=14521685.23
은 꽤 가까워야 한다는 뜻인데 516409.13
그렇지 않아요!
jiffies
내가 모르는 어떤 아이디어가 숨어 있는 걸까요 ?
답변1
일부/많은(전부는 아님) 최신 커널은 jiffies에 오프셋을 추가합니다. 이는 기본적으로 매우 큰 오프셋입니다.4294967295 - (300 * HZ)
이는 300 * HZ
5분 오프셋입니다.이런 식으로 커널은 항상 jiffy Flips를 테스트합니다.
따라서 300Hz의 경우4294877295
그 값에서 해당 값을 빼고 jiffies
HZ로 나누면 올바른 결과가 나옵니다.
4356505571 - 4294877295 = 61628276
61628275 / 300 = 205427.587
여전히 질문의 값과 일치하지 않습니다.
그러나 댓글에서 OP는 90초 후에 jiffies가 4294904295라고 말했습니다.
4294904295 - 4294877295 = 27000
27000 / 300 = 90.000
간단하게 바꿔보세요공식
uptime = (jiffies - (4294967295 - (300 * HZ))) / HZ
또는
uptime = (jiffies - 4294967295) / HZ - 300
참고: OpenWRT 라우터를 제외한 모든 Linux 시스템은 오프셋을 사용합니다. 최신 릴리스의 커널 버전이 5.4임에도 불구하고 가동 시간과의 jiffies 관계는 예상되는 OP와 같습니다.
uptime = jiffies / HZ
이 정보의 대부분(모두?)은 다음에서 제공됩니다.
- https://stackoverflow.com/a/63176716/10549313- @firo에 대한 크레딧
- 그리고https://stackoverflow.com/a/33612184/10549313- 크레딧은 @ZanLynx로 이동합니다.
그러나 여기에 추가하는 것도 의미가 있을 수 있습니다.