jiffies/HZ가 가동 시간과 일치하지 않는 이유는 무엇입니까?

jiffies/HZ가 가동 시간과 일치하지 않는 이유는 무엇입니까?

시스템 가동 시간은 에 저장됩니다 /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 * HZ5분 오프셋입니다.이런 식으로 커널은 항상 jiffy Flips를 테스트합니다.

따라서 300Hz의 경우4294877295

그 값에서 해당 값을 빼고 jiffiesHZ로 나누면 올바른 결과가 나옵니다.

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

이 정보의 대부분(모두?)은 다음에서 제공됩니다.

그러나 여기에 추가하는 것도 의미가 있을 수 있습니다.

관련 정보