Gentoo Linux altında "Native POSIX Thread Library"
From Lapis Wiki
Bu makale NASIL bölümü serisinin bir parçasıdır
|
| MasaÜstü • Donanım • Ağ • Dağıtımlar |
| Tarayıcılar• Programlama • Linux ve Oyunlar |
Konu başlıkları |
NPTL Nedir ?
İlk önce NPTL nedir kısaca açıklayalım.
Linux altında Kernel 2.0 sürümünden beri "linuxthreads" adı verilen Threading-Kütüphaneleri vardır. Bu kütüphaneler libc5 ve 1996 yılındaki kernel yapısına göre oluşturulmuştur. Threading kütüphaneleri sürekli olarak zaman içinde günümüz şartlarına göre düzeltilmiş fakat günümüze/zamana uygulunluğu ise herzaman tartışılmıştır.
Çözüm ise komple yeni bir Threading kütüphaneleri yazmaktan yana bulundu. Çünkü mevcut Threading sisteminde kernel devamlı olarak SIGSTOP ve SIGCONT gibi sinyaller ile meşgul ediliyor veya bu sinyalleri önuyumlu (synchronuous) hale sokmaya çalışıyordu. Bu ise performansı etkiliyor ve kernel devamlı bu sinyaller ile savaş vermek zorunda olduğu için, sistem yavaşlıyor, dolayısı ile perfomans düşüyordu.
Redhat ve IBM sponsorluğunda 2002 yılında çalışmaya başlandı. Ingo Molnar ve Ulrich Drepper adında iki glibc hacker i büyük bir projeye imza attılar ve 2002 ağustosunda kernel 2.5 serisinde yeni NTPL desteğini sağladılar.
Yeni NPTL destekli bir P 400 PC de, paralel olarak 2 sn gibi kısa bir zamanda 100.000 Thread açmak artık çok kolay hale geldi. Aynı zamanda açılan bu thread lar performanslarını kaybetmiyorlardı.
İlk NPTL desteği veren firma ise Redhat oldu ve onu diğer birçok büyük sürümler izlemeye başladı. (Kullandığınız sürümün desteklediğini web sayfasından kontrol ediniz)
Gentoo altında nasıl etkinleştiririm?
Şimdi XXX Adımda Gentoo Linux altında nasıl NPTL aktif edebileceğinizi anlatalım. Öncesini ve sonrasını tespit edebilmek için aşağıdaki çıktıya dikkatle inceleyin.
Henüz NPTL etkin olmayan bir çıktı
# /lib/libc.so.6
GNU C Library stable release version 2.3.3, by Roland McGrath et al.
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 3.3.3 20040412 (Gentoo Linux 3.3.3-r6, ssp-3.3.2-2, pie-8.7.6).
Compiled on a Linux 2.4.21 system on 2004-06-14.
Available extensions:
GNU libio by Per Bothner
crypt add-on version 2.1 by Michael Glad and others
linuxthreads-0.10 by Xavier Leroy
BIND-8.2.3-T5B
libthread_db work sponsored by Alpha Processor Inc
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Report bugs using the `glibcbug' script to <bugs@gnu.org>.
Başka bir çıktı da JAVA uygulamarında. Aşağıdaki çıktıyı inceleyin:
Henüz NPTL etkin olmayan bir JAVA uygulamasının TOP ile görüntüsü
top - 15:58:48 up 3 min, 2 users, load average: 1.32, 0.67, 0.26 Tasks: 86 total, 2 running, 84 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0% us, 4.7% sy, 1.7% ni, 0.0% id, 93.0% wa, 0.7% hi, 0.0% si Mem: 969324k total, 490464k used, 478860k free, 181096k buffers Swap: 2008116k total, 0k used, 2008116k free, 92360k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 16566 skwong 18 0 270m 66m 64m S 0.0 7.1 0:00.11 java 16567 skwong 16 0 270m 66m 64m S 0.0 7.1 0:00.00 java 16568 skwong 16 0 270m 66m 64m S 0.0 7.1 0:01.15 java 16569 skwong 16 0 270m 66m 64m S 0.0 7.1 0:00.00 java 16570 skwong 16 0 270m 66m 64m S 0.0 7.1 0:00.01 java 16571 skwong 20 0 270m 66m 64m S 0.0 7.1 0:00.00 java 16572 skwong 20 0 270m 66m 64m S 0.0 7.1 0:00.00 java 16573 skwong 16 0 270m 66m 64m S 0.0 7.1 0:00.03 java 16574 skwong 16 0 270m 66m 64m S 0.0 7.1 0:04.74 java 16575 skwong 16 0 270m 66m 64m S 0.0 7.1 0:05.56 java 16576 skwong 15 0 270m 66m 64m S 0.0 7.1 0:00.00 java 16581 skwong 16 0 270m 66m 64m S 0.0 7.1 0:00.00 java ...
Mavi ile işaretli olan yerlerden de anlaşılacağı üzere, henüz NPTL desteğimiz mevcut değil. Aşağıdaki işlemleri tamamladıktan sonra en aşağıda etkinleşmiş haldeki çıktı ile karşılaştırabilirsiniz. İşlemler bittikten sonra göreceksiniz ki, Threading olayı çok daha güzel bir şekilde çalışıyor ve sistem daha rahat daha hızlı bir şekilde görevini yapmaya çalışıyor.
Şimdi yapacaklarımıza gecelim.
Ön Hazırlık
İlk önce sistemimizi en güncel portage ile güncelleyelim. Sonra ufed programını kuralım. Çünkü bu program sayesinde USE Flagsların yönetimi daha kolay. En son olarak da ufed programını çalıştıralım:
# emerge sync # emerge ufed # ufed
ufed programı çalıştırdıktan sonra aşağıdaki 5 Flags'ın etkin olmasını sağlayın, yani çıkan menüden başlarına X işareti koyun:
[ X ] cjk [ X ] nls [ X ] unicode [ X ] ssl [ X ] nptl
Headers Paketlerinin Kurulumu
Bu adımda sadece eski kernel-header paketlerini silmeniz ve tekrar kurmanız yeterli:
# emerge -C linux-headers # emerge linux-headers
GlibC Derlenmesi
Bu adımda yapcak fazla birşey kalmadı. Sadece GLIBC yi tekrardan emerge etmek yeterli olacaktır.
( NTPL destekli glibc derliyoruz)
# ACCEPT_KEYWORDS="~x86" emerge gcc-config glibc binutils gcc
III. Yaptıklarımızın Kontrolu
NPTL desteği herhangi bir hata yapmadıysanız çalışır durumda olması lazım. kontrol etmel için "/lib/libc.so.6" komutunu vermeniz yeterli. Aşağıdaki çıktıda koyu yazilmis yerleri inceleyin.
( NPTL destekli /lib/libc.so.6 veya /lib/tls/libc.so.6 çıktısı)
GNU C Library 20040808 release version 2.3.4, by Roland McGrath et al. Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiled by GNU CC version 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6). Compiled on a Linux 2.6.8 system on 2004-09-08. Available extensions: GNU libio by Per Bothner crypt add-on version 2.1 by Michael Glad and others Native POSIX Threads Library by Ulrich Drepper et al BIND-8.2.3-T5B NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk Thread-local storage support included. For bug reporting instructions, please see: <http://www.gnu.org/software/libc/bugs.html>.
Görüldüğü gibi NPTL desteğimiz etkinleşti.
Peki Java uygulamalarının durumu nasıl ? Hemen bir java uygulaması çalıştırıp, "top" komutu ile inceleyelim:
( NPTL destekli Java uygulamalı bir çıktı )
top - 15:53:29 up 24 min, 2 users, load average: 0.07, 0.06, 0.02 Tasks: 31 total, 1 running, 30 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0% us, 0.0% sy, 0.0% ni, 100.0% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 969324k total, 133472k used, 835852k free, 7676k buffers Swap: 2008116k total, 0k used, 2008116k free, 57628k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4029 skwong 19 0 267m 64m 61m S 0.0 6.8 0:00.10 java 3754 xfs 16 0 6392 4588 2632 S 0.0 0.5 0:00.13 xfs 4006 skwong 15 0 6152 2000 5696 S 0.0 0.2 0:00.02 sshd
Görüldüğü gibi daha derli toplu gözüküyor.
Son Olarak
Test sonuçlarında Java uygulamalarının çok daha hızlı çalıştığı tespit edilmiştir.
Gentoo Linux altında NPTL desteği sağlamak gerçekten çok büyük avantajları da beraberinde getiriyor. Özellike sistem performansınıda artırıyor.
