DGridSim Gerçek Zamanlı Veri Grid Simülatörü Gerçek-Zamanlı Veri Dağıtımı Dokümanı v 1.0.1 01.08.2011 Mustafa Atanak Sefai Tandoğan Doç. Dr. Atakan Doğan
1. Tek Rotadan Veri Dağıtımı 1.1 Gerçek-Zamanlı Rota Seçimi Algoritmaları 1.1.1 En Az Atlamalı Uygun Rota Algoritması En Az Atlamalı Uygun Rota (Minimum Hop Feasible Path First - MinHop/FPF) Algoritması Şekil 1 de gösterilmiştir. Bu algoritma, Bellman-Ford en kısa yol algoritması temel alınarak hazırlanmıştır. Algoritma, kaynak-hedef arasındaki en az atlamalı uygun rotalara öncelik tanır. Rota hesaplanırken, sadece gerekli bant genişliğine sahip olan linkler kullanılır. Bellman-Ford algoritması, en az atlamalı yolun da içinde olduğu en kısa yol yaklaşımları için en verimli çalışan algoritmalardandır. MinHop/FPF programı //Giriş: G(V,E) ve istek r //Çıkış: istek r için en az atlamalı uygun rota p r.gereklibantgenişliği = r.veribüyüklüğü/r.sonzaman; for each köşe v in V if v is r.kaynak then v.atlamasayısı=0; else v.atlamasayısı=sonsuz; v.selef=boş; for each köşe v in V for each kenar e in E if e.bantgenişliği > r.gereklibantgenişliği if e.hedef.atlamasayısı > e.kaynak.atlamasayısı + 1 e. Hedef.AtlamaSayısı = e. Kaynak.AtlamaSayısı + 1; e.hedef.selef = e.kaynak; Şimdiki = r.hedef; repeat rota p ye (Şimdiki.Selef, Şimdiki) arasındaki linki ilave et; Şimdiki = Şimdiki.Selef; if Şimdiki == boş //kaynak-hedef arasında uygun rota bulunamadı return boş rota; until Şimdiki!= r.kaynak; return p; Şekil 1. MinHop/FPF algoritması.
MinHop/FPF kullanarak GZRS programı //Giriş: G(V,E) ve istek kümesi R //Çıkış: istek r ϵ R için en az atlamalı uygun rota p ϵ P p = MinHop/FPF (G, r); Şekil 2. MinHop/FPF kullanarak GZRS algoritması. Bellman-Ford en kısa yol algoritması O( V E ) de çalışır. Dolayısı ile MinHop/FPF algoritması da O( V E ) de ve MinHop/FPF (Şekil 2) kullanarak GZRS algoritması da O( V E R ) de çalışır. 1.1.2 En Az Atlamalı En Az Gecikmeli Uygun Rota Algoritması MinHop/FPF, önceliği en az atlayışa sahip rotalara verirken, link gecikmelerini hesaba katmaz. Ancak toplam gecikmesi daha az olan rotalar, gecikmesi fazla olan rotalara göre önceliğe sahip olmalıdırlar. Gerekli önceliği vermek için bu çalışmada Şekil 3 te gösterilen En Az Atlamalı En Az Gecikmeli Uygun Rota (Minimum Hop Minimum Delay Feasible Path First - MinMin/FPF) algoritması önerilmiştir. Bu algoritmada, eğer iki rotanın atlama sayısı eşit ise, daha az toplam gecikmesi olan rotalar tercih edilir. MinHop/FPF algoritması O( V E ) de çözülür. MinMin/FPF algoritmasında ilave olarak her kenar için rota gecikmesi hesap edilir. Bu işlem, en kötü senaryo da E aşamada yapılır. Bu durumda MinMin/FPF algoritması bir istek için gerekli rotayı O( V E 2 ) de ve MinMin/FPF kullanarak GZRS algoritması (Şekil 4) da tüm rotaları O( V E 2 R ) de bulur. MinMin/FPF programı //Giriş: G(V,E) ve istek r //Çıkış: istek r için en az atlamalı en az gecikmeli uygun rota p //ilk kullanıma hazırlama r.gereklibantgenişliği = r.veribüyüklüğü/r.sonzaman; for each köşe v in V if v is r.kaynak then v.atlamasayısı=0 else v.atlamasayısı=sonsuz v.selef=boş;
//Bellman-Ford ana döngü for each köşe v in V for each kenar e in E if e.bantgenişliği > r.gereklibantgenişliği if e.hedef.atlamasayısı > e.kaynak.atlamasayısı + 1 e. Hedef.AtlamaSayısı = e. Kaynak.AtlamaSayısı + 1; e.hedef.selef = e.kaynak; else if e.hedef.atlamasayısı == e.kaynak.atlamasayısı +1 r.kaynak ile e.hedef arası link gecikmelerinin toplamını bul (PD1); r. Kaynak ile e.kaynak arası link gecikmelerinin toplamını bul (PD2); if PD1 > PD2 + e.gecikme e. Hedef.AtlamaSayısı = e. Kaynak.AtlamaSayısı + 1; e.hedef.selef = e.kaynak; Şimdiki = r.hedef; repeat rota p ye (Şimdiki.Selef, Şimdiki) arasındaki linki ilave et; Şimdiki = Şimdiki.Selef; if Şimdiki == boş //kaynak-hedef arasında uygun rota bulunamadı return boş rota; until Şimdiki!= r.kaynak; return p; Şekil 3. MinMin/FPF algoritması. MinMin/FPF kullanarak GZRS programı //Giriş: G(V,E) ve istek kümesi R //Çıkış: istek r ϵ R için en az atlamalı uygun rota p ϵ P p = MinMin/FPF (G, r); Şekil 4. MinMin/FPF kullanarak GZRS algoritması.
1.1.3 En Az Çakışmalı Uygun Rota Algoritması MinMin/FPF önceliği az atlamalı az gecikmeli rotalara öncelik verir. Ancak algoritma sonucu bulunan rotalar, bazı linkleri daha sık kullanıyor olabilirler. Bu durumda, bazı linkler az kullanılır iken bazıları da çok fazla kullanılır olabilirler. Yine linklerin kapasiteleri de farklılık göstermektedirler. Az bant genişliğine sahip linklerin bant genişliği kapasiteleri daha çabuk tükenir ve bu nedenle daha az kullanılmalıdırlar. Dolayısı ile istekler için rota bulma algoritması olarak MinHop/FPF veya MinMin/FPF kullanıldığında link kullanım yüzdeleri arasında ciddi dengesizlikler oluşabilir. Önerilen En Az Çakışmalı Uygun Rota (Minimum Contention Feasible Path First - MinCon/FPF) algoritmasında, öncelikle linklere ağırlık olarak 1 atanır. Şekil 5 te gösterilen MinCon/FPFalgoritması, en az ağırlıklı en az gecikmeli uygun rotayı bulur. Bu rota üzerindeki linklerin ağırlıkları ALPHA*AverageBandwidth/e.bandwidth kadar arttırılır. Formülde bulunan ALPHA, sıfırdan büyük bir parametredir. Linklere ilave edilen ağırlık, linkin bant genişliği ile ters orantılıdır. Bu durumda, daha az bant genişliğine sahip olan linkler, daha fazla ağırlığa sahip olacaklardır ve daha sonraki rotalarda seçilme olasılıkları da azalmış olacaktır. Söz konusu algoritmanın zaman karmaşıklığı, MinMin/FPF ile GZRS algoritması ile aynıdır. MinCon/FPF programı //Giriş: G(V,E), istek r ve link ağırlıkları //Çıkış: istek r için en az atlamalı en az gecikmeli uygun rota p //ilk kullanıma hazırlama r.gereklibantgenişliği = r.veribüyüklüğü/r.sonzaman; for each köşe v in V if v is r.kaynak then v.atlamasayısı=0; else v.atlamasayısı=sonsuz v.selef=boş; //Bellman-Ford ana döngü for each köşe v in V for each kenar e in E if e.bantgenişliği > r.gereklibantgenişliği if e.hedef.atlamasayısı > e.kaynak.atlamasayısı + e.ağırlık e. Hedef.AtlamaSayısı = e. Kaynak.AtlamaSayısı + e.ağırlık; e.hedef.selef = e.kaynak; else if e.hedef.atlamasayısı == e.kaynak.atlamasayısı + e.ağırlık r.kaynak ile e.hedef arası link gecikmelerinin toplamını bul (PD1); r. Kaynak ile e.kaynak arası link gecikmelerinin toplamını bul (PD2);
if PD1 > PD2 + e.gecikme e. Hedef.AtlamaSayısı = e. Kaynak.AtlamaSayısı + e.ağırlık; e.hedef.selef = e.kaynak; Şimdiki = r.hedef; repeat rota p ye (Şimdiki.Selef, Şimdiki) arasındaki linki ilave et; Şimdiki = Şimdiki.Selef; if Şimdiki == boş //kaynak-hedef arasında uygun rota bulunamadı return boş rota; until Şimdiki!= r.kaynak; return p; Şekil 5. MinCon/FPF algoritması. MinCon/FPF kullanarak GZRS programı //Giriş: G(V,E) ve istek kümesi R //Çıkış: istek r ϵ R için en az atlamalı uygun rota p ϵ P OrtalamaBantGenişliği ni bul; for each kenar e in E e.ağırlık = 1; p = MinCon/FPF (G, r, e.ağırlık Listesi); for each kenar e in E ϵ p e.ağırlık += ALPHA* OrtalamaBantGenişliği/e.BantGenişliği; Şekil 6. MinCon/FPF kullanarak GZRS algoritması. 1.1.4 Link Akış Sınırlamalı En Az Çakışmalı Uygun Rota Algoritması Link Akış Sınırlamalı En Az Çakışmalı Uygun Rota (Link-Flow Limited Minimum Contention Feasible Path First - LFL/MinCon/FPF) algoritması, MinCon/FPF algoritmasının daha da geliştirilmiş bir sürümüdür. MinCon/FPF kullanarak GZRS algoritmasında her geçişte linklere atanan ağırlıklar değiştirilerek çakışma sayısı azaltılmaya çalışılır. Ancak bazı linklerin çok kullanılması sorunu devam edebilir. LFL/MinCon/FPF de amaç, linklerin fazla kullanımının önüne geçerek çakışmaları azaltmaktır.
Öncelikle AZAMİ_LİNK_AĞIRLIĞI, bir parametre olarak belirlenir. Birinci geçişte AZAMİ_LİNK_AĞIRLIĞI na ulaşan linkler kullanılamaz olarak işaretlenir ve geçiş sona erene kadar bu linkler rota bulma işleminde kullanılamazlar. İkinci geçişin başında tüm linkler kullanılabilir durumdadır. 2*AZAMİ_LİNK_AĞIRLIĞI na ulaşan linkler kullanılamaz olarak işaretlenirler ve geçiş sonuna kadar kullanılamazlar. Geçişler, tüm istekler için birer rota bulunana kadar devam eder. Geçişler, en kötü durumda istek sayısı, R, kadar tekrar eder. Bu durumda Şekil 16 da gösterilen LFL/MinCon/FPF GZRS algoritması, MinCon/FPF kullanarak GZRS algoritmasından en kötü durumda R kadar yavaş çalışır. Algoritmanın zaman karmaşıklığı O( V E 2 R 2 ) olarak bulunur. LFL/MinCon/FPF GZRS programı //Giriş: G(V,E) ve istek kümesi R //Çıkış: istek r ϵ R için en az atlamalı uygun rota p ϵ P OrtalamaBantGenişliği ni bul for each kenar e in E e.ağırlık = 1; LoopCount = 1; do for each kenar e in E Kenar e yi G ye ilave et; p = MinCon/FPF (G, r, e.ağırlık Listesi); for each kenar e in E ϵ p e.ağırlık += ALPHA* OrtalamaBantGenişliği/e.BantGenişliği; if e.ağırlık > LoopCount* AZAMİ_LİNK_AĞIRLIĞI Kenar e yi G den çıkar; while Şekil 7. LFL/MinCon/FPF GZRS algoritması.
1.2 Gerçek-Zamanlı İstek Seçimi Algoritmaları 1.2.1 En Fazla Sayıda Çıkan Akışlı İstek Algoritması En Fazla Sayıda Çıkan Akışlı İstek (Maximum Number of Outgoing Flows First MNOFF) algoritması Şekil 8 de gösterilmiştir. MNOFF, ana döngüde GZRS algoritmalarının rotalara bağlı olarak bir çakışma grafiği oluşturur. Çakışma grafiği çift taraflı (bipartite) grafiktir ve şu şekilde oluşturulur: Her link için, linki kullanan istekler bulunur. Tüm isteklerin minimum bant genişliği ihtiyaçları kadar bant kullandıkları varsayılır. Bu durumda bant genişliği kapasitesini aşan linklere tıkanık link adı verilir. Çakışma grafiğinin sağ tarafına tıkanık linkler, sol tarafına ise tıkanıklığa sebep olan istekler yerleştirilir. Her bir istek ile o isteğin gerçekleşmesinde kullanılacak olan tıkanık linkler arasına bir bağlantı kurulur. Çakışma grafiğinde bulunan bir kenar, bir veya birden fazla isteğin karşılanamayacağını gösterir. Dolayısı ile en az bir istek çakışma grafiğinden silinmelidir. Her iterasyonda MNOFF en fazla sayıda çıkan akışa sahip olan köşeyi (çakışma grafiğinde en fazla sayıda kenara sahip olan istek) karşılanamaz olarak işaretler. Eşitlik durumunda, daha yüksek bant genişliği ihtiyacı olan istek işaretlenir. Karşılanamaz olarak işaretlenmemiş istekler kullanılarak prosedür tekrar edilir. Bu işlem, çakışma grafiğinde hiç tıkanık link kalmayana kadar tekrar eder. MNOFF programı //Giriş: G(V,E), istek kümesi R, ve rota kümesi P //Çıkış: karşılanabilir istek listesi //ilk kullanıma hazırlama r.durum = karşılanabilir; Çakışma grafiğini oluştur; //ana döngü while çakışma grafiğinde tıkanık link var r = çakışma grafiğinde en fazla sayıda çıkan akışlı istek; r.durum = karşılanamaz; Çakışma grafiğini güncelle; if r.durum == karşılanabilir KarşılanabilirİstekListesi ne r yi ekle; return KarşılanabilirİstekListesi; Şekil 8. MNOFF algoritması. Çakışma grafiğinin oluşturulması veya güncellenmesi O( E R ) zaman alır. En kötü durumda ana döngü R defa tekrar eder. Bu durumda MNOFF algoritması en kötü durumda O( E R 2 ) zaman alır.
1.2.2 En Fazla Miktarda Çıkan Akışlı İstek Algoritması Şekil 9 da gösterilen En Fazla Miktarda Çıkan Akışlı İstek (Maximum Outgoing Flows First Algorithm - MOFF) algoritması, genel olarak MNOFF algoritmasına benzer. Ancak MOFF algoritmasının eğer çakışma grafiğinde tıkanık link var ise, en fazla sayıda çıkan akışlı istek değil, en fazla miktarda çıkan akışlı istek karşılanamaz olarak işaretlenir. İstekler için çıkan akış miktarları ise, çıkan istek sayısının isteğin karşılanması için gerekli olan minimum bant genişliğine çarpılması sonucunda bulunur. MOFF algoritmasının zaman karmaşıklığı ile MNOFF algoritmasının zaman karmaşıklığı eşittir. MOFF programı //Giriş: G(V,E), istek kümesi R, ve rota kümesi P //Çıkış: karşılanabilir istek listesi //ilk kullanıma hazırlama r.durum = karşılanabilir; Çakışma grafiğini oluştur; //ana döngü while çakışma grafiğinde tıkanık link var r = çakışma grafiğinde en fazla miktarda çıkan akışlı istek; r.durum = karşılanamaz; Çakışma grafiğini güncelle; if r.durum == karşılanabilir KarşılanabilirİstekListesi ne r yi ekle; return KarşılanabilirİstekListesi; Şekil 9. MOFF algoritması.
2. Çoklu Rotadan Veri Dağıtımı 2.1 Gerçek-Zamanlı Rota Seçimi Algoritmaları Gerçek-zamanlı çoklu rotadan veri dağıtımı probleminin çözümü için öncelikle verinin gönderileceği k adet rotanın bulunması gereklidir. Bu işlem için k-en kısa yol veya k-en kısa ayrık yol gibi yaklaşımlar ile rotalar bulunur. 2.1.1 k-en Kısa Yol Algoritması 1. Dijkstra veya Bellman-Ford u kullanarak, linklerin kullanılabilir bant genişliklerinin çarpmaya göre terslerini link ağırlığı olarak al ve en kısa yolu bul. Bu rotayı, i=1 için i ninci rota olarak sakla. 2. B = boş küme 3. i ninci en kısa yoldan tüm sapmaları oluştur ve B ye ilave et. Bu çalışmada sapmalar aşağıdaki şekilde bulunmuştur. a. i ninci en kısa yolda bulunan link sayısı n olsun. b. x=1 den n e kadar aşağıdaki işlemi tekrar et c. i ninci en kısa yolun x inci linkini sil ve kalan linkler ile en kısa yolu bul. Eğer yol bulunmuş ise B kümesine ekle. 4. B kümesinin içinden en kısa yolu bul ve (i+1) inci yol olarak kaydet. 5. k adet rota bulunana kadar veya B eşittir boş küme olana kadar aşama 2 den itibaren tekrar et. 2.1.2 k-en Kısa Ayrık Yol Algoritması Önceki bölümde tanıtılan k-en kısa yol algoritması kullanılan rotalarda kullanılan link adedini düşürse de, bazı linklerin diğerlerine göre daha fazla kullanıldığı durumlar olabilir. Bu durumda bazı linklerin kullanım miktarları, diğerlerinden oldukça fazla olabilmektedir. Linklerin kullanım oranlarının mümkün olduğu kadar dengeli olabilmesi için k-en kısa ayrık yol yaklaşımı kullanılabilir. Bu yaklaşım, özellikle ağ yapısındaki bozulmalarda, sistemi çalışır hale getirme aşamasında kullanılır. 1. Dijkstra veya Bellman-Ford u kullanarak, linklerin kullanılabilir bant genişliklerinin çarpmaya göre terslerini link ağırlığı olarak al ve en kısa yolu bul. 2. Bulunan rota üzerindeki tüm linkleri ağ yapısından sil. 3. Kalan ağ üzerinden en kısa yolu bul. 4. k adet rota bulunana kadar veya kalan linkleri ile rota bulunamayana kadar ikinci adımdan itibaren tekrar et.
2.2 Gerçek-Zamanlı Rota Seçimi Algoritmaları Verinin gönderileceği rotalar bulunduktan sonra ise, veri transferi isteğinin başarılı biçimde gerçekleştirilebilmesi için hangi rotaya ne kadarlık akış tahsis edilmesi gerektiği problemi çözülmelidir. Tek rotadan veri dağıtımı bölümünde anlatıldığı üzere, önceki bölümde belirtilen GZRS algoritmalarından biri kullanılarak her istek için k-adet rota öncelikle bulunur. GZİS ise, daha once belirtildiği gibi, karşılanan istek sayısını en fazlaya çıkartacak şekilde karşılanan isteklerin seçilmesi problemidir. 2.2.1 Eşit Bölüşümlü Çoklu Rotadan Gönderim Eşit Bölüşümlü Çoklu Rotadan Gönderim (Equal Share Multi Path - ESMP) algoritması Şekil 10 da gösterilmiştir. ESMP algoritması, en fazla k rotayı kullanarak isteğin karşılanması için çalışır. Öncelikle tek rotadan gönderime çalışır. Olmaz ise, eşit miktarda veri transferi yapan iki rotadan gönderime çalışır. Bu işlem, en fazla k rotaya kadar tekrar edilir. Eğer k rotada da gönderim başarılı olmaz ise istek karşılanamaz durumdadır. ESMP programı //Giriş: G(V,E), istek kümesi R, ve rota kümesi P //Çıkış: karşılanabilir istek listesi //ana döngü r.durum = karşılanamaz; k adet rota bul; i=1; while i k Herbir rotadan DosyaBüyüklüğü/i yi son zamanından önce göndermek için gerekli bant genişliğini bul; Herbir rotadaki linklerin kullanılan bant genişliğini arttır; if linklerden herhangi birisi kapasitesini aşmış ise Linklerde arttırılan tüm bant genişliklerini azalt; i=i+1; continue; else r.durum = karşılanabilir; KarşılanabilirİstekListesi ne r yi ilave et; break; return KarşılanabilirİstekListesi; Şekil 10. ESMP algoritması.
2.2.2 Dengeli Bölüşümlü Çoklu Rotadan Gönderim ESMP algoritmasında, her rotadan eşit miktarda verinin transfer edildiği varsayılmakta idi. Ancak, daha fazla kullanılabilir bant genişliğine sahip olan rotalardan daha fazla verinin gönderilmesi daha verimli olacaktır. Bu düşünceden hareketle geliştirilmiş olan ve Şekil 11 de gösterilmiş olan Dengeli Bölüşümlü Çoklu Rotadan Gönderim (Balanced Share Multi Path - BSMP) algoritmasında, rotalardan gönderilecek olan verinin büyüklüğü eşit olarak değil, kullanılabilir bant genişlikleri ile doğru orantılı olarak paylaştırılmıştır. BSMP programı //Giriş: G(V,E), istek kümesi R, ve rota kümesi P //Çıkış: karşılanabilir istek listesi //ana döngü r.durum = karşılanamaz; k adet rota bul; i=1; while i k Her j <i rotasının kullanılabilir bant genişliklerini olan KBW j değerlerini bul; i rotadaki kullanılabilir bant genişliklerinin toplamı olan TKBW değerini bul; Herbir rotadan KBW j *DosyaBüyüklüğü/ TKBW yi son zamanından önce göndermek için gerekli bant genişliğini bul; Herbir rotadaki linklerin kullanılan bant genişliğini arttır; if linklerden herhangi birisi kapasitesini aşmış ise Linklerde arttırılan tüm bant genişliklerini azalt; i=i+1; continue; else r.durum = karşılanabilir; KarşılanabilirİstekListesi ne r yi ilave et; break; return KarşılanabilirİstekListesi; Şekil 11. BSMP algoritması.