Çok İşlemcili ve Dağıtık Sistemlere Giriş

advertisement
Çok İşlemcili ve Dağıtık
Sistemlere Giriş
Yetmeyen Yetemeyen Berimleme Kudreti
• Günümüzdeki bilgisayarlar ENIAC’ tan milyon kez daha hızlıdır ancak
hala her geçen gün daha fazlası istenmektedir.
• İklimi analiz etmek, genleri açığa çıkarmak, protein katlamak, kitle
imha silahları üretmek, evreni anlamak vb. devasa ölçekteki süreçler
muazzam berimleme gücü gerekir.
• Bir dönem bu gücü arttırmak, sadece işlemci saatini hızlı çalıştırarak
yapılabiliyordu.
Limitler
• Saat çarpanı konusunda limitlere yıllar önce erişilmiştir.
• Bilgisayarları oldukça küçültmek mümkündür ancak ısı yayılımı sıkıntısı
söz konusudur.
• 1 MHz mertebesinden 1GHz’ e çıkmak çip üretimindeki mühendislikle
ilgiliyken 1 THz çok daha fazlasını istemektedir.
Paralel Bilgisayarlar
• İşlemci hızını arttırmaktansa normal hızda çalışan CPU içeren ve
birbirleriyle paralel çalışan bilgisayarlar programlanabilir.
• 1000 işlemcili bilgisayarlar halihazırda kullanılmaktadır.
• Hız artışı için bilgisayarların paralel kullanılması önemli bir meseledir.
• Programlama genelde seri bir iştir, paralel programlama çözüm
bekleyen şu sorunlar içerir.
• Farklı bilgisayarlar arası bilgi nasıl paylaşılacaktır?
• İşleme koordinasyonu nasıl sağlanacaktır?
• İşletim sistemleri nasıl bu mantığa uyarlanacak veya oluşturulacaktır?
Çok İşlemcili Sistemler
a)
Paylaşımlı bellekli çok sayıda işlemci
b) Mesaj geçen çok sayıda bilgisayar
c)
Geniş alana dağıtılmış sistem
Paylaşımlı Bellekli Çok İşlemcili Sistemler
• Bütün işlemciler paylaşımlı belleği okuyabilir ve belleğe yazabilir.
• İşlemciler arası iletişim paylaşımlı bellek üzerindendir.
• Bu sistemlerde başka bir sürecin müdahalesi nedeniyle işlemci belleğe
yazdığı değerden farklı bir değer okuyabilir.
Veri Yolu Tabanlı Mimari ile Paylaşımlı Bellek
Kullanan İşlemciler
• Önbellek olmadan
• Önbellekli
• Önbellekli ve özel bellekli
Veri Yolu Tabanlı Mimari ile Paylaşımlı Bellek
Kullanan İşlemciler
• Her işlemci belleğe erişmeden önce veri yolunun meşgul olup
olmadığını kontrol etmek zorundadır.
• 3-4 CPU için uygundur ancak 32 CPU varken bant genişliği sıkıntı
olacaktır. Çözüm olarak her işlemciye önbellek eklenebilir.
• Bu durumda da önbellek uyumluluk protokolü gerekir, eğer bir işlemci
bir veya daha fazla önbellekteki bir kelimeyi yazmaya kalkarsa, «kirli»
önbellekler yazma öncesi belleğe yazılmalı ve «temiz» önbellekler
geçersizleştirilmelidir.
• Daha iyi bir çözüm olarak her işlemci yerelde özel bir bellek kullanır ve
paylaşımlı belleğe sadece paylaşımlı değişkenler kaydeder. Bu sayede
çakışmalar en aza indirilebilir. Derleyici yardımına ihtiyaç vardır.
Çaprazlayıcı Anahtar Kullanan UMA (Tekdüze
Bellek Erişimi) Çok İşlemciler
• Tek veri yollu sistemlerden
daha iyi bağlantı
performansına sahiptir.
• Bellek başına bir bağlantı
garantidir.
• Ancak bu sistemler tamamen
ölçeklenebilir nitelikte değildir.
Çok Çekirdekli Çipler
• Moore Yasası’ na göre bir çipe yerleştirilebilen transistör sayısı 18 ayda bir
iki katına çıkacaktır. Bu yasa 300 milyon civarı transistör içeren Intel Core 2
Duo çipleri için de geçerli olmuştur.
• Bütün bu transistörlerle çalışmak için önbelleği büyütmek performansı çok
az arttıracaktır. (şu anki boyut 25 MB)
• Bir diğer seçenek de aynı çipe iki veya daha fazla çip yerleştirmektir.
• Günümüzde mobil sistemler bile 4 çekirdekli işlemciler kullanmaktadır.
• Intel i7-6950X CPU 10 çekirdek içerirken bu sayı GPU’larda çok daha
fazladır. (örn. 2584 CUDA çekirdeği ile nVidia GeForce GTX 1080Ti)
• Çok daha fazla çekirdekli çipler üzerinde AR-GE devam etmektedir.
Çok Çekirdekli Çipler
• Paylaşımlı L2 önbelleği kaynak paylaşımı açısından iyidir ancak açgözlü
çalışan çekirdekler diğerlerinin işleyişini bozabilir.
• Intel işlemcilerde (a) çekirdekler L2 önbelleğini paylaşırken AMD’ de
(b) ise her çekirdeğe ayrı L2 alanı verilir.
(a)
(b)
Çok İşlemcili İşletim Sistemi Türleri
• Bir çok işlemcide CPU kaynağının çok sayıda kopyası olur.
• Fakat bu durum işletim sistemi tasarımını karmaşıklaştırır zira
işlemciler koordine çalışmak durumundadır.
• Her işlemcinin kendi işletim sisteminin olduğu yapılar
• Efendi-Köle (Master-Slave) çok işlemciler
• Simetrik çok işlemciler olmak üzere üç ana tür vardır.
Her İşlemcinin Kendi İşletim Sisteminin Olması
• Bellek statik olarak bölümlere ayrılır ve her işlemciye kendine özel bellek ve İS kopyası
verilir.
• n işlemci n ayrı bilgisayar gibi çalışır. Bu yaklaşım işletim sistemi veri yapılarını
paylaşmadan İS kodunu paylaşarak optimize edilebilir.
• n bilgisayara sahip olmaktan iyidir zira bütün diskler ve G/Ç aygıtları paylaşımlıdır.
• Farklı işlemcilerde çalışan süreçler arası iletişim bellek üzerinden sağlanabilir.
• Çok işlemci belleği dört CPU arasında paylaştırılmış lakin İS kodu ortak
kullanılmaktadır. Data kutuları işletim sisteminin her CPU için özel olan verileridir.
Veri yolu
Her İşlemcinin Kendi İşletim Sisteminin Olması
• Bir süreç bir sistem çağrısı yaptığında bu çağrı sürecin yer aldığı İS
kopyası içindeki veri yapılarını kullanan CPU tarafından ele alınır.
• Süreçler paylaşılmaz. Her CPU kendi zamanlamasını yapar.
• Eğer bir kullanıcı 1. CPU’ ya giriş yaparsa bütün süreçleri 1. CPU’ da çalışır.
• Sayfalar paylaşılmaz. 1. CPU ha bire sayfalama yaparken 2. CPU’ da
boş sayfalar olması mümkündür.
• Eğer bütün işletim sistemleri az önce kullanılan disk bloklarının bir
tampon önbelleğini barındırırsa tutarsız sonuçlar oluşabilir. Tampon
önbellekleri devre dışı bırakılabilir ama başarıma zarar verir.
• Hızlı taşıma için iyi olsa da günümüzde kullanımı çok nadirdir.
Efendi-Köle Çok İşlemciler
• 1. CPU işletim sistemi ve veri yapılarını çalıştırır. Bir CPU boşta
beklerken işlemek üzere işletim sisteminden süreç talep edebilir.
• Sayfalar bütün süreçler arasında dinamik olarak tahsis edilebilir.
Sadece bir tampon önbelleği vardır, tutarsızlık oluşmaz.
• Bütün sistem çağrıları işlenmek üzere 1. CPU’ ya yönlendirilir. 1. CPU
bu çağrılarla dolabilir. Bu yapı az CPU için iyidir ancak ölçeklenemez.
Veri yolu
Simetrik Çok İşlemciler
• Bellekte işletim sisteminin bir kopyası vardır ama bütün işlemciler
bunu çalıştırabilir.
• Bir sistem çağrısı yapıldığında o CPU çekirdeğe tuzak açar ve işletir.
• İS veri yapıları paylaşıldığından süreçler ve belleği dinamik olarak
dengeler. Efendi CPU darboğazı aşılmış olur. Lakin senkronizasyon
şarttır.
Veri yolu
Kilitler
Simetrik Çok İşlemciler
• İki CPU çalıştırmak için aynı süreci seçerse veya iki süreç aynı boş bellek
sayfasını isterse senkronizasyon sıkıntısı çıkar.
• Senkronizasyon temel bileşenleri kullanılabilir. İS ile bir karşılıklı dışlama
(mutex) kilidi tanımlanarak İS kodu devasa bir kritik bölge olarak
tanımlanabilir.
• Her CPU bir anda bir kez olmak üzere çekirdek (kernel) modunda çalışabilir.
İşe yarar ama efendi-köle kadar kötü bir çözümdür.
• İşletim sistemlerinin çoğu bölümü birbirinden bağımsızdır. Bir CPU
zamanlayıcıyı çalıştırırken diğeri bir dosya sistemi çağrısıyla, bir üçüncüsü
de sayfa hatasıyla ilgilenebilir.
• İşletim sistemini çok sayıda birbirine karışmayan bağımsız kritik bölgelere
ayırmak gerekir. Her kritik bölgenin kendine ait kilidi olabilir.
• Lakin süreç tabloları (zamanlama ve fork() için) gibi bazı tablolar birden
fazla kritik bölge tarafından kullanılmaktadır.
Simetrik Çok İşlemciler
• Buradaki sıkıntı böyle bir bilgisayar için İS kodu yazmaktan ziyade İS
kodunu farklı işlemciler tarafından koşut zamanlı çalıştırılabilen kritik
bölgelere ayırmaktır.
• Çok sayıdaki kritik bölgeler tarafından kullanılan bütün tablolar bir
mutex ile ilişkilendirilmelidir ve tabloyu kullanan bütün kodlar mutex’i
doğru kullanmalıdır.
• Ölümcül kilitlenmeler büyük bir tehdit unsurudur. Eğer iki kritik bölge
aynı anda A ve B tablolarına ihtiyaç duyarlarsa eninde sonunda
ölümcül kilitlenme yaşanacaktır. Bunu önlemek için tablolar
numaralandırılır ve süreçler tarafından artan sırayla elde edilir.
Çok İşlemcili Senkronizasyon
• Çok işlemciler için bir zarurettir. (örn. çekirdek veri yapılarına erişmek
için mutex kullanmak)
• Tek işlemcili bilgisayarlarda senkronizasyon zordur. CPU kesmeleri
devre dışı bırakabilir. Çok işlemcilerde ise bundan sadece bir CPU
etkilenir.
• Test_and_set komutu ile bellekten bir kelime okunur ve bir yazmaça
kaydedilir. Bu komut eş zamanlı olarak bellek kelimesine 1 yazar.
Bellekten okuma ve belleğe yazma için iki çevrim (cycle) gerekir.
• Tek işlemcili bilgisayarda sorun olmamakla birlikte, çok işlemcili
bilgisayarda ek desteğe ihtiyaç duyulur.
Çok İşlemcili Senkronizasyon
• Donanım TSL talimatının diğer işlemcilerin erişimini engelleyerek veri
yolunu kilitlemesini, ardından her iki bellek erişimini yapmasını ve veri
yolunu serbest bırakmasını desteklemelidir.
• Karşılıklı dışlama garantilenir ancak diğer işlemciler dönen kilitli
bırakılarak yalnızca CPU zamanını israf etmekle kalmaz, aynı zamanda
veri yolu ve belleğe yük bindirir.
TSL talimatı eğer veri yolu
kilitlenemezse başarısız olabilir.
Şekildeki dört adım ile böyle bir
durum gösterilmektedir.
Veri yolu
Çok İşlemcili Senkronizasyon
• Önbellekleme üzerinden veri yolu yükü artış problemi çözülebilir mi?
• Teoride CPU kilit kelimesini okuduğu zaman önbelleğinde bir kopya
oluşturmalıdır. Peşi sıra gelen bütün okumalar bu önbellekten elde
edilebilir. Önbellekte dönen kilitle bekleme veri yolu yükünü serbest
bırakır.
• Kilidi tutan CPU kilide yazdığı zaman, diğer bütün CPU
önbelleklerindeki kopyalar geçersiz hale gelir. Diğer CPU’lar yeni bir
kopya istemek zorunda kalır.
Dönmek mi Değiştirmek mi?
• Bir kilit için dönmek tek seçenek değildir.
• Çok işlemcili bir sistemde CPU bir kilit için dönmek yerine çalıştırmak
için başka bir ipliğe geçmeye karar verebilir.
• Bunun da cezası ek bir değişiklik yükü (context switch) ve geçersiz
kılınan önbellek olur.
• Her iki seçenek de pekala yapılabilir. Ancak ne zaman hangisinin
yapılacağı ayrı bir araştırma konusudur.
Çok İşlemcili Zamanlama
• Tek işlemcili zamanlamada zamanlayıcı sonraki adımda hangi ipliğin
çalışacağını seçer.
• Çok işlemcili zamanlamada iplikle birlikte hangi CPU’ nun kullanılacağı
da seçilmelidir.
• Mevzuyu karıştıran başka bir etmen de iplik ilişkileridir.
• Çok kullanıcılı zaman paylaşımlı ortamlarda olduğu üzere alakasız
iplikler veya beraber çalışan bazı uygulamaların (örn. derleyicilerin
make komutu) iplikleri gibi alakalı iplikler.
• Alakasız iplikler için zaman paylaşımı, alakalı iplikler için mekan
paylaşımı ve çete zamanlama (gang scheduling) algoritmaları vardır.
Sanallaştırma
• Bir bilgisayar sisteminde her biri farklı işletim sistemi çalıştıran sanal
makineler yönetilebilmesidir.
• Aslında 40 yıldan fazladır (IBM/370) bilinse de kullanımı son zamanlarda
yaygınlaşmıştır.
• Yazılım hatalarına karşı dayanıklılık sağlar. Ayrıca mevcut donanım ve
işletim sisteminin desteklemediği uygulamalar çalıştırılabilir.
• Sunucu barındıran bütün kurum ve kuruluşlarda farklı makineler kullanılır.
• Ancak artan ihtiyaçlar donanım, enerji tüketimi ve bakım masraflarını da
beraberinde getirir.
• Farklı işletim sistemleri için yazılım geliştirmede kolaylık sağlar.
Sanal Makineler
• Mantıksal değerlendirmesine katmanlı bir yaklaşım izler. Donanım ve
işletim sistemi çekirdeğine hepsi donanımmış gibi davranır.
• Donanıma denk bir arayüz sağlar.
• İşletim sistemi her biri kendi işlemcisinde kendi (sanal) belleğiyle
çalışan çoklu süreç illüzyonunu oluşturur.
• VMWare, Sun VirtualBox, QEMU
Java Sanal Makinesi
Sanallaştırma Meseleleri
• Ev sahibi İS sayfalamasını sanal İS sayfalamasına nasıl entegre edilir?
• Sanal İS veya ev sahibi İS aygıt sürücülerinin hangileri kullanılır?
• Her çekirdek (core) belli bir sayıda sanal makine çalıştırabilir. Bunlar
arası bellek paylaşımı nasıl olur?
• Bazı yazılımlar CPU başına lisanslanmaktadır. Sanal makinelerde bu
durum nasıl ele alınır?
Dağıtık Sistemler
• Bir iletişim ağıyla birbirine bağlanan gevşek bağlı işlemciler
bütünüdür.
• Bu sistemlerde işlemcilere düğüm, bilgisayar, makine veya sunucu da
denmektedir. İşlemcinin konumuna site (alan) denir.
• Genellikle sunucular farklı bir sitedeki istemci düğümün kullanmak
istediği kaynaklara sahiptir.
Dağıtık Sistemler
Nesne
Çok Sayıda İşlemci
Çok Sayıda Bilgisayar
Dağıtık Sistem
Düğüm konfigürasyonu
CPU
CPU, RAM, ağ arayüzü
Bütün bilgisayar
Düğüm donanımı
Hepsi paylaşımlı
Disk vb. dışında paylaşımlı
Düğüm başına bütün set
Konum
Aynı kart veya rak
Aynı oda
Dünya çapında olabilir
Düğümlerarası iletişim
Paylaşımlı RAM
Birbirine bağlı ve atanmış
Geleneksel ağlar
İşletim sistemleri
Bir ve paylaşımlı
Çok sayıda, aynı
Muhtemelen hepsi farklı
Dosya sistemleri
Bir ve paylaşımlı
Bir ve paylaşımlı
Her düğümün kendine ait
Yönetim
Bir kuruluş
Bir kuruluş
Çok sayıda kuruluş
Üç farklı çoklu CPU sisteminin karşılaştırılması
29
Niye Kullanılır?
• Uzak alanlarda dosya paylaşma ve yazdırma, dağıtık veritabanında bilgi
işleme ve uzak kullanım için özelleştirilmiş donanım aygıtlarını kullanma
olmak üzere kaynak paylaşımı
• Yük paylaşımı veya iş göçü (migration) ile hesaplama hızını arttırma
• Alandaki başarısızlığı tespit ve sistemi kurtarma, fonksiyon transferi ve
çalışmayan alanı tekrar sisteme dahil etme şeklinde güvenilirliği arttırma
• Bağımsız bir sistemin bütün yüksek seviye işlevleri dağıtık bir sistemi
kapsayacak ölçüde genişletilebilir.
• Bilgisayarlar geniş sistemlerin, çok sayıda küçük sisteme bölünmesiyle daha
esnek hale gelecek şekilde küçültülebilir. Bu sayede daha iyi kullanıcı
arayüzleri ve kolay bakım sağlanabilir.
Aracı Yazılım (Middleware)
• Aracı yazılım katmanı uzaklara yayılmış makinelerdeki süreç ve
kullanıcıların tutarlı bir şekilde birlikte çalışmalarına imkan veren
çeşitli veri yapıları ve işlemleri sağlamaktadır
• Bir bakıma bir dağıtık sistemin işletim sistemi gibidir.
• Şekilde bir dağıtık sistemde aracı yazılımın konumlandırılması
gösterilmektedir.
Doküman Tabanlı Aracı Yazılım
• Internet ağı (WWW) devasa bir hiperbağlantılı dökümanlar bütünü
olarak görülebilecek bir dağıtık sistemdir.
• Temelde bir istemci-sunucu sistemidir.
Doküman Tabanlı Aracı Yazılım
Bir tarayıcı http://www.minix3.org/doc/faq.html sayfasına ulaşırken
• Tarayıcı sitesinin www.minix3.org sitesinin IP adresini DNS’ ten ister.
• DNS 130.37.20.20 karşılığını verir.
• Tarayıcı 130.37.20.20 üzerindeki 80. bağlantı noktasına bir TCP bağlantısı yapar.
• Ardından doc/faq.html dosyasını isteyen bir talep gönderir.
• www.acm.org sunucusu doc/faq.html dosyasını gönderir.
• TCP bağlantısı serbest bırakılır.
• Tarayıcı doc/faq.html içindeki bütün metni gösterir.
• Tarayıcı doc/faq.html içindeki bütün resimleri çeker ve gösterir.
33
Koordinasyon Tabanlı Aracı Yazılım
• Linda, iletişim ve senkronizasyon için kullanılan bir sistemdir.
• Bağımsız süreçler soyut bir sıralı ikili, üçlü.. uzayı aracılığıyla iletişime geçer.
• Bir sıralı ikili, üçlü.. her biri ana dil taraşından desteklenen bazı türler için
bir değer olan bir veya daha fazla alandan oluşan bir yapıdır.
Figure 8-40. Three Linda tuples.
İkilileri, Üçlüleri… (Tuple)Eşleştirme
• Şablon ve tüple aynı sayıda alana sahipse
• Karşılık gelen alanların türler aynıysa
• Şablondaki her sabit veya değişken tuple alanıyla eşleşiyorsa
• Bir eşleşme/uyuşma söz konusudur.
Jini
Apache River olarak da bilinen modüler birlikte çalışan hizmetler
biçiminde dağıtık sistemlerin inşası için bir ağ arayüzüdür.
Jini istemci ve sunucuları Linda tuple uzayında modellenen JavaSpaces
kullanarak iletişime geçer ve senkronize olur.
JavaSpace içinde tanımlanan metodlar:
1.Yazma: JavaSpace içine yeni bir girdi koyar.
2.Okuma: JavaSpace dışındaki bir şablona uyan bir girdiyi kopyalar.
3.Alma: Bir şablona uyan bir girdiyi kopyalar ve siler.
4.Bildirme: Eşleşen bir girdi yazıldığında çağırana bildirim yapar.
Şebekeler (Grids)
• Bir şebeke özel bir ağ veya Internet ile birbirine bağlı ve kullanıcılarına
belli hizmetler sunan, geniş, coğrafik olarak ayrılmış ve genelde
heterojen makineler koleksiyonudur.
• Bir şebeke oluşturma ihtiyacı bir kuruluşun ihtiyaç duymadığı
berimleme gücünü başka bir kuruluşun kullanımına verebilmesinden
kaynaklanabilir.
• Şebeke dünyasındaki popüler bir aracı yazılım, Globus araç takımıdır.
(toolkit) Globus; bilgisayarları, dosyaları ve diğer kaynakları
paylaştırarak dağıtık uygulamalar oluşturmak için bir çerçeve yapı
(framework) sağlar.
Hata Tespiti
• Donanım hatasını tespit etmek güçtür.
• Bir bağlantı hatasını tespit için kalp atışı protokolü kullanılabilir.
• Birbirine bağlı A ve B alanları belli aralıklarda birbirlerine «Ben buradayım»
mesajı gönderir.
• Eğer A alanı bu mesajı almazsa diğer sitenin göçtüğünü veya mesajın
kaybolduğunu kabul eder.
• Bu durumda A alanı «Orada mısın» mesajı gönderir. Cevap gelmezse ya
mesajı tekrarlar ya da B alanına giden başka bir yol dener.
• Eğer hiçbir şekilde bir cevap alamazsa B alanı göçmüş, A ve B arası
doğrudan veya dolaylı bağlantı kopmuş veya mesaj kaybolmuştur. A alanı
hatanın tam olarak neden kaynaklandığını bilemez.
Yeniden Ayarlama
• A alanı bir hata olduğunu belirlediğinde sistemi yeniden ayarlamalıdır.
• A ve B bağlantısı koptuysa sistemdeki bütün alanlara yayınlanmalıdır.
• Bir alan göçtüyse, diğer bütün alanlara göçen sitenin sunduğu
hizmetlerin artık kullanılamayacağı bildirilmelidir.
• Bağlantı veya alan tekrar müsait olursa, bu bilgi bütün alanlara tekrar
yayınlanmalıdır.
Tasarım Meseleleri
• Transparanlık: Dağıtık sistem kullanıcıya konvansiyonel ve
merkezileşmiş bir sistem olarak görünmelidir.
• Hata Toleransı: Dağıtık sistem başarısızlıkla karşılaştığında çalışmaya
devam etmelidir.
• Ölçeklenebilirlik: İhtiyaçlar arttığında sistem, artan talebi karşılamak
üzere yeni kaynakların eklenmesini kolayca kabul etmelidir.
• Hadoop açık kaynaklı programlama arayüzü ile (Google arama indeksine
dayanan) dağıtık ortamlardaki geniş veri kümeleri işlenebilmektedir.
• Kümeler: Tek bir sistem gibi davranan yarı otonom makineler
koleksiyonudur.
Download