커널 컴파일한 서버 vs 기본 설치 서버의 속도

queryman의 이미지

갑자기 궁금증이 찾아와서 그러는데요..

어느 하나의 배포판을 예로들때

커널 컴파일한 서버와, 안한 서버와의 속도는 얼마나 찾이가 나나요?

10%? 15%?

RHEL만 꾸준히 설치하고 운영을 하고있는데 점점 커널 컴파일의 필요성을 못느끼고 있어서 그럼니다.

김정균의 이미지

커널 2.6 올라오고 나서는 커널 컴파일을 해 본 적이 없습니다. 특히나 dynamic kernel module build 가 가능해 져서 몇몇 모듈을 rebuild 한 적은 있어도, 적어도 2.6 에서 make bzImage 를 해 본적은 없군요. 굳이 필요성도 못느끼고.. RHEL 4 의 2.6.8 kernel 에서 tomcat 이 부하를 받을 경우 죽는 문제가 있었는데 (적수가 알려줌.. ^^) 이 경우가 한번 발생해서 1대는 RHEL5 커널로 부팅을 했고 (의존성 처리하느라 좀 귀찮았지만..), 1대는 CentOS 5로 업그레이드 해 버렸습니다. :-)

queryman의 이미지

좋은정보 감사드립니다 ^^

oops-firewall 잘쓰고 있어요 ㅎㅎㅎㅎ

지금 회사 상사가 정균님만 같았더라면 ㄷㄷㄷㄷㄷ

-------------------------------------------------------------------------------------------
생각은 지나가던 개새끼도 하지.. 실천하는건?? 나도 할수있지...
http://www.mrdics.com


-------------------------------------------------------------------------------------------
이놈의 IT 생활... 실증나고 짜증나고...
근데 왜 맨날 it관련 소식만 보고 ;;; 님휘

zz181321의 이미지

저는 리눅스 쓴지 꽤 됐고(약 9년), 구루까지는 아직 멀었지만 어느정도 나름대로 원하는 만큼은 리눅스를 다룬다고 생각합니다.
그러한 저는 커널의 새 버젼이 나오면 약 2주에서 3주 정도 기다렸다가 늘 컴파일 해보곤 하는데요.

많은 분들이 말하시는데로, 반드시 할 필요는 없는 거 같습니다. 실제 사용상에서 속도차가 체감 되는 것도 아니고,
단지 커널 컴파일을 직접하면 필요없는 것은 제거하고 컴파일 하게 되니, 약간의 메모리를 절약할 수 있고 부팅 시간이 좀 더 빨라진다는 정도군요(필요 없는 걸 로딩 안하는 분량 만큼 빨라집니다).

실제로 프로그램의 성능은 바이너리 쓰느냐 컴파일 하냐의 차이 같습니다. 최신 cpu에 맞춰 컴파일한 젠투와 i386의 우분투의 속도를 비교해 보면 느껴지죠.
그러나 이것도 mmx니 3dnow sse 등등을 쓰는 멀티미디어 관련 프로그램에서나 체감이 확나지, 왠만한 프로그램은 크게 차이를 느끼진 못합니다.

그럼에도 제가 커널 컴파일은 하는 것은 순전히 자기만족에서입니다. 서버라면 굳이 할 필요는 없을 거 같군요.

lunatine의 이미지

나름 다이어트를 해두고 환경에 최적화를 하면 효율은 얻을 수 있습니다. 제가 %에 약해서 몇 %라고는 못하겠지만요 ^^

다만, 최적화를 통해 성능을 적절히 끌어올리는 사람의 인력비용보다 최신형 H/W가 더 쌉니다..

무어의 법칙은 무서운 거지요 :)

================
Lunatine
================

================
Lunatine
================

pcharley의 이미지

커널뿐만이 아니겠죠...
모든 프로그램에 있어서 컴파일로 성능 향상을 바란다면 최소한 내가 원하는 것과, 지금 내가 하고 있는 일이
정확히 어떤 일인가를 알고 있어야 하고, 또한 거기에 맞는 지식도 갖추고 있어야 컴파일 후 자신이 원하는 결과가
나올 수 있을거 같네요..

단순히, configure, make, make-install 만 가지고 컴파일된 프로그램에서 눈에 보이는 성능향상이 있을거 같지는
않습니다.

그리고 10%, 15%의 성능향상이 그렇게 단순하게 이루어진다면,,,,레드햇 기본 커널을 사용하는 SE들은 다 직무태만일 수
있지 않을까요...^^

monovision의 이미지

아마 kldp 에서 봤던 내용 같은데요....

실제로 커널을 소스 컴파일을 한 것이 바이너리 배포판에 비해 성능 향상은 거의 없거나 미비하다고 본 것 같습니다.
그 이유중에 하나가 바이너리 배포판들은 컴파일러를 상용을 써서 gcc 보다 최적화가 잘되어 있다고라고 본 것 같군요...

lunatine 님의 말씀처럼 커널 최적화등의 삽질을 통해 얻는 이득보다 H/W 가 더 싸니... 느리다면 H/W 업그레이드가 훨씬 좋은 것 같습니다. ^^
임베디드라면 예외겠지만요.. 냠냠.

bushi의 이미지

다른 컴파일러를 위해 커널소스에 패치를 가하지 않았다면,
그 커널을 컴파일할 수 있는 컴파일러는 gcc 하나 뿐입니다.

http://www.linuxjournal.com/content/linuxdna-supercharges-linux-intel-cc-compiler
최근에 x86 에서 ICC 로 시도한 것에 대한 개략적인 소개입니다.
2004년 시도 때는 전체적으로 대략 8~9% 정도의 성능향상이 있었다는데 이번 시도는 아직 정량화가 힘든가봅니다.
(nvidia 등의 외부드라이버 등을 사용하기가 까다롭나봅니다. vmware 등의 guest 확장도 마찬가지이유로 까랍롭고요.
gentoo 로 삽질했다니 관심있으신 분은 생체실험을 해보시는 것도...)

디버깅, 혹은 오류발생시에 트레이스 및 리포트를 쉽게 할 목적으로 배포본의 커널은 여러가지 옵션이 켜져 있습니다.
예외발생에 대한 감지도 더 깐깐하게 하도록 여러가지 옵션이 켜져 있습니다.
이걸 꺼버리면 성능향상은 있을 지 몰라도, 그것에 의해 파생되는 의도치않은 동작을 감지하기도 어렵고 제대로 막지도 못합니다.
설령 감지했다하더라도 왜 그렇게 됐는지 알 수도 없습니다.
누군한테 하소연 할 수도 없고, 사실상... 하소연 할 방법도 없습니다.

요샌 initrd 에서 다양한 기능을 수행하기 때문에 예전처럼 built-in 으로 몇개씩 때려박는 일이 거의 없습니다.
거의 다 loadable module 입니다.
부팅 시에 probe 를 많이 하는 것 때문에 부팅시간이 늘어진다는 것이 흠이죠.
(이것도 배포본 나름대로 튜닝을 합니다. 지난 번 부팅 때와 이번 부팅 때 달라진 것들만 probe 한다던가 하는 식으로.)

배포본의 커널은 만약을 대비해 적절한 수준에서 최대한 보수적인 옵션으로 빌드합니다.
이 보수적인 옵션 때문에 생기는 성능상의 불이익이라면,
위에 말씀드린 예외처리/디버깅에 관련된 것정도가 고작이라 생각하는데...
배포본 커널의 config 파일을 차근차근 뜯어본 적이 없어서 자신있게 말하지 못하겠습니다.

OTL

monovision의 이미지

아아.. 제가 잘못 봤었나 보군요... 커널까지 포함된게 아니라 그냥 일반 어플리케이션이었나보군요 ;;;

vacancy의 이미지


음 저같은 경우엔,
우선; 적어도 부팅시간에 한해서는
꽤 많이 차이가 난다고 보는데요.
X에서의 반응속도도 좀 차이가 나는것 같고요.

전 부팅시간만으로도
커널 빌드는 의미가 있다고 보아요. ;;
어차피 .config 파일이야 하나 만들어두고
거의 그대로 쓰니까요.

Fe.head의 이미지

2.4대인가.. 그때 486 dx4-100으로 할때는 꽤 차이가 있었던걸로 기억하는데..

지금은 모르겠습니다. 귀찮니즘으로 컴파일하는게 귀찮습니다 ㅡ.ㅡ
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

Necromancer의 이미지

젠투는 genkernel로 빌드한 커널이 옵션 꺼진게 많아서 직접 빌드해서 씁니다.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

goodnux의 이미지

컴파일만하면 속도가 좋으니 말들을 하는데요
컴파일을 하는 목적이 무었입니까
커널로 치자면 디폴트는 자신의 서버 및 환경에 필요없는 디바이스 파일 네트웍 모듈 등등이 포함되어 졌죠
컴파일로 자신의 필요한것만으로 설치해서 경량화가 되는것입니다
또한 프로그램들을 컴파일설치로 /usr/local 등에 설치한다면 재설치 및 복구 이전시 편하겠죠
그런거 없이 디폴트로 설치하면 별차이 없겠죠
요즘은 특히나 하드웨어 성능이 좋아서 차이가 더욱 없죠
cpu 300Mhz 메모리 64M 시대가 아니잖아요 ^^

russell의 이미지

동감. 하드웨어 사양이 뭐낙에 좋와지는 상황에서...피부로 느끼는 성능향상이라? 저는 거의 같다에 한표를 던지고 싶네요.

게다가...커널을 잘 옵티마이징 해서 컴파일 할 수 있는 상황(사람)이라면 이러한 글을 올리지도 않으시겠죠. 말을 바꾸어 말하면, 이런 글을 올리시는 상황이라면...커널을 잘 옵티마이징 해서 피부로 느낄 만큼 성능을 향상 시킬 수 있다고 생각 되지 않습니다. ^^;

hicmcs의 이미지

해당 글이 예전 글이라 추가 답글 달지 고민하다가 답글을 보고 명확하지 않은 것 같아 추가 답글 답니다.

2.6 커널은 CPU의 멀티쓰레딩 및 고사양에 따른 대형화에 초점이 맞추어졌습니다.
그에 따라서 2.6 커널은 개인 데스크탑에 대한 완벽 지원에 초점을 맞추었습니다.
물론 2.2 및 2.4 또한 개인 PC 특히 x86 프로세서 호환에 초점이 맞추어졌지요.

밴더의 바이너리 커널과 범용 소스 구성은 위에 해당하는 부분을 지원하기 위함입니다.
예나 지금이나 해당 부분을 컴파일 하여 사용하는 이유는 3가지가 있다고 봅니다.

1. 윗분들께서 답변을 하신대로 구시대의 제한된 H/W의 리소스 극대화였습니다.
2. 커널의 구조를 제한하여 소스코드의 버그 및 보안적인 부분의 최소화입니다.
3. 서버 측면에서 유지보수를 위한 동적라이브러리의 활용입니다.

위 3가지를 가지고 엔지니어는 밴더사의 바이너리 혹은 범용 커널의 재컴파일을 놓고 판단을 하는 것입니다.
물론 리눅스 코드를 공개해야하기 때문에 밴더사들도 소스코드를 제공하지만, 일반적으로 범용 커널을 이용하여 재컴파일을 하게 됩니다.
밴더사들의 소스는 2번에 대한 부분이 잠재적으로 범용 커널에 비해 많기 때문에 재컴파일을 할 때는 잘 사용하지 않습니다.

이를 기반으로 질문자의 답변을 내리면 예나 지금이나 바이너리 및 소스컴파일은 속도 향상을 위해서 있는 것은 아닙니다.
예나 지금이나 속도 향상은 부가기능이며, 제한된 하드웨어의 H/W 리소스 극대화를 하기 위해서 하는 것입니다.
이전에는 기존 바이너리를 사용하면 메모리에 올리는 커널 용량이 2MB를 넘었습니다. 이를 1.2MB이하로 줄여 메모리를 활요하는 것이며,
네트워크 자원을 활용하기 위해 TCP Timeout을 조절한다던가 파일 오픈 개수를 메모리 상황에 맞게 늘린다던가 하는 것입니다.

절대로 소스 컴파일은 성능향상을 위해 있는 것은 아닙니다. 하드웨어의 극대화를 위해서 있는 것입니다.
속도향상을 위해서는 해당 프로그램의 소스의 파라메타를 수정하거나, 경량화를 해야 반응 속도가 빨라져 속도 향상을 느끼는 것입니다.
그런 부분을 대체하는 것이 웹쪽에서는 프락시 기능 입니다.

이런 부분을 참고하시어 리눅스를 사용하시는데 유념하셨으면 합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.