Gentoo Linux altında "Native POSIX Thread Library"

From Lapis Wiki

Jump to: navigation, search
Bu makale NASIL bölümü serisinin bir parçasıdır
MasaÜstü Donanım 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.


Kaynaklar