리눅스 커널 내부구조 104p까지 진행
cfs 스케쥴러관련 자료
캐시 친화력
시그널의 정의 이벤트
버디할당자 활용 성능
vfork fork copy on write
댓글 6
-
박창현2
2012.04.15 13:13
-
이용덕
2012.04.16 13:39
찾아보시느라 고생하셨습니다~
-
김건용
2012.04.18 16:43
-
김건용
2012.04.18 16:52
-
김건용
2012.04.18 17:31
캐시 친화력(P.75)은
제 생각에...
부모와 자식이 하나의 공간을 공유하고 있다가 데이터를 써 넣을 일이 발생하면 주소공간을 복제하는 자식이 사용하므로
부모가 사용하고 있던 캐시 내의 자원 쓰겠다는거 아닐까요???
-
이종보
2012.04.20 12:39
책에 캐시 친화력(cache affinity)라고 언급이 되어 있어서 저도 다소 혼란스런 부분이 있지만
프로세서 친화력(processor affinity 또는 CPU affinity)라는 개념이 있습니다.
이것이 필요한 이유는 두 가지로 생각해 볼 수 있습니다.
먼저, 멀티코어 환경에서
특정 프로세스(process)가 한번 CPU core를 사용하고 나서, 다시 CPU core가 필요한 경우
어떤 CPU core를 선택할 것인가의 문제가 생기는데요.
이때 Linux의 경우 kernel은 이전에 사용했던 CPU core를 배정해 주게 됩니다.
그 이유는 해당 CPU core 내부 cache 때문인데요.
한번(이상) 수행을 했었기 때문에 cache 내부에 process에 필요한 cache가 남아 있을 확률이 큰 것이죠.
만약 이전에 수행한 곳이 아닌 다른 곳에 배정을 해주는 경우,
당연히 cache에는 해당 프로세스에 맞는 data가 존재하지 않고, 그 data를 메모리 또는 디스크에서 복사 해 와야 합니다.
이전 CPU core에 남아 있는 data역시 당연히 쓸모가 없어지므로 버리고 다시 새로운 데이터를 복사 해 와야 하구요.
일을 두번 하는 셈이 되는 것이죠.
두 번째 이유가 더 큰 이유인데요.
만약 원자로 제어기나 비행기 내부에 들어가는 소프트웨어 같이 중요하고
특히, time critical한 프로세스의 경우
(만약, 비행기에다가 브레이크 명령을 주었는데 특정 시간내에 실행이 안된다면 그 결과는 엄청나겟죠)
프로세스에 요구되는 실행시간이 메모리나 디스크에서 CPU cache로 복사 하는 시간보다 짧은 경우가 생길 수 있습니다.
(즉, 디스크에서 열심히 복사해 왔는데 이미 시간이 지나서 필요가 없어져버렸다. 뭐 이런 경우입니다.)
따라서 이러한 경우에, 멀티코어 환경에서
특정 코어를 따로 떼서 앞서 언급한 time critical한 프로세스 이외에 다른 프로세스가 사용하지 못하도록 하는 경우가 있습니다.
제가 알고 있는 내용은 이 정도인데요.
책에 있는 내용과 비교해서 곰곰히 생각을 해 보면 제 생각엔
첫 번째 이유와 비슷한 취지에서 캐시 친화력(cache affinity)를 이야기 한게 아닌가 싶습니다.
.
fork, vfork는 같다고합니다...(특정 상황을 제외하고는요)
http://stackoverflow.com/questions/4259629/what-is-the-difference-between-fork-and-vfork
여기서 보면, vfork, fork는 완전히 같은 일을 수행한다고 합니다(채택된 답변을 보면요)
단 몇가지 상황에서는 약간 다른 동작을 하나봅니다.
Linux man page에서 얻어온 것이라고 합니다.
결국 fork()와 vfork()는 결국 비슷하지만, 특정 상황에서 다른 행동을 한다고 결론지을 수 있겠습니다^^