Gentoo Linux 下跑 2.4 Kernel + NPTL 先下載: [url]http://ccrma-www.stanford.edu/planetccrma/mirror/all/linux/SRPMS/kernel-2.4.22-1.2140.nptl.caps.src.rpm[/url] 再來就是把 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 [code] #!/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 [/code] 這樣就可以準備 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 就會看到類似這樣的畫面.. [code] 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]>. [/code] 沒想到我竟然在 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 或多或少可以提升一點效率 :p |
之前曾在 FreeBSD 上使用 Linuxthreads,程式一 run 下去,它的確會產生一堆的 PID 在那邊 ,搞的好像是 multi processes 的東西那樣,也曾把 Mysql 利用 LinuxThreads 來運作, 也是 一樣的情形,今天聽你一講,才知道原來它在 Linux下面也會這樣。 (我對 Linux不熟,但是總是拿 Linux 的東西在 FreeBSD 上惡搞 :p )。 至於 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兄,多講一些吧。糾正糾正我的觀念吧 |
所有時間均為 +8。現在的時間是 05:14 AM。 |
XML | RSS 2.0 | RSS |
本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。