'kernel'에 해당되는 글 13건

  1. 2013.03.21 kernel 3.8 is out!
  2. 2009.07.28 What is vDSO? 2
  3. 2008.02.24 LatencyTop

kernel 3.8 is out!

Personal Computer/Linux 2013. 3. 21. 11:17 posted by tolkien
linux에서 각 app별로 memory 사용량을 파악하는 것은 어렵습니다.
더욱이 현재 남아 있는 physical memory가 얼마인지 아는 것은 더욱 더 어렵죠.
Two approaches to kernel memory usage accounting
http://lwn.net/Articles/485593/

이번에 3.8에서 memory control group에 대해서 좀 더 나은 시도를 하고 있다고 합니다.
Improving kernel-memory accounting for memory cgroups
http://lwn.net/Articles/528078/

이번 시도는 TCP buffer에 대해서 먼저 시도를 해봤고,
그게 괜찮으니까 memory system 전체로 확장하려고 하고 있습니다.
Per-cgroup TCP buffer limits
http://lwn.net/Articles/470656/

잘 되면 이런저런 응용이 될 수 있을 것같습니다.
당장 응용을 하려는 곳은 OpenVZ라고 하는 container 방식의 virtualization입니다.
이른바 OS level의 가상화인데, 쉽게 말하면 한 pc에서 여러개 web server를 운영하는데,
각 web server를 마치 별도의 pc에서 실행되는 것처럼 제공하는 방식입니다.
virtualbox나 vmware는 machine level에서 가상화를 제공하지만,
OpenVZ는 OS level에서 제공하기 때문에 overhead가 적다고 합니다.

문제는 각 virtual machine에게 필요한 memory를 배타적으로 제공하는데,
이것을 memory control group을 통해서 제공하는데,
아직은 memory cgroup으로 여유있게 제공해야 한다고 합니다.
3.8에서 시도하는 것이 어느 정도 잘 되면 좀 더 알뜰하게 memory를 제공할 수 있겠죠.


What is vDSO?

Personal Computer/Linux 2009. 7. 28. 13:52 posted by tolkien
What is linux-gate.so.1? - by Johan Petersson

요즘 linux desktop에서 ldd를 때려보면 linux-gate.so.1이라는 파일이 보인다.
[tolkien@tolkien tmp]$ ldd /bin/ls
    linux-gate.so.1 =>  (0xb7f84000)
    librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7f66000)
    libselinux.so.1 => /lib/libselinux.so.1 (0xb7f4d000)
    libacl.so.1 => /lib/libacl.so.1 (0xb7f45000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7df6000)
    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7dde000)
    /lib/ld-linux.so.2 (0xb7f85000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7dda000)
    libattr.so.1 => /lib/libattr.so.1 (0xb7dd6000)
저건 vDSO(virtual Dynamic Shared Object)라는 것으로 최근 x86 cpu에서 보이는 sysenter 명령을 이용한다. 위 link에 자세히 설명이 되어 있는데, 간단히 설명하자면...
x86에서 system call을 들어가기 위해서 interrupt 0x80을 이용했는데, 이게 cpu가 빨라지면서 병목이 되어 버렸다는 거다. (보다 자세한 내용은 Re: What is VDSO?, 또는 Intel P6 vs P7 system call performance)
이에 대해 Intel에서 sysenter라는 명령어를 Pentium Pro부터 내놓았다. 하지만, 무척 많은 버그때문에 안 쓰이다가 Pentium III정도부터 쓰이기 시작. Linux는 2.6.12때부터, Windows는 XP부터 sysenter를 지원하기 시작한다.

기존 방식으로만 동작하는 cpu도 아직 있기에 linux는 둘 다 지원한다. linux kernel build하면 vdso-int80.so, vdso-systenter.so 두 file이 생기고, 둘 다 kernel image에 들어가서 booting시 syscall entry에 대해서 int 0x80을 쓸 것인지 sysenter를 쓸 것인지 동적으로 정한다고 한다.

systenter 명령어를 사용할 때, 문제가 되는 syscall이 있는데, 그것이 RESTART다. 그에 대해서 추가적으로 언급한 것이 Linus Torvalds is a disgusting pig and proud of it 이다.

LatencyTop

Personal Computer/Linux 2008. 2. 24. 19:03 posted by tolkien
커널 2.6.24에 포함된 LatencyTop - 모나씨님의 글

제품에 linux를 넣다보면 자주 괴롭히는 문제가 이른바 "tunning"이다.

BUT, 외부사람이 보기엔 system을 tunning하면 시스템이 좋아질 것이라는 환상을 품게 마련이다.
memory 부족하다면 "system memory 얼마나 줄일 수 있나요?"
단말 속도가 느리면 "NAND i/o 속도를 더 올릴 수 있나요?" "스케쥴러 tunning해야 하지 않나요?" 등등...
이럴때 H/W DataSheet 구해서 spec대비 얼마 효율인지 설명하면, 그 다음에는 spec에 최대한 근접하도록 압박을 받곤 한다. 그럼 그냥 묵묵히 tunning을 수행해야 한다. code review하고 test program 작성해서 측정하고 등등...

하고 나면 좋아지긴 하는데, 솔직히
내 개인적인 견해는 tunning 할 바에는 appl쪽 tunning하는게 가격대성능비가 좋다.이다.
tunning하기 위한 자료 측정도 쉬운 편이고 (필요하면 kernel에서 조금 지원해주면 된다), 또 tunning 결과도 꽤 괜찮다.

하지만, 오늘도 tunning을 해야 하는 내 입장에서 이런 tool이 나오는 것 환영.

해당 site
http://www.latencytop.org/

관련 기사
http://lwn.net/Articles/266153/
http://lwn.net/Articles/266246/
http://lwn.net/Articles/265945/