[팁]readahead, readahead_early를 이용한 부팅속도 향상...

지리즈의 이미지

redhat계열만 해당되는지는 모르겠습니다.
스타트업 스크립트중에 보면, readahead, readahead_early가 있습니다.

특정한 파일이 필요하기 전에 미리 메모리에 불러 들여서,
속도향상을 보자는 녀석입니다.

실제로 저같은 경우 부팅에서10초정도 이득을 보고 있습니다.

느린 사양이라 거의 3~4분에 부팅이 걸리는 지라,
그다지 영향을 못주기는 하지만,
자주사용하는 firefox같은 경우는 처음 실행속도가
절반정도로 줄어 드는 쾌거를 거두었습니다.

메모리로 읽어 드리기 때문에, 충분한 메모리(X사용시 256M이상)를
가지고 있는 시스템에만 권장해드리고 싶습니다.

만약 그렇지 않다면, 오히려 역효과를 볼 수도 있습니다.

readahead_early는 모든 데몬이 시작되기전,
readahead는 로그인이 시작되기 직전에 실행되도록 되어있습니다.

[zirize@zirize zirize]$ cat /etc/rc.d/init.d/readahead
#!/bin/sh
#
# readahead:    Prereads programs required for startup into memory
#
# chkconfig: 5 96 99
# description:  This service causes the programs used during startup \
#               to be loaded into memory before they are needed,\
#               thus improving startup performance
#
#

# Sanity checks.
[ -x /usr/sbin/readahead ] || exit 0

<중략>

start() {
    echo -n $"Starting background readahead: "
    /usr/sbin/readahead `cat /etc/readahead.files` &
}

<중략>

[zirize@zirize zirize]$ cat /etc/rc.d/init.d/readahead_early
<중략>

start() {
    echo -n $"Starting background readahead: "
    /usr/sbin/readahead `cat /etc/readahead.early.files` &
}

/usr/sbin/readahead가 파일을 메모리로 올려드리는 명령입니다.

두 스타트업 스크립트은 실제로 읽어들이는 설정파일이 다를 뿐 완전히 동일한 것들입니다.
베포본에 미리 포함된 이 설정파일들이 자신에게 반드시 적절하지는 않을 겁니다.
KDE데스크탑 사용자들에게 불필요한 gnome관련 파일들도
캐쉬가 될 수 있기 때문입니다.

다음은 현재 메모리에 캐쉬중인 파일목록을 받아오는 쉘스크립트입니다.

[root@zirize root]# cat CachedFileList.sh
#!/bin/sh
LSOF="/usr/sbin/lsof"
GREP="/bin/grep"
VGREP="/bin/grep -v "
AWK="/bin/gawk"
SORT="/bin/sort -u"

$LSOF / \
        | $VGREP "^\(lsof\|grep\)" \
        | $AWK '{ print $4 " " $9 }' \
        | $GREP ^mem \
        | $AWK '{ print $2 }' \
        | $VGREP "^.\(var\|tmp\|home\|root\)" \
        | $GREP ^[/] \
        | $SORT

#사용법1
[root@zirize root]# ./CachedFileList.sh > /etc/readahead.files
#사용법2
[root@zirize root]# ./CachedFileList.sh > /etc/readahead.early.files

문제는 현재 메모리에 캐쉬되어 있는 파일의 목록을 가져오는 시점입니다.

저같은 경우는 X의 로그인 화면이 나왔을 시점에 readahead.early.files를
그리고 사용자로 로그인해서, firefox나 kate, kconsole등 자주 사용하는 프로그램을 실행시켜 놓은 상태에서 readahead.files를 작성했습니다.

경우에 따라 달라질 수 있으므로 적절히 구하시길 바랍니다.

readahead.early.files와 같은 경우는 X상태에서 로그인하기 직전이어야 함으로
ctrl+alt+F1키등으로 강제로 콘솔로 빠져나와 콘솔상태에서 로그인하여 실행했습니다.

기타...

readahead.early.files 와 readahead.files의 목록이 중복될 수 있으나,
이미 메모리에 불려진 파일을 다시 억세스하기 때문에
그다지 부하에 영향을 미치지 않을 것으로 판단하여
중복부분 삭제는 생략했습니다.


경고.
1. 배포폰에 따라 설정파일의 위치가 다를 수 있으므로
반드시 readahead, readahead_early 스타트업 스크립트를 확인해서
설정파일을 갱신하시길 바랍니다.
2. 설정파일을 갱신하기 전에는 백업을 만들어 놓으셔도 됩니다.
3. 제가 awk, lsof에 능숙하지 않는 관계로 스크립트가 예쁘지 않습니다.
더 낳은 스크립트가 있다면 환영입니다.
4.서버는 부팅속도가 큰 의미를 가지지 않으므로 두 스타트업 스크립트는 피하십쇼.

File attachments: 
첨부파일 크기
Binary Data CachedFileList.sh.tar.gz307바이트
Forums: 
익명 사용자의 이미지

/usr/sbin/lsof | sed -ne 's/^.* \/\(.*\)$/\/\1/p' | sort | uniq | egrep '^/usr/lib/|^/lib/'

심심해서 만들었습니다..

결과물:
/lib/ld-2.3.4.so
/lib/libdl-2.3.4.so
/lib/libncursesw.so.5.4
/lib/libnsl-2.3.4.so
/lib/libnss_compat-2.3.4.so
/lib/libnss_dns-2.3.4.so
/lib/libnss_files-2.3.4.so
/lib/libnss_nis-2.3.4.so
/lib/libresolv-2.3.4.so
/lib/libutil-2.3.4.so
/lib/libwrap.so.0.7.6
/lib/libz.so.1.2.1
/lib/tls/libc-2.3.4.so
/lib/tls/libm-2.3.4.so
/lib/tls/libpthread-2.3.4.so
/lib/tls/librt-2.3.4.so
/usr/lib/GConf/2/libgconfbackend-xml.so
/usr/lib/bonobo/monikers/libmoniker_std_2.so
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.4/libstdc++.so.5.0.6
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.4.2/libgcc_s.so.1
/usr/lib/gconv/CP1256.so
/usr/lib/gconv/CP1257.so
/usr/lib/gconv/CP1258.so
/usr/lib/gconv/ISO8859-1.so
/usr/lib/gconv/ISO8859-10.so
/usr/lib/gconv/ISO8859-13.so
/usr/lib/gconv/ISO8859-14.so
/usr/lib/gconv/ISO8859-15.so
/usr/lib/gconv/ISO8859-2.so
/usr/lib/gconv/ISO8859-3.so
/usr/lib/gconv/ISO8859-4.so
/usr/lib/gconv/ISO8859-5.so
/usr/lib/gconv/ISO8859-6.so
/usr/lib/gconv/ISO8859-7.so
/usr/lib/gconv/ISO8859-8.so
/usr/lib/gconv/ISO8859-9.so
/usr/lib/gconv/UTF-16.so
/usr/lib/gconv/gconv-modules.cache
/usr/lib/gnome-vfs-2.0/modules/libfile.so
/usr/lib/gnome-vfs-2.0/modules/libvfolder-desktop.so
/usr/lib/gtk-2.0/2.4.0/engines/libpixmap.so
/usr/lib/gtk-2.0/2.4.0/loaders/libpixbufloader-png.so
/usr/lib/gtk-2.0/2.4.0/loaders/libpixbufloader-xpm.so
/usr/lib/gtk-2.0/immodules/im-hangul.so
/usr/lib/libORBit-2.so.0.0.0
/usr/lib/libORBitCosNaming-2.so.0.0.0
/usr/lib/libart_lgpl_2.so.2.3.16
/usr/lib/libasound.so.2.0.0
/usr/lib/libatk-1.0.so.0.800.0
/usr/lib/libaudiofile.so.0.0.2
/usr/lib/libbonobo-2.so.0.0.0
/usr/lib/libbonobo-activation.so.4.0.0
/usr/lib/libbonoboui-2.so.0.0.0
/usr/lib/libcrypto.so.0.9.7
/usr/lib/libesd.so.0.2.35
/usr/lib/libexpat.so.0.5.0
/usr/lib/libfam.so.0.0.0
/usr/lib/libfontconfig.so.1.0.4
/usr/lib/libfreetype.so.6.3.4
/usr/lib/libgconf-2.so.4.1.0
/usr/lib/libgdk-x11-2.0.so.0.400.9
/usr/lib/libgdk_pixbuf-2.0.so.0.400.9
/usr/lib/libglade-2.0.so.0.0.4
/usr/lib/libglib-2.0.so.0.400.7
/usr/lib/libgmodule-2.0.so.0.400.7
/usr/lib/libgnome-2.so.0.800.0
/usr/lib/libgnome-desktop-2.so.2.1.12
/usr/lib/libgnome-keyring.so.0.0.1
/usr/lib/libgnome-window-settings.so.1.0.0
/usr/lib/libgnomecanvas-2.so.0.800.0
/usr/lib/libgnomeui-2.so.0.800.0
/usr/lib/libgnomevfs-2.so.0.800.1
/usr/lib/libgobject-2.0.so.0.400.7
/usr/lib/libgthread-2.0.so.0.400.7
/usr/lib/libgtk-x11-2.0.so.0.400.9
/usr/lib/libjpeg.so.62.0.0
/usr/lib/libpanel-applet-2.so.0.0.19
/usr/lib/libpango-1.0.so.0.600.0
/usr/lib/libpangoft2-1.0.so.0.600.0
/usr/lib/libpangox-1.0.so.0.600.0
/usr/lib/libpangoxft-1.0.so.0.600.0
/usr/lib/libpng.so.3.1.2.7
/usr/lib/libpng12.so.0.1.2.7
/usr/lib/libpopt.so.0.0.0
/usr/lib/libssl.so.0.9.7
/usr/lib/libstartup-notification-1.so.0.0.0
/usr/lib/libvte.so.4.4.0
/usr/lib/libwnck-1.so.4.9.0
/usr/lib/libxklavier.so.8.0.0
/usr/lib/libxml2.so.2.6.12
/usr/lib/locale/en_US.utf8/LC_NUMERIC
/usr/lib/locale/en_US.utf8/LC_TIME
/usr/lib/locale/ko_KR.utf8/LC_ADDRESS
/usr/lib/locale/ko_KR.utf8/LC_COLLATE
/usr/lib/locale/ko_KR.utf8/LC_CTYPE
/usr/lib/locale/ko_KR.utf8/LC_IDENTIFICATION
/usr/lib/locale/ko_KR.utf8/LC_MEASUREMENT
/usr/lib/locale/ko_KR.utf8/LC_MESSAGES/SYS_LC_MESSAGES
/usr/lib/locale/ko_KR.utf8/LC_MONETARY
/usr/lib/locale/ko_KR.utf8/LC_NAME
/usr/lib/locale/ko_KR.utf8/LC_NUMERIC
/usr/lib/locale/ko_KR.utf8/LC_PAPER
/usr/lib/locale/ko_KR.utf8/LC_TELEPHONE
/usr/lib/locale/ko_KR.utf8/LC_TIME
/usr/lib/mozilla/chrome/US.jar
/usr/lib/mozilla/chrome/comm.jar
/usr/lib/mozilla/chrome/en-US.jar
/usr/lib/mozilla/chrome/en-unix.jar
/usr/lib/mozilla/chrome/modern.jar
/usr/lib/mozilla/chrome/toolkit.jar
/usr/lib/mozilla/components/libappcomps.so
/usr/lib/mozilla/components/libcaps.so
/usr/lib/mozilla/components/libchrome.so
/usr/lib/mozilla/components/libcookie.so
/usr/lib/mozilla/components/libdocshell.so
/usr/lib/mozilla/components/libeditor.so
/usr/lib/mozilla/components/libembedcomponents.so
/usr/lib/mozilla/components/libgfx_gtk.so
/usr/lib/mozilla/components/libgklayout.so
/usr/lib/mozilla/components/libgkplugin.so
/usr/lib/mozilla/components/libhtmlpars.so
/usr/lib/mozilla/components/libi18n.so
/usr/lib/mozilla/components/libimglib2.so
/usr/lib/mozilla/components/libjar50.so
/usr/lib/mozilla/components/libmork.so
/usr/lib/mozilla/components/libnecko.so
/usr/lib/mozilla/components/libnsappshell.so
/usr/lib/mozilla/components/liboji.so
/usr/lib/mozilla/components/libp3p.so
/usr/lib/mozilla/components/libpipboot.so
/usr/lib/mozilla/components/libpref.so
/usr/lib/mozilla/components/libprofile.so
/usr/lib/mozilla/components/librdf.so
/usr/lib/mozilla/components/libsystem-pref.so
/usr/lib/mozilla/components/libtxmgr.so
/usr/lib/mozilla/components/libtypeaheadfind.so
/usr/lib/mozilla/components/libuconv.so
/usr/lib/mozilla/components/libwebbrwsr.so
/usr/lib/mozilla/components/libwidget_gtk2.so
/usr/lib/mozilla/components/libxpcom_compat_c.so
/usr/lib/mozilla/components/libxpconnect.so
/usr/lib/mozilla/components/libxremoteservice.so
/usr/lib/mozilla/libgkgfx.so
/usr/lib/mozilla/libgtkxtbin.so
/usr/lib/mozilla/libjsj.so
/usr/lib/mozilla/libmoz_art_lgpl.so
/usr/lib/mozilla/libmozjs.so
/usr/lib/mozilla/libnspr4.so
/usr/lib/mozilla/libplc4.so
/usr/lib/mozilla/libplds4.so
/usr/lib/mozilla/libxpcom.so
/usr/lib/mozilla/libxpcom_compat.so
/usr/lib/mozilla/mozilla-bin
/usr/lib/pango/1.4.0/modules/pango-basic-fc.so

익명 사용자의 이미지

/usr/sbin/lsof | sort -u -k 9 | uniq -s 9 | sed -ne 's/^.* \/\(.*\)$/\/\1/p' | egrep '^/usr/lib/|^/lib/'

좀 더 빠른 스크립트.. ㅡㅡ;

계속 올려서 죄송.

지리즈의 이미지

주석이 없어서 추가합니다.

[root@zirize root]# cat CachedFileList.sh
#!/bin/sh
LSOF="/usr/sbin/lsof"
GREP="/bin/grep"
VGREP="/bin/grep -v "
AWK="/bin/gawk"
SORT="/bin/sort -u"

$LSOF / \
        | $VGREP "^\(lsof\|grep\)" \             # lsof나 grep으로 발생된 캐쉬는 제외한다.
        | $AWK '{ print $4 " " $9 }' \           # lsof 가 뿌린 메세지중 4와 9번째만 취한다
        | $GREP ^mem \                           # 그중  mem메모리에 올라온 것들만 취한다.
        | $AWK '{ print $2 }' \                  # 경로명만 취한다.
        | $VGREP "^.\(var\|tmp\|home\|root\)" \  # 이중 var나 tmp, home, root등에서 발생한 캐쉬는 버린다.
        | $GREP ^[/] \                           # 온전한 경료명이 아닌 것은 버린다.
        | $SORT                                  # sort -u 유니크한 것으로 정렬한다. 

There is no spoon. Neo from the Matrix 1999.

익명 사용자의 이미지

아무개X2 I completely agree with yor argument.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.