디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[아무말] 바보도 이해하는 conservative 가버너 - 순한맛 개발

취붕이 2025.11.17 19:17:56
조회 35 추천 1 댓글 2
														

https://github.com/torvalds/linux/blob/master/drivers/cpufreq/cpufreq_conservative.c

 

원래 리눅스 갤에 올린걸 조금 리폼했다가, 프갤에 올린게 도배에 묻혀서 결국 여기까지 왔다.

일단 소스의 include구문들을 보자.


소스의 상단에, linux/slab.h라는 것이 있다.

slab이 무엇인지, slab, slub, slob 등 별 것이 다 있는데 여기선 일단 page 기반의 외부 단편화를 줄이기 위한 버디시스템들과 달리 slab이 쓰이는 이유만 볼 것이다.

어나니머스 마스크가 묘하게 컬트적이라 거슬리지만 글은 잘썼네.

https://jeongzero.oopy.io/132fed8f-5cfd-4f43-990c-61584744b4d0

 


간단히 말해 보자. 여러분에겐 색종이가 있다.

이 색종이는 10cm x 10cm이고, 여러분은 5cm x 10cm만큼 색칠하는 작업에 쓰였다.

또 그 다음에는 4cm x 10cm만큼 색칠.

얼마만큼 어떤 색종이에서 칠했는지 알고 싶다면(외부단편화 줄이기) 두 장을 쓰면 된다.

그러나 연속적으로, 최대한 한 장의 색종이 안에서 연속적으로 색칠하고 싶으면 이 때 색종이 한장으로 충분하다.

애초에 우리는 짧은 가버너 코드를 위해 크기가 작은 자료들만 조금씩 소수의 페이지에 몰텐데, 저기있는거 써야지 뭐. 내부 단편화 막는게 중요.


이 색종이(메모리 페이지)를 미리 작은 조각들로 나누어 같은 크기의 커널 객체들을 채워 넣으면, 작은 객체를 할당할 때마다 4KB 페이지 전체를 낭비하는 내부 단편화를 줄일 수 있다.

또한, 한 번 사용했던 색종이 조각(객체)을 버리지 않고 깨끗하게 정리해뒀다가 다시 쓰면, 매번 새 색종이 뭉치(버디 시스템)에 가서 새 페이지를 얻고 초기화하는 오버헤드를 없앨 수 있어서 빨라진다. 그래서 kzalloc같은 함수를 쓰기 위해 linux/slab.h를 쓰는 것은 이와 같은 까닭을 가진다.



39b5c52be78376b660b8f68b12d21a1d56162b23be


down_skip은 샘플링을 한 번 할때마다 카운터가 증가되는데,

DEF_SAMPLING_DOWN_FACTOR보다 이 값이 작으면 현재 부하 상황을 받아오지도 주파수를 내리지도 않고 일찍 종료한다.

DEF_FREQUENCY_UP_THRESHOLD는 기록된 부하 상황이 이 threshold를 지나면 주파수를 올린다는 뜻.

conservative는 서서히 스텝을 올리고 내리기 때문에 대기 시간(idle period)동안 한 스텝씩 주파수 테이블에서 올리고 낮춘다.



39b5c52be78076b660b8f68b12d21a1dc106760f45

ignore_nice_load_store는 말그대로 nice 우선순위를 무시할지 말지에 대해서 상태 저장을 하는 것인데...

한마디로 ignore nice load 한다는건 프로세스의 우선 순위 등을 고려하지 않고 부하를 계산하겠다, 그런거다.

39b5c52be78076b660b8f68b12d21a1dc106760f45

frequency step을 저장하는 함수가 있다.

주파수 발자국? 뭐라는거야? 싶지만 말 그대로다.

주파수 테이블에서 얼마만큼 주파수를 올리고 내릴지 "발자국"을 저장하는게 맞다.

정해진 발자국만큼만 움직이니, 튜닝을 하고싶다면 이 발자국을 부하 상황에 맞게 조정해도 된다.


그러니 이 가버너는 완만한 언덕을 천천히 오르내리는것처럼 동작한다고 보면 된다.

커널에서 현재 부하량을 바로 가져와서 반영시키는 schedutil 등과 비교하자면 나이많은 고령자가 천천히 등반하는걸 생각하면 된다.



2ebcc224eadc70f727f1c6bb11f11a39790728293d06ee2b3e



down_skip은 샘플링을 한 번 할때마다 카운터가 증가되는데,

DEF_SAMPLING_DOWN_FACTOR보다 이 값이 작으면 현재 부하 상황을 받아오지도 주파수를 내리지도 않고 일찍 종료한다.

DEF_FREQUENCY_UP_THRESHOLD는 기록된 부하 상황이 이 threshold를 지나면 주파수를 올린다는 뜻.

conservative는 서서히 스텝을 올리고 내리기 때문에 대기 시간(idle period)동안 한 스텝씩 주파수 테이블에서 올리고 낮춘다.
^
요놈 들어가있다.

load 가 DEF_SAMPLING_DOWN_THRESHOLD보다 부하 낮고 down_skip 조건에서 일찍 리턴 안되었을때 내려가고

DEF_FREQUENCY_UP_THRESHOLD보다 높을때 스텝 올린다.

절대 DOWN_FACTOR랑 DOWN_THRESHOLD 헷갈리지 말자.



================생각할거리===================

일단 나는 명문대생도 아니고 평범한 지방대생이다. 나쁘게 말하면 잡대 중의 잡대다.

솔직히 내가 생각해도 거의 경계선 아닌가? 싶을 정도로 난 멍청한거같다.

그런 내 콩알만한 두뇌로 생각해볼만한 거리를 만들고, 또 구현하며 가지고 놀았던 것은 이러하다.


- 전류 공급원이 AC인지 배터리인지 구분해서 배터리일때는 up/down threshold를 보다 보수적으로 잡아서 최대한 주파수 변경을 더디게 해보자.

- load를 지수이동평균으로 누적해서 누적된 로드값을 사용해서 더 보수적으로 만들어보자. 잠깐 부하가 튀는 상황에서 평활 가능하다.

- 현재 누적 부하와 직전 누적 부하의 이동량을 비교해서, 급격한 부하 상황시에는 공격적이고 실시간성을 띄는 알고리즘을 채택하여 더 보수적으로 변한 전력소모를 상쇄하자.


사람에 따라서는 나처럼 이동식 기기들을 위한 튜닝을 할 수도 있고, 게이밍을 위한 공격적인 튜닝을 할 수도 있다.

그런데 게이밍은 schedutil쓰면 되고 GPU의존도가 높아서 누가 하려고 할지 모르겠네..


아무튼 conservative는 비교적 이와 같이 쉬운 구조로 되어있고, 내가 언급한 흐름대로 코드를 읽어보면 몇 줄 되지 않는다.


리눅스를 몇 년 정도 사용한 중급 유저라면 튜닝하는 데 별 어려움은 없을 것으로 보인다.

원래는 리눅스갤에 올렸는데, 프로그래밍 성격이 강해서 살을 붙여서 여기에 올린다.


P.S) 초보적인 내용이고, 부정확할 수 있습니다.

자세한 것은 ChatGPT에게..


추천 비추천

1

고정닉 0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
- 설문 대박 날 것 같아서 내 꿈에 나와줬으면 하는 스타는? 운영자 25/11/17 - -
- AD 놀거리, 트래블 BLACK FRIDAY 운영자 25/11/21 - -
- AD 엑셀 방송 여기서 즐겨요~! 운영자 25/10/24 - -
42 오늘코 14큐브맵 취붕이 11.21 5 0
41 오늘코 13굴절 취붕이 11.20 10 0
40 아무말 램이 안닳는 기기랭 취붕이 11.19 16 0
39 오늘코 12빛의반사 취붕이 11.19 19 0
38 아무말 여긴 디시의 오키인가요 [2] 취붕이 11.18 42 0
37 아무말 알고리즘, ctf나 워게임푸는데 ai 뇌위탁하는놈들은 뭐노 [1] 취붕이 11.18 41 0
아무말 바보도 이해하는 conservative 가버너 - 순한맛 개발 [2] 취붕이 11.17 35 1
35 아무말 안녕하세요 [1] 취붕이 11.17 26 0
34 아무말 아아 그냥 완전 익명갤이네 [2] 취붕이 11.17 63 0
33 아무말 11안티엘리어싱 취붕이 11.17 90 0
32 아무말 10텍스처링 취붕이 11.15 32 0
31 아무말 9선형보간 취붕이 11.14 41 0
30 아무말 8그림자그리기 취붕이 11.13 34 0
29 아무말 7삼각형그리기 취붕이 11.12 26 0
28 아무말 6원근투영과 거리비교 취붕이 11.06 36 1
27 아무말 5조명효과 취붕이 11.05 42 0
25 아무말 코딩이라 취붕이 11.04 60 0
24 아무말 4광선과 구의 충돌 취붕이 11.03 69 0
23 아무말 긍대 낭 러스트하려고해동 고민대능게 [8] 취붕이 10.30 195 0
22 아무말 3좌표계변환 [2] 취붕이 10.30 311 0
21 아무말 2원그리기 [2] 취붕이 10.28 216 0
20 아무말 안녕하세요 [1] 취붕이 10.27 169 0
19 아무말 취미로 라이브러리 개발 [2] 취붕이 10.26 261 0
18 아무말 여러분 컴파일러가 어는 거 보신 적 있으십니까 [2] 취붕이 10.26 286 1
17 아무말 또찌라이브러리강 2011년부터잇엇구낭 취붕이 10.25 113 0
16 아무말 [1] 취붕이 10.25 213 1
15 아무말 무씨 아침엥 이겅 코드추가햇어용 [2] 취붕이 10.25 255 0
14 아무말 취붕이라 하니까 취준해야할거같음 [2] 취붕이 10.25 224 0
13 아무말 닉네잉 자기가설정할수잇게바꿔줭 취붕이 10.25 132 0
12 아무말 아닝 완장앙 너 C엉어해봣엉? [2] 취붕이 10.25 309 0
11 아무말 북딱 취붕이 10.25 101 0
10 아무말 마갤이랑 이름 겹쳐서 망함 취붕이 10.25 158 0
9 아무말 glm에서 벡터 사용하기 [2] Mosaic갤로그로 이동합니다. 10.25 327 3
8 아무말 미니갤은 첨인데 [2] ㅇㅇ(122.199) 10.25 236 0
7 아무말 집들이 왔습니다 [2] ㅇㅇ(122.199) 10.25 170 0
6 아무말 대 재 명 [1] 노예갤로그로 이동합니다. 10.25 208 0
5 아무말 흥갤태스트 [1] ㅇㅇ(223.38) 10.25 205 13
4 아무말 이재명 ㅇㅇ(118.235) 10.25 114 1
3 아무말 축하합니다 [1] ㅆㅇㅆ(124.216) 10.25 137 0
2 아무말 뉴프로 많이 이용해주세요 [3] 헬마스터갤로그로 이동합니다. 10.25 176 0
1 아무말 야 취미코딩 가즈아 Mosaic갤로그로 이동합니다. 10.25 125 0
1
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2