Gentoo Linux 下跑 2.4 Kernel + NPTL - PCZONE 討論區

返回   PCZONE 討論區 > ▲ -- 電 腦 軟 體 討 論 區 > -- FreeBSD & Linux 討 論 版


PCZONE 討論區



通知

-- FreeBSD & Linux 討 論 版 因為本站採用 FreeBSD 作業系統,所以自己本身也多學了一些技巧,希望各位在這裡互相討論 Unix 作業系統及程式等相關問題。

拉登長官
Gentoo Linux 下跑 2.4 Kernel + NPTL
先下載: http://ccrma-www.stanford.edu/planet...l.caps.src.rpm

再來就是把 rpm 轉成 tgz..
rpm2targz kernel-2.4.22-1.2140.nptl.caps.src.rpm

會產生一個 kernel-2.4.22-1.2140.nptl.caps.src.tar.gz

tar -zxf kernel-2.4.22-1.2140.nptl.caps.src.tar.gz -C nptl

進到 nptl 目錄.. 準備 把 Linux Kernel 2.4.22 & NPTL ... 解開 & patch..

存成 runme.sh, 並 chmod +x runme.sh
語法:
#!/bin/sh

S_PWD=`pwd`
K_DIR="/usr/src/linux-2.4.22"

rm -rf $K_DIR /usr/src/linux

echo "Uncompress linux-2.4.22"

tar -jxf linux-2.4.22.tar.bz2 -C /usr/src/

cat kernel-2.4.22-1.2140.nptl.caps.spec | egrep "^Patch" | cut -d " " -f 2 > patch_cmd

#
## remove patch `FAILED` patch
#
echo "1,$ s/linux-2.4.2-changeloop.patch//g | wq" | ex patch_cmd
echo "1,$ s/linux-2.4.18-loopfixes.patch//g | wq" | ex patch_cmd
echo "1,$ s/linux-2.4.18-dmi-hall-of-shame.patch//g | wq" | ex patch_cmd
echo "1,$ s/linux-2.4.9-fstat.patch//g | wq" | ex patch_cmd
echo "1,$ s/acpi-20030321-2.4.21-pre5.diff.gz//g | wq" | ex patch_cmd
echo "1,$ s/memstick.patch//g | wq" | ex patch_cmd
echo "1,$ s/008_vh_021217_ck_2.4.20.patch.bz2//g | wq" | ex patch_cmd
echo "1,$ s/rtc-2.4.20-13.1.caps.patch//g | wq" | ex patch_cmd

for i in `cat patch_cmd`; do

  echo $i | egrep -q ".gz$"

  if [ "$?" == "0" ]; then
    cd $K_DIR && gzip -cd $S_PWD/$i | patch -p1

  else
    echo $i | egrep -q ".bz2$"
    if [ "$?" == "0" ]; then
      cd $K_DIR && bzip2 -cd $S_PWD/$i | patch -p1
    else
      cd $K_DIR && patch -p1 < $S_PWD/$i
    fi
  fi

  echo "Processed of $i"

done

echo "Finished :)"

echo "replace for Alan Cox NPTL Patch"

#
# Patch for s/recalc_sigpending(current)/recalc_sigpending()/g
#           s/p_opptr/real_parent/g
#           s/sigmask_lock/sighand->siglock/g
#

cd $K_DIR

list=$(find . -name '*.c' -type f -exec egrep -q "recalc_sigpending\(current\)" {} \; -print); for i in $list; do echo "1,$ s/recalc_sigpending(current)/recalc_sigpending()/g | wq" | ex $i && echo "patched $i" ; done
list=$(find . -name '*.c' -type f -exec egrep -q "p_opptr" {} \; -print); for i in $list; do echo "1,$ s/p_opptr/real_parent/g | wq" | ex $i && echo "patched $i" ; done
list=$(find . -name '*.c' -type f -exec egrep -q "sigmask_lock" {} \; -print); for i in $list; do echo "1,$ s/sigmask_lock/sighand->siglock/g | wq" | ex $i && echo "patched $i" ; done

ln -sf /usr/src/linux-2.4.22 /usr/src/linux

cd /usr/src/linux
echo "1,$ s/gcc32/gcc/g | wq" | ex Makefile
這樣就可以準備 make 一份 NPTL 的 Kernel 了..

... make 好之後, 重開機..

cd /usr/portage/sys-libs/glibc

編輯 glibc-2.3.3_pre20040207.ebuild
把 export MIN_NPTL_KV = "xxx" 改成 export MIN_NPTL_KV="2.4.22"

再 USE="nptl" emerge glibc-2.3.3_pre20040207.ebuild

成功之後, /lib/libc.so.6 就會看到類似這樣的畫面..

語法:
Compiled by GNU CC version 3.3.3 20040217 (Gentoo Linux 3.3.3, propolice-3.3-7).
Compiled on a Linux 2.4.22-ac1-nptl system on 2004-04-01.
Available extensions:
        GNU libio by Per Bothner
        crypt add-on version 2.1 by Michael Glad and others
        NPTL 0.60 by Ulrich Drepper <-- NPTL support 了 ;)
        BIND-8.2.3-T5B
        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Thread-local storage support included.
Report bugs using the `glibcbug' script to <[email protected]>.
沒想到我竟然在 4/1 弄 NPTL 到 AM 4:00

回覆
進階會員
NPTL ??
NPTL = Native POSIX Threading Library ??
看了一點點文件,不知 dou0228 兄用了這個,對Java來說,果真有相當程度的提升 ?
回覆
拉登長官

是的, 正是 Native POSIX Threading Library..

我試了一下, thread 的 create & join 速度皆有提升..

pthread_create(), pthread_join()..

特別的一點是, pthread_create() 之後, 不再像以前一樣, 有一大堆 pid 在那了..

Java 的話, 那要看是 Native Thread 或是 Green Thread 了..
不過基本上我還是使用 Thread Pool 在跑..

雖然 Java 本來就慢的可以, 但是 Thread Pool 或多或少可以提升一點效率
回覆
進階會員

之前曾在 FreeBSD 上使用 Linuxthreads,程式一 run 下去,它的確會產生一堆的 PID 在那邊
,搞的好像是 multi processes 的東西那樣,也曾把 Mysql 利用 LinuxThreads 來運作, 也是
一樣的情形,今天聽你一講,才知道原來它在 Linux下面也會這樣。
(我對 Linux不熟,但是總是拿 Linux 的東西在 FreeBSD 上惡搞 )。

至於 Java .....
回覆
拉登長官

會有一大堆 PID 是因為 LinuxThread 是 "Lightweight" *Process*
是使用 clone() 這一個 system call 去完成的..

會看到一大堆 PID, 說是好處也是, 說是壞處也是..
好處是, 你可以看到那些 Threads 的 status: sleep, running, ...
壞處是, 有多少 Threads 就吃掉 Threads + 1 個 pid.. ( 算是一種浪費 )
回覆
進階會員

原來是用了clone(),但是一直感覺很像 fork(),原來之間有密切的關係。

但是 Thread 的確還是 Thread,只是感覺好像應用了 parent process 來控制
一些生出來的 child processes的資源利用。

這就非常符合你所說的 Lightweight" *Process*

child process 所需要的系統資源並不是自己生出來的,而是取於 parent process 所用的(共用的觀念) , 這正是 thread 的重要觀念之一。
不同於一般 unix 所用的 mutli process,是自己獨占系統資源。

dou0228兄,多講一些吧。糾正糾正我的觀念吧

回覆
主題工具


類似的主題
主題 主題作者 討論版 回覆 最後發表
Tomato with kernel 2.6 (Asus RT-N16 support) FYI -- 網 路 硬 體 版 19 2010-01-28 08:17 AM
【軟體】NT Kernel Resources: Virtual Network Interface - VirtNet FYI -- 網 路 技 術 版 0 2006-11-07 04:10 PM
HOWTO setup a home-server(gentoo) repsol -- FreeBSD & Linux 討 論 版 0 2006-06-21 12:31 PM
【求助】Red Hat 9.0 怎麼更新 kernel lds0718 -- FreeBSD & Linux 討 論 版 5 2004-03-16 03:41 AM
關於更新 kernel... Man -- FreeBSD & Linux 討 論 版 5 2002-01-04 12:33 PM






 XML   RSS 2.0   RSS 
本站使用 vBulletin 合法版權程式
站務信箱 : [email protected]

本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。