FPGA ハードウェアソーティング アルゴリズムのFPGA実装...ハードウェアソーティング アルゴリズムのFPGA実装 広島大学 松本直之 FPGAとは
OPENCL İLE FPGA ÜZERİNDE GÜVENLİK DUVARININ …tez.sdu.edu.tr/Tezler/TF03700.pdf · FPGA İle...
Transcript of OPENCL İLE FPGA ÜZERİNDE GÜVENLİK DUVARININ …tez.sdu.edu.tr/Tezler/TF03700.pdf · FPGA İle...
T.C. SÜLEYMAN DEMİREL ÜNİVERSİTESİ
FEN BİLİMLERİ ENSTİTÜSÜ
OPENCL İLE FPGA ÜZERİNDE GÜVENLİK DUVARININ GERÇEKLENMESİ
Mohammed Ridha FAISAL
Danışman Yrd. Doç. Dr. Tuna GÖKSU
YÜKSEK LİSANS TEZİ BİLGİSAYAR MÜHENDİSLİĞİ ANABİLİM DALI
ISPARTA – 2018
TAAHHÜTNAME Bu tezin akademik ve etik kurallara uygun olarak yazıldığını ve kullanılan tüm literatür bilgilerinin referans gösterilerek tezde yer aldığını beyan ederim.
Mohammed Ridha FAISAL
i
İÇİNDEKİLER
Sayfa İÇİNDEKİLER .............................................................................................................................. i ÖZET ............................................................................................................................................... ii ABSTRACT .................................................................................................................................... iii TEŞEKKÜR ................................................................................................................................... iv ŞEKİLLER DİZİNİ ...................................................................................................................... v ÇİZELGELER DİZİNİ ................................................................................................................. vi SİMGELER VE KISALTMALAR DİZİNİ ............................................................................. vii 1.GİRİŞ ............................................................................................................................................ 1 2.KAYNAK ÖZETLERİ.............................................................................................................. 5 3.GÜVENLİK DUVARI .............................................................................................................. 9 3.1.Paket Filtrelemeli Güvenlik Duvarı .......................................................................... 10 3.2.Devre Düzeyinde Güvenlik Duvarı............................................................................ 12 3.3.Uygulama Katmanı Güvenlik Duvarları .................................................................. 14 3.4.Yazılım Tabanlı Güvenlik Duvarları ......................................................................... 16 3.5.Donanım Tabanlı Güvenlik Duvarları ..................................................................... 17 3.6.IPTables Güvenlik Duvarı.............................................................................................. 17 4.PARALEL PROGRAMLAMA .............................................................................................. 20 4.1.Paralel Programlama Sistemleri Mimarisi ............................................................ 21 4.1.1.Paylaşılan bellekli sistemler .................................................................................... 22 4.1.2.Dağıtılmış bellekli sistemler .................................................................................... 24 4.2.OpenCL ................................................................................................................................... 27 4.2.1.OpenCL mimarileri ....................................................................................................... 29 4.3.OpenCL Çalışma Modelleri ........................................................................................... 31 4.3.1.OpenCL programlama modeli ................................................................................. 31 4.3.2.OpenCL platform modeli ........................................................................................... 31 4.3.3.OpenCL uygulama modeli ......................................................................................... 33 4.4.OpenCL bellek modeli ..................................................................................................... 36 5.FPGA ............................................................................................................................................ 40 5.1.FPGA Mimarisi .................................................................................................................... 41 5.2.FPGA İle Tasarım ............................................................................................................... 42 5.3.OpenCL ve FPGA ................................................................................................................ 43 6.ARAŞTIRMA BULGULARI .................................................................................................. 45 6.1.Güvenlik Duvarında Paralel Mimariler ................................................................... 45 6.1.1.Veri-paralel güvenlik duvarı .................................................................................... 45 6.1.2.İşlev-paralel güvenlik duvarı ................................................................................... 46 6.1.3.Hibrit model ..................................................................................................................... 47 6.2.Altera DE1-SoC FPGA Geliştirme Kartı ................................................................... 48 6.3.Linux Kullanıcı Alanı Paket Kuyruğu ....................................................................... 49 6.4.OpenCL ile FPGA Programlama Modeli .................................................................. 52 6.4.1.OpenCL cihazı çekirdek kodları.............................................................................. 53 6.4.2.Ana bilgisayar opencl kodları .................................................................................. 54 6.5.OpenCL Kodlarının Derlenmesi ve Çalıştırılması .............................................. 56 7.SONUÇ VE ÖNERİLER ......................................................................................................... 59 8.KAYNAKLAR ............................................................................................................................ 65 9.ÖZGEÇMİŞ ................................................................................................................................. 68
ii
ÖZET
Yüksek Lisans Tezi
OPENCL İLE FPGA ÜZERİNDE GÜVENLİK DUVARININ GERÇEKLENMESİ
Mohammed Ridha FAISAL
Süleyman Demirel Üniversitesi Fen Bilimleri Enstitüsü
Bilgisayar Mühendisliği Anabilim Dalı
Danışman: Yrd. Doç. Dr. Tuna GÖKSU
Bu tez çalışması, bilgisayar ağlarında kullanılan güvenlik duvarlarının artan veri
trafiğini gecikmesiz ve paket kayıpsız işleyebilmelerini sağlamak amacıyla
düzenlenmiştir. Bu amaçla paralel programlamaya imkân veren OpenCL dili ile
FPGA üzerinde paralel mimari ile bir güvenlik duvarı geliştirilmiştir. IPv6
paketleri için kural denetleme işlemleri FPGA üzerinde paralel olarak
yapılmıştır. Ana bilgisayar tarafından ağdan alınan IP paketleri, paket filtreleme
işlemi için FPGA’e yönlendirilmiştir. Kurallar ile paketler arasında eşleme olup
olmadığını belirten bir karar dizisi FPGA’den ana bilgisayara döndürülerek IP
paketlerinin iletilmesine veya bırakılmasına karar verilmesi sağlanmıştır.
Yapılan çalışmada, IPv6 paketleri ile, 100 güvenlik duvarı kuralı için 1 milyon
paket/saniyenin üzerinde bir işleme performansı elde edilmiştir. Bu çalışmanın
neticesinde geliştirilen güvenlik duvarının daha gelişmiş ağ güvenlik cihazlarına
temel oluşturması, özelleştirilmiş güvenlik duvarları için bir iskelet teşkil etmesi
hedeflenmiştir.
Anahtar Kelimeler: OpenCL, FPGA, Güvenlik Duvarı
2017, 68 sayfa
iii
ABSTRACT
M.Sc. Thesis
OPENCL IMPLEMENTATION OF FIREWALL ON FPGA
Mohammed Ridha FAISAL
Süleyman Demirel University Graduate School of Natural and Applied Sciences
Department of Computer Engineering
Supervisor: Asst. Prof. Dr. Tuna GÖKSU
This thesis study is designed to allow the firewalls used in computer networks
to handle increasing data traffic without delay and without losing packets. For
this purpose, a parallel firewall architecture has been developed with the
OpenCL language, which allows parallel programming. Rule checking for IPv6
packets is done in parallel on the FPGA. IP packets received from the network by
the host are routed to the FPGA for packet filtering. A decision string indicating
whether there is a match between the rules and the packets is returned from the
FPGA to the host computer to decide whether to forward or drop IP packets. In
the work done, with IPv6 packages, a processing performance of over 1 million
packets / second was achieved for 100 firewall rules. As a result of this work, it
is aimed that the developed firewall is the basis for more advanced network
security appliances, which is a framework for customized firewalls.
Keywords: OpenCL, FPGA, Firewall
2017, 68 page
iv
TEŞEKKÜR
Bu araştırma için beni yönlendiren, karşılaştığım zorlukları bilgi ve tecrübesi ile
aşmamda yardımcı olan değerli Danışman Hocam Yrd. Doç. Dr. Tuna GÖKSU,
Babam, Annem, Kardeşlerim, Eşim, Arkadaşlarım ve bana destek veren herkese
teşekkürlerimi sunarım.
Ayrıca Süleyman Demirel Üniversitesi Bilimsel Araştırma Projeleri
Koordinasyon Birimine bu çalışmanı “4821-YL1-16” proje numarası ile
destekledikleri için teşekkür ederim.
Mohammed Ridha FAISAL ISPARTA, 2017
v
ŞEKİLLER DİZİNİ
Sayfa Şekil 3.1. Güvenlik duvarının ağdaki konumu ........................................................................ 9
Şekil 3.2. Güvenlik duvarı türleri ............................................................................................... 10
Şekil 3.3. Paket Filtrelemeli Güvenlik Duvarları ................................................................. 12
Şekil 3.4. SOCKS Kullanan Devre Düzeyinde Güvenlik Duvarı..................................... 14
Şekil 3.5. Uygulama Katmanı Güvenlik Duvarları .............................................................. 16
Şekil 4.1. Paralel programlama ................................................................................................... 20
Şekil 4.2. Paylaşılan bellekli sistemler (Çelik, 2010) ........................................................ 23
Şekil 4.3. Paylaşılan bellek mimarisi ....................................................................................... 23
Şekil 4.4. Çok çekirdekli paylaşılan bellekli mimari ......................................................... 24
Şekil 4.5. Dağıtılmış bellek sistemleri (Çelik, 2010) ......................................................... 25
Şekil 4.6. Dağıtık bellekli paralel sistem mimarisi ............................................................ 26
Şekil 4.7. Bir heterojen platform örneği ................................................................................. 30
Şekil 4.8. OpenCL programlama platform modelleri ........................................................ 32
Şekil 4.9. İş-öğeleri ve iş-grupları, NDRange endeks alanları ...................................... 34
Şekil 4.10. OpenCL Programlama bellek Modelleri (Şimşek, 2016) ......................... 37
Şekil 4.11. İş nesneleri arasında senkronizasyon .............................................................. 39
Şekil 5.1. FPGA Mimarisi ................................................................................................................ 42
Şekil 5.2. FPGA İle Tasarım ........................................................................................................... 43
Şekil 6.1. Veri-Paralel Güvenlik Duvarı ................................................................................... 45
Şekil 6.2. İşlev-Paralel Güvenlik Duvarı .................................................................................. 46
Şekil 6.3. Hibrit Model ..................................................................................................................... 47
Şekil 6.4. Altera SoC OpenCL Mimarisi .................................................................................... 49
Şekil 6.5. Netfilter veri akışı .......................................................................................................... 51
Şekil 6.6. Çoklu iş parçacığı program modeli ....................................................................... 51
Şekil 6.7. FPGA’e transfer kodları .............................................................................................. 53
Şekil 6.8. Çekirdek için yazılan OpenCL kodları.................................................................. 54
Şekil 6.9. Platformu bulmak kodları ......................................................................................... 54
Şekil 6.10. Platform sorgulamak ................................................................................................ 55
Şekil 6.11. Cihaz temsili kodları .................................................................................................. 55
Şekil 6.12. OpenCL cihazına gönderilmiş kodları ............................................................... 56
Şekil 6.13. geliştirilen iş akiş şeması ........................................................................................ 58
Şekil 7.1. Ana bilgisayarda ve FPGA’de 100 kural için paketlerin işlenme
süreleri ................................................................................................................................ 61
Şekil 7.2. Ana bilgisayarda ve FPGA’de 500 kural için paketlerin işlenme
süreleri ............................................................................................................................... 62
Şekil 7.3. Ana bilgisayar ve FPGA işleme sürelerinin karşılaştırılması ................... 62
Şekil 7.4. Ana bilgisayar için farklı kural sayılarında işleme süreleri ...................... 63
Şekil 7.5. OpenCL cihazı için farklı kural sayılarında işleme süreleri ...................... 63
vi
ÇİZELGELER DİZİNİ
Sayfa Çizelge 7.1. AOCL derleyici tarafından üretilen derleme raporu ................................ 59
Çizelge 7.2. Ana bilgisayar ve OpenCL cihazı için kural kontrol süreleri. Orta
sütunlar paketlerin ana bilgisayardan OpenCL cihazına transfer
süresini de içermektedir ..................................................................................... 60
vii
SİMGELER VE KISALTMALAR DİZİNİ
AOCL ASA
Altera OpenCL Uyarlamalı Güvenlik Algoritması
ASICs Uygulamaya Özel Entegre Devreler CDP Cisco Keşif Protokolü CLBs Yapılandırılabilir Mantıksal Bloklar CPLD Kompleks Programlanabilir Mantık Cihazı CPU DDR
Merkezi İşlem Birimi Çift Veri Hızı
FA Tam Katkı FPGA Sahada Programlanabilir Kapı Dizileri FTP Dosya Aktarım Protokolü GPU HDL HPS
Grafik İşlem Birimi Donanım Tanımlama Dili Sabit İşlemci Sistemi
HSPA ID
Yüksek Hızlı Paket Erişimi Kimlik Numarası
I/O Giriş Çıkış IOEs G / Ç Elemanları IP LAN
İnternet Protokolü Yerel Alan Ağı
GPGPU OpenCL OSI
Genel Amaçlı Grafik İşlemci Birimi Açık Hesaplama Dili Açık Sistem Arabağlantısı
LUT Gelişmiş Arama Tablosu MIMD Çoklu Talimat, Çoklu Veri NUMA Düzensiz Bellek Erişimi OpenCL PCB PCI
Açık Bilişim Dili Baskılı Devre Kartı Çevresel Bileşen Bağlantısı
PEs İşleme Elemanları PIC Programlanabilir Entegre Devre PLD
PLL Programlanabilir Lojik Aygıtl Phase Locked Loop
PROM Programlanabilir Salt Okunur Bellek SDI SDK
Seri Dijital Arabirim Yazılım Geliştirme Kiti
SIMD Tek Talimat, Çoklu Veri SNAP SoC
Alt Ağ Erişim Protokolü Çipli Sistem
TCP/IP İletim Denetimi Protokolü / İnternet Protokolü UMA Tekdüzen Bellek Erişimi VGA WAN 4G
Video Grafik Dizisi Geniş Alan Ağı 4. Nesil
1
1. GİRİŞ
Bilgisayar ve sayısal iletişim teknolojilerindeki hızlı gelişmeler, insanların sosyal
yaşamlarında da önemli değişikliklere neden olmuştur. Öyle ki kişiden kişiye
veya kişiyle devlet ve özel sektör arasındaki iletişim ve etkileşimin önemli bir
kısmı, artık elektronik ortamda yapılmaktadır. İletişim ağları üzerinden yapılan
e-devlet, e-ticaret uygulamaları, görüntülü telefon uygulamaları analog iletişim
sistemlerinin yerini almakta ve hızla yayılmaktadır. İnternet kullanımı günlük
hayatın bir parçası haline gelmiş olup, insanlar iletişime yönelik ihtiyaçlarının
büyük bir kısmını internet üzerinden karşılamaya başlamıştır. Ancak İnternet
ortamında veya bilgisayar ağları üzerinde taşınan verilerin, istenmeyen
erişimlere ya da izinsiz kullanımlara karşı korumasız olduğu da bir gerçektir.
Ayrıca İnternet veya ağ sistemine bağlı bilgisayar, sunucu vb. cihazlarında her
an için bir elektronik saldırıya maruz kalabileceği göz ardı edilemez. Hem
taşınan verilerin hem de sistemdeki cihazların saldırılara ve izinsiz işlemlere
maruz kalmaması için yapılan çalışmaların geneli, bilgi sistemleri güvenliği ve
ağ güvenliği konusudur. Saldırıların bir kısmının üstesinden gelmek için önemli
teknolojilerden birisi güvenlik duvarlarıdır (Başkaya, 2010).
Güvenlik duvarları, bir ağa giren ve çıkan paket trafiğini belirli bir güvenlik
politikasına göre denetleyen donanım ve yazılımdan oluşabilen bir sistemdir.
OSI modelinin değişik katmanlarında çalışabilen, güvenlik duvarları mevcuttur.
Güvenlik duvarlarının en önemli fonksiyonu, bir geçit oluşturarak iç ağı
(korunacak ağı), dış ağdan gelebilecek saldırılara karşı korumaktır. Güvenlik
duvarları özel ağ ile Internet gibi herkese açık ağların arasında trafiği
sınırlandıran bir yazılım veya cihazdır. Örneğin, belirlenen bir servisin özel
ağdan internete çıkışını engellemede kullanılabilir. Güvenlik duvarları yazılım
ve donanım tabanlı olmak üzere iki şekilde gerçekleştirilebilir. Yazılım tabanlı
güvenlik duvarları genelde şahsi ve sunucu bilgisayarlar üzerinde işletim
sistemi ile bütünleşik olarak çalışan yazılımlardır. Genellikle yazılım şeklinde
satılırlar ve hepsinin çalışabildiği belirli işletim sistemleri vardır. Bu sebeple
yazılım tabanlı güvenlik duvarları işletim sistemine bağımlıdır. Donanım tabanlı
güvenlik duvarları donanım şeklinde tasarlanmış ve üzerine bazı işlemleri
2
gerçekleştirebilecek, kullanıcı arabirimi sunacak çeşitli yazılımlarla
donatılmıştır. Genellikle hepsinde kendine özel bir işletim sistemi
bulunmaktadır. Arka planda çalışan servisler sadece güvenlik duvarı için
kullanılacak olanlardır. Genel olarak tüm işlemler çeşitli donanımlar tarafından
yapılmaktadır. Bu tür güvenlik duvarlarına genellikle bir konsol portu
üzerinden veya http protokolü üzerinden bağlanılarak gerekli konfigürasyonlar
yapılmaktadır. Bu tür güvenlik duvarları yönetim konsolları sayesinde işletim
sistemlerinden bağımsız olarak kullanılabilirler. Bu sebepten dolayı genellikle
tercih edilirler (Başkaya, 2010).
Güvenlik duvarı ağda konumlandırıldığı yer itibariyle ağ iletişimde gecikme ve
kayıplara sebebiyet vermemek için yüksek işlemci gücüne ihtiyaç duymaktadır.
İşlemcilerin daha hızlı işlem yapmasını sağlamak amacı ile çalışma frekansını
arttırmak, artan güç tüketimi ve aşırı ısınma problemleri sebebi ile belirli bir
noktadan sonra mümkün olamamaktadır. Bu darboğazı aşmak için, geliştiriciler
paralel işleme tekniklerine yönelmiş ve neticesinde çok çekirdekli işlemciler
geliştirilmiştir. FPGA ise yapısı itibari ile bu özelliği doğal olarak
barındırmaktadır (Sarıtaş, 2013).
FPGA, Sahada Programlanabilir Kapı Dizisi anlamına gelen Field Programmable
Gate Array’ın kısaltılmış halidir. FPGA istenen muameleye göre donanım üreten
ve daha sonrada tasarımcı tarafından değiştirilebilen tümleşik yongalardır.
Sayısal devre tasarımı yapan yongaların gelişmesi ile analog devrelerin
yapabildiği işleri kitlere yazılan birkaç kod ile gerçekleştirmek hayal olmaktan
çıkmıştır (Sarıtaş, 2013). FPGA teknolojisinin kullanımı son zamanlarda diğer
teknolojilerin kullanımına oranla gittikçe artmıştır. Bunun en önemli sebepleri
çoğu işlemcilerin sahip olmadığı çeşitli yeteneklere sahip olmasıdır. Bunların
başında paralel işlem yapabilme yeteneği ve bunun sisteme sağladığı hızlı işlem
gücü gelmektedir. Ayrıca güvenli ve tekrar programlanabilme özelliği de
FPGA’ları ön plana çıkartan özellikler olmuştur. FPGA, içerisinde sabit bir
donanım değil, kullanıcı tarafından tanımlanabilen dinamik bir donanım
barındırır. FPGA içerisindeki mantık hücreleri değişmez olmakla beraber
bunların gerçekleştirdiği fonksiyonlar ve aralarındaki bağlantılar kullanıcı
vasıtasıyla belirlenir. FPGA’ın yapabileceği işlemler önceden tanımlanmamıştır.
3
Yazılan HDL koduna göre istenilen işlemler “paralel olarak” yani eş zamanlı
yaptırılabilir. Paralel işlem yapabilme yeterliliği FPGA’yı işlemciden ayıran ve
birçok alanda üstün kılan en önemli özelliklerdendir. Paralel işleme kendi
içerisinde sınıflara ayrılmaktadır. Örneğin, ortak veri yolu ve belleği paylaşan
sistemlerin, paralel işlemler gerçekleştirmesi ile bu öğeleri ayrı ayrı kullanan
sistemlerin performansları farklılık göstermektedir. FPGA bu konuda
geliştiriciyi özgür kılmaktadır (Sarıtaş, 2013).
Onlarca yıldır FPGA mimarisi geniş alanlarda hızlandırılmış performanslar
sunmaktadır. Artan bu performansın karşılığı ise artan programlama
karmaşıklığı ve uzayan geliştirme süreleridir. FPGA ile ürün geliştirmede
donanım tanımlama dilleri kullanılarak veri yolları, bellekler, haberleşme
birimleri ve senkronizasyon modülleri tasarlanmaktadır. Bu süreç mantık
kapıları ile tasarım, tasarım otomasyon araçları ve FPGA mimarisinin düşük
seviyeli ayrıntıları hakkında kapsamlı bilgi gerektirir. Bu da uzun bir gelişme
süresine ve yoğun emek harcamasına karşılık gelir. FPGA'ın bu
programlanabilirlik eksikliğini gidermek için, OpenCL kullanımı kolay ve
taşınabilir bir programlama modeli sağlar. OpenCL, GPU, CPU, FPGA ve diğer
işlemcilerden oluşabilen farklı cinslerden (heterojen) işlemciler barındıran
sistemlerde genel amaçlı kullanım için tasarlanmış, ilk tam anlamıyla açık ve
lisans ücreti gerektirmeyen programlama standardıdır (Sarıtaş, 2013).
Bu tez çalışmasında, geliştirme süresinin kısaltılması ve geliştirilen yazılımın
ileri çalışmalarda kullanılabilir bir iskelet özelliğini taşıması için FPGA üzerinde
paralel mimari ile geliştirilmiş olan güvenlik duvarı yazılımı OpenCL ile
yazılmıştır. Bu tez çalışması, bilgisayar ağlarında kullanılan güvenlik
duvarlarının artan veri trafiğini gecikmesiz ve paket kayıpsız işleyebilmelerini
sağlamak amacıyla düzenlenmiştir. Bu amaçla IPv6 paketleri için kural
denetleme işlemleri FPGA üzerinde paralel olarak yapılmıştır. Ana bilgisayar
tarafından ağdan alınan IP paketleri, paket filtreleme işlemi için FPGA’e
yönlendirilmiştir. Kurallar ile paketler arasında eşleme olup olmadığını belirten
bir karar dizisi FPGA’den ana bilgisayara döndürülerek IP paketlerinin
iletilmesine veya bırakılmasına karar verilmesi sağlanmıştır.
4
Takip eden bölümlerde ilk olarak literatürdeki çalışmalara değinilmiştir. Üçüncü
bölümde güvenlik duvarı ve çeşitleri anlatılmıştır. Dördüncü bölümün ilk kısmı
paralel programlamaya dair temel kavramları içermektedir. İkinci ve üçüncü
kısımlarda ise OpenCL anlatılmıştır. Beşinci bölümde FPGA yapısından
bahsedilmiştir. Altıncı bölümde gerçekleştirilen çalışma ve yedinci bölümde de
sonuçlar verilmiştir.
5
2. KAYNAK ÖZETLERİ
Literatürde güvenlik duvarlarının paralelleştirilmesi üzerine çeşitli çalışmalar
mevcuttur. Bu çalışmalar genellikle OpenCL kullanılarak GPU’lar üzerinde
gerçekleştirilmiştir. Bunlar arasında görüntü işleme ve çeşitli algoritmaların
paralelleştirilmesi ön plana çıkmaktadır. Aşağıda yapılan çalışmalardan
konumuza yakın olanlar sunulmuştur.
Kayssi vd. (2000), çalışmalarında FPGA kullanarak IP ağları için bir güvenlik
duvarı tasarımını sunmuşlandır. FPGA, donanımsal olarak, güvenlik duvarının
kurallarını kabul veya reddetmeyi uygulamıştır. Çalışmalarında kuralların
VHDL'ye nasıl tercüme edildiğini ve daha sonra donanım içinde nasıl
uygulandığını göstermişlerdir. Bunun yanısıra, ağ trafiğini bir paket bazında
veya bağlantı bilgilerine dayalı olarak filtrelemek için donanımın nasıl
kullanıldığı da gösterilmiştir. Saniyede 500.000 paketten daha fazla bir hıza
ulaşmışlardır.
Fulp (2006), yaptığı çalışmasında paketleri yüksek hızda işleme yeteneğine
sahip farklı paralel güvenlik duvarı mimarilerini incelemiştir. Her tasarımda
güvenlik politikası uygulamak için bir dizi güvenlik duvarı kullanmıştır ancak
dizinin nasıl kullanılacağına göre tasarımlar farklılık göstermiştir. Veri-paralel
tasarımın, paketleri dizi boyunca dağıtarak daha fazla işlem sayısı sağladığını,
işlev-paralel tasarımın ise, işleme gecikmesini azaltacak şekilde kuralları
dağıttığını göstermiştir. Genel olarak, paralel tasarımların, geleneksel bir tekli
güvenlik duvarından daha ölçeklenebilir ve önemli ölçüde daha hızlı olduğu
gerçekçi koşullar altındaki simülasyon ile gösterilmiştir.
Koht-arsa ve Sanguanpong (2008), çalışmalarında yüksek hızlı ağ için paketleri
işleyebilen paralel güvenlik duvarı mimarisinin tasarımı ve uygulanması
gerçekleştirmişlerdir. Uygulama belirli ASIC anahtarı ile birlikte çalışan veri
paralel şema çerçevesinde Linux tabanlı güvenlik duvarı dizilerinden
yararlanmaktadır. Yük dengeleme mekanizması, trafiği yapılandırılabilir bir dizi
paralel makine arasında dağıtıp güvenilirlik, esneklik ve ölçeklenebilirlik ile
yüksek performans sağlamıştır. Gerçek bir ağdaki uygulama ve ölçümler,
6
önerilen sistemin saniyede 10 gigabayt bir veri hızıyla çalışacak şekilde
ölçeklenebilir olduğunu göstermiştir.
Tuncer (2010), yaptığı doktora tezi çalışmasında, bilgisayar ağlarında çevrim içi
çalışabilen bir saldırı tespit sistemini FPGA ortamında gerçekleştirmiştir. Bunun
için; Yapay Sinir Ağları, Naive Bayesian ve Karar Ağacı gibi üç farklı
sınıflandırma algoritmasını kullanmıştır. Uygulama için ilk olarak önceden
belirlenmiş eğitim verileri ile her üç algoritmayı eğitmiş sonrasında, test verileri
kullanarak çevrim dışı çalışmada algoritmaların başarımlarını gözlemlemiştir.
Gaur vd. (2010), yaptıkları çalışmada Genel Amaçlı Grafik İşlemci Birimi
(GPGPU) üzerinde farklı paralel güvenlik duvarı modelleri uygulanması
sunmuşlardır. GPGPU'nun paralel bilgisayar işlem yeteneklerini etkin bir
şekilde kullanabilecek yeni bir model sunmuşlardır. Çalışmalarında güvenlik
duvarlarında paket filtreleme için GPGPU'ların kullanımını araştırmışlardır.
Paralel güvenlik duvarlarını uygulamak için GPGPU çekirdekleri için üç prototip
geliştirmişlerdir. Yüksek performanslı ağ sistemlerinin tasarımında GPGPU'ların
kullanılmasının mümkün olduğunu önermişler ve elde ettikleri sonuçlarla
GPGPU'ların yeni nesil yüksek hızlı ağların bir parçası olabileceğini
göstermişlerdir.
Ajami ve Dinh (2011), yaptıkları çalışmada, ağ geçidi üzerine yerleştirilecek
yüksek derecede özelleştirilebilir bir paket filtreleme güvenlik duvarı
donanımının tasarımını yapmışlardır. Paket filtreleme güvenlik duvarı her ağ
veri paketindeki başlık alanını konfigürasyonuna dayanarak kontrol eder ve ağ
üzerinden geçen verilere izin verir veya reddeder. Ağ güvenlik duvarı
donanımını uygulamak ve değerlendirmek için Altera FPGA platformunu
kullanmışlardır. Donanım tasarımı geleneksel yazılım uygulamalarına kıyasla
çok daha hızlı çalışmıştır. Geliştirdikleri güvenlik duvarı kaynak/hedef IP
adresine ve TCP/UDP port numaralarına göre ve MAC adreslerine göre
filtreleme gerçekleştirebilmektedir.
Karimi vd. (2013), yaptıkları çalışmalarında, Grafik İşleme Ünitesinin (GPU)
paralel işleme kapasitesini kullanarak, Linux kullanıcı uzayında Iptables'in ilk
eşleştirme kuralı mekanizmasını gerçekleştirmişlerdir. Elde ettikleri bulgular,
7
CPU-GPU ile hızlandırılmış kodun, Iptables kodunun CPU sürümüne göre önemli
derecede performans artışı sağladığını göstermiştir. 10000 kural için GPU'daki
paket filtrelemesinin genel performansı 400.000 paket/saniye civarındadır. Bu
durum CPU'daki Iptables'in verimsiz ilk eşleştirme kuralı algoritmasından 43
kat daha hızlıdır.
Reddy vd. (2013), yaptıkları çalışmada GPGPU üzerinde farklı paralel güvenlik
duvarı modellerini uygulamışlardır. Fulp’ın (2006) önerdiği paralel güvenlik
duvarı mimarilerini uygulamış ve GPGPU'nun muazzam paralel hesaplama
yeteneklerini etkin bir şekilde kullanabilen yeni bir model sunmuşlardır.
Sahoo vd. (2014), yaptıkları çalışmada, NVIDIA GPU kartında çalışan ve CUDA
platformuna dayanan, saldırı tespiti, tehdit algılama, paket filtreleme ve ağ
adresi çevrimi (NAT) için optimize edilmiş paralel algoritmalar
oluşturmuşlardır. Deneysel analiz için test paketleri oluşturmuşlar ve virüs
taraması için Clam-AV'den gelen virüs imzalarını kullanmışlardır.
Widianto ve Kho (2015), yılında yaptıkları çalışmalarında GPGPU ve OpenCL
temelli, gelen paketleri aynı anda işleyen, dolayısıyla yüksek kapasiteli bir
ortamda sistem kapasitesini artıran paralel bir saldırı tespit sistemi
geliştirmişlerdir. Deney sonuçlarında, GPU tabanlı tasarımın performansının tek
iş parçalı merkezi işlemci birimi (CPU) uygulamasına göre ortalama 58,73 kat
arttığını ve çoklu iş parçalı uygulamaya karşı ortalama 13,53 kat arttığını
göstermişlerdir. Aynı zamanda, GPGPU tabanlı sistemin, CPU tabanlı sistem
uygulamasına kıyasla 29.92'lik bir performans artışı elde ettiğini bildirmişlerdir.
Anshuman vd. (2016), çalışmalarında OpenCL ile FPGA’lar üzerinde iş
yüklerinin paralel programlama ile nasıl hızlandırılabileceğini göstermişlerdir.
Kıyaslamak için kullanılan OpenDrawfs programı ile geliştirdikleri optimizasyon
tekniklerinin neticelerini birbirleri ile karşılaştırmışlardır.
Keskin vd. (2016), çalışmalarında GPU kullanarak ağ bağlantısı izlemesi için
kullanılabilen güçlü bir paralel hesaplama yaklaşımı tasarlamış ve
uygulamışlardır. Sonuçlar, GPU tabanlı bağlantı tablosu izleme algoritmalarının,
Linux çekirdeğinde tanımlanan paket filtreleme işlevinden 35 kat daha hızlı,
saniyede 90.000.000 paket (pps) çıktı elde ettiğini göstermektedir.
8
Belkhede vd. (2016), yaptıkları çalışmada saldırı tespiti ve paket filtreleme
amacıyla farklı güvenlik duvarı politika kurallarını ve GPU tarafından yapılan
paralel hesaplamayı incelemişlerdir. Projeleri NVIDIA'nın GPU kartında çalışan
ve CUDA platformuna dayanan donanım üzerinde gerçekleştirilmiştir.
9
3. GÜVENLİK DUVARI
Günümüz iletişim ağlarında, ağı iç ve dış tehditlere karşı koruyan vazgeçilmez
bir öğe, yazılımsal ve donanımsal olarak gerçekleştirilen güvenlik duvarları
sistemleridir. Güvenlik duvarları özel ağ veya bir bilgisayar ile internet gibi
herkese açık ağların arasında trafiği sınırlandıran bir yazılım veya cihazdır.
İsmini binaların bölmelerini birbirinden ayıran ve olası bir yangın durumunda
ateşin bir bölmeden diğerine geçişini engelleyen bina güvenlik duvarlarından
almıştır. Ağ güvenlik duvarları yerel ağın İnternet’e açıldığı noktaya yerleştirilir
ve İnternet’ten yerel ağa gelen tüm trafik, yerel ağdan İnternet’e giden tüm
trafik kontrol edilir ve kabul edilebilir olanların geçişine müsaade edilir.
Güvenlik duvarları dış saldırılara karşı sistemi korumanın yanısıra, ağın verimli
kullanılmasını sağlayarak trafik performanısını arttırma ve izin politikası
uygulama amaçları için de kullanılır. Şekil 3.1’de güvenlik duvarının ağdaki
yerleşimi görülmektedir. (Kizza, 2014).
Şekil 3.1. Güvenlik duvarının ağdaki konumu
Güvenlik duvarları kullanım amaçlarına ve yapısında kullanılan tekniklere göre
birkaç türe sahiptir. Genellikle en önemli özelliğine göre isim almaktadırlar.
Kullanılan donanım ve yazılım güvenlik duvarının türünü belirler. Bazı
kaynaklar ise kullanılan güvenlik duvarının OSI katman modelindeki yerine
göre sınıflandırma yapmaktadırlar. Güvenlik duvarı temelde kişisel ve ağ
güvenlik duvarı olmak üzere ikiye ayrılır. Kişisel güvenlik duvarı bilgisayarlarda
çalışan bir güvenlik yazılımıdır. Ağ güvenlik duvarları aşağıda listelenmiştir:
Paket Filtrelemeli Güvenlik Duvarı (Packet Filtering Firewall)
10
Devre Düzeyinde Güvenlik Duvarı (Circuit Level Firewall)
Uygulama Katmanı Güvenlik Duvarı (Application Layer Firewall)
Şekil 3.2. Güvenlik duvarı türleri
Ağ güvenlik duvarları kişisel ve sunucu bilgisayarlar üzerinde işletim sistemi ile
tümleşik olarak çalışan yazılımlar şeklinde olabileceği gibi, bazı işlemleri
gerçekleştirebilecek, kullanıcı arabirimi sunacak çeşitli yazılımlarla donatılmış
donanımlar şeklinde de olabilirler.
Paket Filtrelemeli Güvenlik Duvarı 3.1.
Ağ güvenlik duvarı içerisinde yer alan paket filtrelemeli güvenlik duvarları ağ
trafiğinden gelen paketlerin başlık içeriğine bakarak paketi kabul veya
reddeder. Bu güvenlik duvarları OSI referans modelinin üçüncü katmanı olan ağ
katmanında çalışırlar. Milyonlarca paketin başlık bilgisini elde ederek kural
havuzundaki durumlara göre karşılaştıran bu tür güvenlik duvarları donanım
olarak başarımı yüksek bir yapıya sahiptir (Kizza, 2014). Başlık alanı
içerisindeki bilgiler genel olarak aşağıda listelendiği gibidir:
Gönderici ve alıcı IP adresleri
Gönderici ve alıcı bağlantı noktası (port) numaraları
Paket türleri (TCP, UDP)
Hizmet protokolleri (Telnet, IP Tunnel, FTP, SMTP, http, v.s.).
11
En yalın haliyle bir paketin filtrelenmesi yönlendiriciden gelen paketlerin
sadece IP, TCP veya UDP katmanlarında bulunan bilgilerine bakılarak kabul
veya ret kararı verilmesidir. Bir paket filtreleme sistemi TCP oturumlarını takip
etmez, ancak tek tek paketlerin başlık bilgilerine bakar. Paketlerdeki olası sahte
TCP başlığını tespit etmek için var olan oturumun parçası gibi davranır. Erişim
kontrol yetenekleri kısıtlıdır. Ağ yöneticisi saldırıyı anında tespit edemez.
Filtreleme kuralları, yeni saldırı türlerine karşı ağı filtreleyebilme kabiliyetine
sahip değildir. Eğer kompleks filtre düzenlemeleri ve kuralları istenirse
sistemlerin kontrolü ve işletilmesi zorlaşabilir. Durum bilgisi olan paket
filtrelemesi (Stateful Inspection Packet Filters), paket filtreleme yöntemlerinden
biridir. Bu yöntemde önceden yetkili ağa giriş yapmış paketlerin başlık bilgileri
toplanıp arşivlenir. Yeni paketler ile bunlar karşılaştırılır ve herhangi bir
anormallik tespit edilmezse paketlerin girişine izin verilir. Bu yöntem
Şekil 3.3’te gösterildiği üzere TCP paketlerinin ACK bilgisine göre çalışır.
12
Şekil 3.3. Paket Filtrelemeli Güvenlik Duvarları
Devre Düzeyinde Güvenlik Duvarı 3.2.
Devre düzeyi güvenlik duvarları, OSI modelinin oturum katmanında bulunurlar
veya TCP/IP modelinin uygulama katmanı ile iletim katmanı arasında "dolgu-
katman" olarak da nitelendirilebilecek bir seviyede çalışırlar. İstenen bir
oturumun geçerli olup olmadığını belirlemek için paketler arasındaki TCP el
sıkışmasını izlerler. Devre seviyesi güvenlik duvarı üzerinden uzaktaki bir
bilgisayara iletilen bilgi, güvenlik duvarında kaynaklanmış gibi görünür. Devre
seviyesindeki güvenlik duvarı uygulamaları, birinci kuşağın yanındaki
teknolojiyi temsil eder. Güvenlik duvarı teknolojisi, bir oturumun orijinalliğini
doğrulamak için paketler arasında TCP anlaşmasını denetler. Güvenlik duvarı
trafiği belirli oturum kurallarına göre temiz kabul edilir. Devre güvenlik
13
duvarları, kendisini ağın dışına gizler; bu, saldırganların erişimini engellemek
için yararlıdır. Bu tür güvenlik duvarları, sadece içerideki bilgisayarlardan istek
geldiğinde dışarıdan bilgi akışına izin verebilir. İçerden çıkan isteğe karşılık
gelen cevaba izin verilebilmesi amacıyla dışarıya giden isteklerin kaydı tutulur.
Dış ağlardaki bilgisayarlar sadece güvenlik duvarının adresini görürler, bu
durum bu tür güvenlik duvarlarının en önemli avantajıdır. Bu şekilde, iç ağ
korunmuş olur (Schultz, 2010).
Güvenlik duvarının arkasındaki iç ağda bulunan bir A bilgisayarının, dış ağdaki
bir B bilgisayarına ait web sayfasını görüntülemek istediği durumu ele alınırsa;
A bilgisayarı, B bilgisayarına ait web sayfası için istek gönderdiğinde, bu istek
güvenlik duvarı vasıtasıyla alınır ve tabloya kaydedilir. Güvenlik duvarı giden
paket içerisindeki kaynak IP adresini ve bağlantı noktasını kendi bilgileri ile
değiştirerek paketi B bilgisayarına gönderir. B bilgisayarı isteği güvenlik
duvarından alır ve web sayfasını geri göndermeye başlar. Paketler güvenlik
duvarına ulaştığında, gelen paketlerin bir isteğe ait olup olmadığı tablodan
kontrol edilir. Neticede, pakete izin verilir veya paket izin verilmez (Schultz,
2010).
Bu güvenlik duvarının en büyük avantajı, güvenlik duvarı açan kadar bütün
portlar kapalı olduğu için içeriden istek gelmediği takdirde dışarıdan içeriye
girilmesine izin verilmemesidir. En büyük dezavantajı ise, içeriden gelen
herhangi bir isteğe izin vermesi sebebi ile diğer filtreleme yöntemleriyle
birleştirilmesi zorunluluğudur.
Bu tür güvenlik duvarı kablo/DSL yönlendiricilerinde kullanılmaktadır. IPv4
adres havuzu yetersizliğinden dolayı, devre düzeyinde güvenlik duvarlarının bir
kombinezonu olan NAT (Network Address Translation), çoğu yönlendiricide
mevcut olup sıklıkla kullanılmaktadır. Devre düzeyinde ağ geçitleri arasında
SOCKS (Socket Secure) yaygın olarak kullanılır. Şekil 3.4’te SOKCS kullanan
Devre Düzeyinde Güvenlik Duvarını göstermektedir.
14
Şekil 3.4. SOCKS Kullanan Devre Düzeyinde Güvenlik Duvarı
Uygulama Katmanı Güvenlik Duvarları 3.3.
Uygulama katmanı güvenlik duvarı, bir uygulamaya/uygulamadan yada bir
hizmete/hizmetten gerçekleşen giriş ve çıkışları denetleyen bir güvenlik duvarı
biçimidir. Güvenlik duvarının yapılandırılmış ilkesini karşılamayan giriş, çıkış
veya sistem hizmeti çağrılarını izleyerek ve potansiyel olarak engelleyerek
çalışır. Uygulama güvenlik duvarı, genellikle herhangi bir OSI katmandaki bütün
ağ trafiğini uygulama katmanına kadar kontrol etmek sebebiyle
oluşturulmaktadır. Durum denetimli ağ güvenlik duvarları, ek yazılım
olmaksızın uygulamaları veya hizmetleri kontrol edemezler. Bunun aksine
uygulama güvenlik duvarları özellikle bunları denetlerler. Uygulama güvenlik
duvarları, ağ tabanlı uygulama güvenlik duvarı ve ana bilgisayarlar tabanlı
uygulama güvenlik duvarları olmak üzere iki temel kategoriye ayrılır (Schultz,
2010).
Ağ tabanlı uygulama katmanı güvenlik duvarları, bir iletişim kuralı yığınının
uygulama katmanında çalışan proxy tabanlı ve bir bilgisayar ağı güvenlik
duvarıdır yada aksi proxy güvenlik duvarları olarak da bilinir. Belirli bir ağ
trafiğine özgü uygulama güvenlik duvarları, hizmet ismiyle isimlendirilebilir
örneğin, web uygulaması güvenlik duvarları gibi. Bir bilgisayarda çalışan bir
yazılım yada lokal bir ağ donanımı olarak gerçekleştirilebilirler. Çoğu zaman,
trafiği istemci veya sunucuya iletmeden önce proxy yapmak için çeşitli vekil
sunucu biçimlerini kullanan bir ana makine şeklindedir. Uygulama katmanı
üzerinde etki ettiği için, trafik içeriğini inceleyebilir, belirli web siteleri, virüsler
15
veya yazılımın açıklarından yararlanmak isteyen saldırılar gibi belirli içeriği
engelleyebilir. Modern uygulama güvenlik duvarları, hatalı iletişimi ve saldırıları
engelleyebilir, kimlik doğrulamayı yönetebilir yada güvenlik ilkelerini bozulma
eden içeriği engelleyebilir (Schultz, 2010).
Ana bilgisayarlar tabanlı uygulama güvenlik duvarları, herhangi bir uygulama
veya sistem hizmeti çağrısının girişini ve çıkışını izleyebilir. Bu, sistem çağrıları
aracılığıyla gönderilen bilgileri inceleyerek yapılır. Ana makine tabanlı
uygulama güvenlik duvarı, yalnızca bilgisayarda çalışan uygulamalara koruma
sağlayabilir.
Uygulama güvenlik duvarı, bir işlemin belirli bir bağlantıyı kabul edip
etmeyeceğini belirleyerek işlev görür. Uygulama güvenlik duvarı, uygulama
katmanı ve OSI modelinin alt katmanları arasındaki bağlantıları filtrelemek için
soket çağrılarına bağlanarak işlevlerini yerine getirir. Soket çağrılarına bağlanan
uygulama güvenlik duvarları ayrıca soket filtreleri olarak da adlandırılır.
Uygulama güvenlik duvarlarının çalışma şekli paket filtresine çok benzese de,
uygulama filtreleri bağlantıları bağlantı noktası bazında filtrelemek yerine işlem
bazında filtreleme (yani engelleme veya izin verme işlemlerini) uygular
(Schultz, 2010).
Ayrıca, uygulama güvenlik duvarı, veri aktarımında yer alan yerel işlemleri, veri
paketlerinin işlem kimliğini belirli bir kural setine karşı inceleyerek bağlantıları
daha da filtre etmektedir. Oluşan filtrelemenin kapsamı, verilen kural seti
vasıtasıyla tanımlanır. Varolan yazılım çeşitleri göz önüne alındığında, uygulama
güvenlik duvarlarının paylaşım uygulamaları gibi hizmetler için daha karmaşık
kural setleri olduğu görülür. Ana bilgisayar tabanlı güvenlik duvarları, uygulama
güvenlik duvarı olarak da çalışabilir.
Bu güvenlik duvarı da devre düzeyindeki güvenlik duvarı gibi İnternet ile
bütünleşmektedir. Bu tip güvenlik duvarları genellikle büyük bilgisayar ağlarını
korumak amaçlı kullanılmaktadır Şekil 3.5’te uygulama katmanı güvenlik duvarı
yapısı gösterilmiştir (Schultz, 2010).
16
Şekil 3.5. Uygulama Katmanı Güvenlik Duvarları
Yazılım Tabanlı Güvenlik Duvarları 3.4.
Bu tür güvenlik duvarları, genellikle sunucu bilgisayarları ve kişisel üzerine
kurulabilen ve işletim sistemi ile bütünleşik olarak çalışan yazılımlardır.
Genellikle yazılım şeklinde satılırlar ve hepsinin çalışabildiği belirli işletim
sistemleri vardır. O nedenle bu tip güvenlik duvarı işletim sistemine bağımlıdır.
Bir işletim sisteminde çalışan bir güvenlik duvarları başkasında çalışmayabilir.
Bu tür güvenlik duvarına örnek olarak birçok kurumsal ve kişisel güvenlik
duvarları verilebilir (Zwicky, 2000).
Bu tip güvenlik duvarları kapalı kaynak kodlu veya açık kaynak kodlu olabilir.
Açık kaynak kodlu olanlar tamamen bedava olup GPL (General Public License)
lisansıyla dağıtılırlar. GPL'in en çok kullanıldığı platformlardan birisi Linux
işletim sistemidir. Genellikle işletim sistemleriyle bütünleşik olarak
çalıştıklarından çok daha ayrıntılı bir şekilde raporlama alınabilir. Uygulama
yazılımları oldukları için gerekli donanım sağlandığı sürece rahatlıkla bir yerden
başka bir yere aktarılabilirler. İşletim sistemi üzerinde çalıştıkları için işletim
sistemlerinin de bakımı söz konusudur. İşletim sistemlerinde bulunan
hatalardan etkilenirler ve bu nedenle performansları düşebilir (Zwicky, 2000).
17
Donanım Tabanlı Güvenlik Duvarları 3.5.
Bu tür güvenlik duvarları donanım şeklinde tasarlanmış ve üzerine bazı
işlemleri gerçekleştirebilecek, kullanıcı arabirimi sunacak çeşitli yazılımlarla
donatılmıştır. Genellikle hepsinde kendine özel bir işletim sistemi
bulunmaktadır. Arka planda çalışan servisler sadece güvenlik duvarı için
kullanılacak olan servislerdir. Bu tür güvenlik duvarlarına genellikle bir konsol
portu üzerinden veya http protokolü üzerinden bağlanılarak gerekli
yapılandırmalar yapılmaktadır. Güvenlik duvarları yönetim konsolları sayesinde
işletim sistemlerinden bağımsız olarak kullanılabilirler (Zwicky, 2000).
En büyük avantajları uygulama için özel geliştirilmiş tümleşik devreler
kullanılıyor olmasıdır. Bu sayede daha yüksek performans sağlayabilirler.
Genellikle en kötü saldırılarda bile cihaz kapatılıp tekrar açıldığında çalışmaya
devam ederler. Donanımın yedekli çalışması durumlarında iyi performans
verirler. Minimum seviyede yazılım kullanıldığından ve bu yazılımların tam
olarak ne oldukları bilinmediğinden yazılım açıklarından son derece az
etkilenirler. Hizmet dışı kalma süreleri oldukça azdır. Şirket desteği olduğundan
güncellemeleri otomatik ve hızlıdır. Yazılabilecek kurallar ve yapılabilecek
işlemler cihazın kapasitesi (işlemci gücü, hafıza miktarı vs.) ile sınırlıdır.
Özellikle küçük yapıda olanların donanımsal olarak genişletilebilme imkânı
düşüktür (Zwicky, 2000).
IPTables Güvenlik Duvarı 3.6.
IPTables, profesyonel Linux çekirdeği olan 2.4 serisi çekirdekler içerisinde gelen
ve Netfilter uygulama çerçevesini yapılandırmak için kullanılan bir güvenlik
duvarı aracıdır. IPTables, paket filtrelemeli bir güvenlik duvarının kurulumu
için idealdir. Linux bu işlemleri çekirdek seviyesinde gerçekleştirebilmektedir.
Çekirdek içindeki Netfilter modülü de bu iş için geliştirilmiştir (Karimi vd.,
2013).
Birinci nesil paket filtreleme kodu olan ipfw basit filtreleme desteği
verebiliyordu. Esnek ve karışık yapılandırmalarda yetersiz kaldığından şu an
nadiren kullanılmaktadır. IP filtrelemenin ikinci nesli IP Chain olarak
adlandırılmıştır. Son nesil paket filtreleme kodu olan Netfilter da sadece
18
Linux‘un 2.4 ve sonrası çekirdek versiyonlarında kullanılan Iptables komutu ile
entegredir (Karimi vd., 2013).
Netfilter, kısaca, Linux çekirdeği içinde bir alt sistemdir. Paketlere müdahale
etmek için bir vasıta sunar. NAT, paket filtreleme ve paketleri değiştirebilme
Netfilter sisteminin yapabildikleridir. Bunu yaparken çekirdeğin ağ yönetim
sistemi, Netfilter'e kolaylıklar sağlar. Şöyle ki; herhangi bir paket, internet
ortamından ağ sürücüsüne ulaştığında, en sonunda, ya paket, kullanıcıya
ulaştırılır, ya da aynı veya farklı bir ağ sürücüsü tarafından ağ dışına gönderilir.
İşte bu gezinti sırasında Netfilter sisteminin, çekirdeğin ağ yönetim bölümleri
içinde bazı müdahale noktaları vardır (Karimi vd., 2013). Bu noktalara kanca
denir. Pakete müdahale farklı şekillerde gerçekleşir:
Paket tamamen düşürülebilir ve paket için ayrılan kaynaklar serbest
bırakılır,
Paket kabul edilebilir ve ağ yığınının bir sonraki aşamasına geçilir,
Netfilter paketle ilgili tüm işlemlerini bırakabilir bununla birlikte, paket
için kaynaklar serbest bırakılmayabilir,
Netfilter kanca işlevini tekrar çağırabilir.
Netfilterdeki en önemli içerik, zincir yapısında sisteme giren sistemden çıkan ve
yönlendirilen paketler için kurallar olmasıdır. Varsayılan ayarlarda üç zincir
yapısı vardır fakat yeni zincirler oluşturulup ön tanımlı olarak
ilişkilendirilebilir. IPTables, verilen kurallar zincirine göre hareket eder, gelen
veya giden ya da yönlendirilen bütün paketler bu kurallara uyar. Kural zincirleri
kullanıcı tarafından oluşturulabildiği gibi standart zincirler de mevcuttur.
INPUT, yerel sisteme giriş yapan paketler için kurallar zinciri, OUTPUT, yerel
sistemden farklı sistemlere yollanan paketler için kurallar zinciri, FORWARD ise
paketin farklı bir ağa yönlendirilmesi için kullanılan kurallar zinciridir.
Linux çekirdeği tüm bu kategoriler için kuralların listesini tutar. Kural listeleri
IPTables komutlarıyla muhafaza edilir. İşletim sisteminde kullanıcıya, zincir
oluşturmak, zincir silmek, zincire kural eklemek, zincirden kural çıkarmak ve
zincirdeki kuralları değiştirmek için araçlar sunulmuştur. Güvenlik duvarı
kurallarında paket filtrelemede hangi paketlerin hangi aksiyonlarla
19
filtreleneceği bilgisi eşleştirilebilir. Aksiyon varsayılan güvenlik politikaları ile
belirlenebileceği gibi kullanıcı tanımlı ek aksiyonlar da kural setinde
kullanılabilir.
20
4. PARALEL PROGRAMLAMA
Paralel programlama, bir problemi çözmek için çok sayıdaki hesaplama
kaynağını aynı anda kullanmaktır. Program çok sayıda CPU üzerinde çalıştırılır.
Problem eşzamanlı olarak çözülebilecek parçalara ayrılır. Her bir parça kümesi
komutlara ayrılır. Her bir parçanın komutları aynı anda farklı CPU ‘lar üzerinde
çalıştırılır (Herlihy ve Shavit, 2012). Paralel programlamanın en önemli avantajı
problemin çözüm zamanını azaltarak çözüme daha hızlı bir şekilde ulaşılmasını
sağlamaktır. Problem bir parça olarak değil parçalar halinde işlenir ve her bir
parçanın aynı anda işlenmesi sayesinde daha kolay ve hızlı çözüm elde edilir.
(Gaster vd., 2012).
Paralel programlamayı, eş zamanlı programlama ile eş anlamlı kabul edenler
mevcut olduğu gibi kesin bir çizgiyle ayıranlar da vardır ve çoğunluktadır.
Paralel programlama, işlemler arasında iyi tanımlanmış iletişim yapıları
kullanan ve verimi artırmaya yönelik işlemlerinin paralel işlenmesini sağlayan
bir yapıdır. Eş zamanlı programlama, performanstan ziyade başka nedenlerden
dolayı eş zamanlı işlemler arasında yeni iletişim tekniklerine dayanan bir
yapıdadır. Paralel programlama yapısı Hata! Başvuru kaynağı bulunamadı.’de
österilmiştir (Mattson, Sanders et al. 2004).
Şekil 4.1. Paralel programlama
21
Programlar, yalnız uygun metotları ve komutları içeriyorlarsa diğer işlemcilerin
de kullanılmasını sağlayarak daha kısa sürede çözüme ulaşılmasına olanak
sağlamaktadır. Uygun metotları devreye sokmak için yapılacak olan işlemleri ve
hesaplamaları paralel olarak kodlamak gerekir. Programın içeriğinde paralel
olarak kodlama yapılan yerler doğru ve uygun şekilde yapılmışsa program,
işlemleri istenilen kadar işlemci üzerinde eş zamanlı olarak çalıştırır (Akar vd.,
2013). Paralel programlama için işletim sistemi seviyesinde ve programlama
dili seviyesinde pek çok yazılım sistemi geliştirilmiştir. Bu sistemler, problemin
parçalara bölümlenmesini ve işlemcilere atanmasını sağlayan çeşitli
mekanizmalar içermektedir.
Paralel Programlama Sistemleri Mimarisi 4.1.
Son 50 yılda, paralel programlama sistemlerinin performans ve yeteneklerinde
çok büyük gelişmeler olmuştur. Bu Çok Büyük Ölçekli Entegrasyon (VLSI)
teknolojisindeki ilerlemeler sayesinde mümkün olmuştur. Bu sayede daha fazla
işlem paralel olarak aynı anda gerçekleştirilebilir (Çelik, 2010).
Paralel programlamaya uygun sistemler için mimarilerine göre farklı
sınıflandırmalar oluşturulmuştur. Yaygın olarak kullanılan sınıflandırma Flynn
sınıflandırmasıdır. Flynn sınıflandırmasında donanımlar dört sınıfa
ayrılmışlardır. Bu sınıflar SISD, SIMD, MISD, MIMD olarak isimlendirilmiştir
(Pacheco, 2011).
SISD sistemleri
SISD (Single İnstruction Single Data) yapılı sistemlerde, tek komut bir veri
grubu üzerinde etkilidir. Tek bir komut kullanılarak işlem yapılır ve bir belleğe
kaydedilir. Ne komut düzeyinde ne de veri akışında paralellik yoktur. Tek
işlemcili bilgisayar sistemi olan Von-Neumann türü bilgisayarlar bu sisteme
örnek olarak verilebilmektedir (Flynn, 1966).
SIMD sistemleri
SIMD (Single Instruction, Multiple Data) yapılı sistemlerde, tüm işlemciler aynı
zamanda aynı talimatları işleme özelliğine sahiptir, yani doğal bir paralellik
mevcuttur. Bu sistemler birden çok ALU (Aritmetik Logic Unit)’ya sahiptir. SIMD
22
yapılı sistemlerin bilimsel hesaplamalarda kullanılmak üzere modern sürümleri
hala kullanılmaktadır (Flynn, 1966).
MISD sistemleri
MISD (Multiple Instruction, Single Data) yapılı sistemlerde ise, birçok komut tek
veri grubu üzerinde işlem yapabilmektedir. Heterojen yapılarda, hata toleransı
miktarı uygulamalarında kullanmaktadır (Flynn, 1966).
MIMD sistemleri
MIMD (Multiple Instruction, Multiple Data) yapılı sistemlerde ise, her bir işlemci
farklı talimatları faklı veriler üzerinde çalıştırabilmektedir. Paylaşılan bellekli
(shared memory) ve dağıtılmış bellekli (distrubuted memory) sistemler bu yapı
içine girmektedir (Flynn, 1966).
4.1.1. Paylaşılan bellekli sistemler
Paylaşılan bellekli paralel sistemlerde birbirinin tamamıyla aynı işlemciler, aynı
saat çevriminde çalıştırılmaktadır. İşlemciler arasındaki veri paylaşımı ve veri
aktarımı Paylaşılan bellek kullanılarak gerçekleştirildiğinden, işlemciler arası
iletişim oldukça hızlı gerçekleşmektedir. Şekil 4.2’de bu yapı göstermiştir. Bu tür
sistemlerde paralellik donanım, derleyici ve işletim sistemi tarafından
gerçekleştirilir. Kullanıcının paralel ortama müdahalesi sınırlı olmaktadır.
Sadece kullanıcı kaç adet işlemciyi paralel ortama sokmak istiyorsa onu
belirleyebilmektedir. İşlemci dışı paylaşılan bellekli sistemlere, çok yüksek hızlı,
sunucu bilgisayar yapılarına daha çok karşılaşılmaktadır.
23
Şekil 4.2. Paylaşılan bellekli sistemler (Çelik, 2010)
Şekil 4.3’de gösterildiği üzere Paylaşılan bellekli paralel sistemler birden fazla
işlemcinin bir yol (bus) yardımıyla, paylaşılan bir belleği aynı anda kullanma
esasına dayanmaktadır. Bu tür paralel sistemler tek işlemcili bilgisayar
yapılarıyla oluşturulabildiği gibi, güncel teknolojiyle birlikte gelen işlemci
içindeki, veri hattı ve sicim teknolojileriyle paralel ortama katkı sağlanmaktadır.
Şekil 4.3. Paylaşılan bellek mimarisi
24
Şekil 4.4 Çok çekirdekli Paylaşılan bellekli sistemlerde, işlemci yapısındaki veri
hattı ve sicim teknolojisine ek olarak, komut icra ünitesi olarak bilinen
çekirdeklerin sayısının arttırılmasıyla paralellik sağlanmaktadır.
Şekil 4.4. Çok çekirdekli paylaşılan bellekli mimari
4.1.2. Dağıtılmış bellekli sistemler
Dağıtılmış bellekli sistemler, bilgisayar donanımının yanında, ağ donanımlarıyla
gerçekleştirilen bilgisayar dışı paralel sistemlerden oluşmaktadır. Bu sistemi
oluşturan bilgisayarların kullanıcıları, bilgisayarları paralel ortama dâhil olduğu
zaman bile, kendi uygulamalarını paralel ortamdan bağımsız olarak
çalıştırabilmektedir. Kullanıcıların bilgisayarlarının dağıtık bellekli paralel
ortama dâhil olması durumunda, kullanıcıya hiçbir dezavantajı olmamaktadır.
Aksine bir bilgisayar gerekirse 7/24 çalıştırılabilecek böylece atıl durumdaki
bilgisayardan faydalanılmış olunacaktır. Şekil 4.5’de dağıtık sistemin şeması
görülmektedir.
25
Şekil 4.5. Dağıtılmış bellek sistemleri (Çelik, 2010)
En önemli avantajı hali hazırda kullanılmakta olan bilgisayarın, örneğin
herhangi bir kuruma ait olan bilgisayarın, güçlü bir ağ donanımıyla
birleştirilmesiyle oluşturulmaktadır. Dağıtık bellekli yapıda, ağa dâhil edilecek
bilgisayarların, donanım veya yazılım özelliklerinin birbirleriyle aynı olma
gereksinimi yoktur. Ağ donanımlarıyla haberleştirilen bu bilgisayarlara paralel
yazılımlar (PVM, MPI vs) kurularak, içlerinden seçilecek bir bilgisayar üzerinde
ortam yapılandırması sağlanmaktadır. Birbirlerine ağ donanımıyla bağlanmış
bilgisayarlar ve bu bilgisayarlara yüklenmiş yazılımlarla, süper bilgisayar
denilen yüksek performanslı bilgisayar ortamı gerçekleştirilmektedir. Dağıtık
bellekli bilgisayarlar Hata! Başvuru kaynağı bulunamadı.’da gösterildiği gibi
üksek bant genişlikli ağlar vasıtasıyla birleştirilmektedir. Dağıtık bellekli
sistemlerde paylaşılan bellekli sistemlerden farklı olarak komutlar arası
paralellik değil de komut grupları arası paralellik mevcuttur. Kullanıcı isterse
komutlarla paralel ortama müdahale edebilmektedir. Yüksek performans elde
etmek isteyen araştırma kurumları, üniversiteler ve değişik ölçekteki kurumlar
26
ekonomik olduğundan dolayı dağıtık bellekli paralel sistemleri tercih
etmektedir. Bu sistemlerin temeli eski bilgisayarlarda (tek işlemcili
bilgisayarlarda) kullanıldığından, önceden oluşturulmuş dağıtık mimarilerde
hala yaygın olarak kullanılmaktadır. Yüksek teknolojiyle birlikte çok çekirdekli
yapıya geçiş ihtiyacı doğmuştur. Çok çekirdekli işlemci yapılı dağıtık bellekli
sistemler, tek işlemcili dağıtık bellekli sistemlerden daha yüksek performans
sağlamaktadır.
Şekil 4.6. Dağıtık bellekli paralel sistem mimarisi
27
OpenCL 4.2.
OpenCL, CPU, GPU, FPGA ve diğer işlemcilerden oluşabilen heterojen
ortamlarda taşınabilir programlar yazılabilmesi amacıyla geliştirilmiş bir
çatıdır. OpenCL standartları programcıların aygıtlar arasında taşınabilir, üretici
ve aygıt bağımsız programlar yazabilmelerini sağlamak amacıyla geliştirilmiştir
(Munshi, Gaster et al. 2011).
Heterojen platform ismi, CPU, GPU, FPGA ve DSP kartları gibi donanımsal ve
işlevsel olarak birbirinden farklı olan cihazların iki ya da daha fazlasının bir
arada bulunduğu sistemlere verilen isimdir. OpenCL heterojen platformlar
üzerinde paylaşılan bir kodun çalıştırılmasını sağlayan C++ tabanlı bir dildir.
OpenCL kullanarak heterojen bir platformda istenilen cihazlar üzerinde aynı
kod koşturulabilir. Heterojen platform sunucu ve hedef cihaz ya da cihazların
birbirine bir PCIe (Peripheral Component Interconnect Express) ara yüzü ile
bağlanmasını ifade edebileceği gibi son zamanlarda oldukça yaygın kullanılan
“chip içinde sistem” (SoC) adıyla bilinen tek entegre devre içinde CPU, FPGA ya
da GPU nun bir arada bulunmasından da oluşabilir. OpenCL, Khronos grup
olarak bilinen bir konsorsiyum tarafından ortaya konulmuştur. Apple, Intel,
Qualcomm, Advanced Micro Device (AMD), Nvidia, Altera, Samsung, ARM
holdings ve Vivante bu konsorsiyumun üyeleridir. Khronos konsorsiyumu
grafik, medya ve paralel programlama standartlarını belirlemektedir. OpenCL
destekleyen donanımsal platformlar oldukça geniş donanım ailelerini
kapsamaktadır. Bu platformlara her geçen gün yeni ürünler eklenmektedir. Bu
ürünlerin ortak özelliği çoklu çekirdek yapısına sahip olmalarıdır.
OpenCL standardında üreticiler ve aygıtlar arasında ortak mimari platformunu
oluşturmak amacıyla bazı tanımlanmalar yapılmıştır. OpenCL uygulamaları, ana
bilgisayar programı, OpenCL cihazı, program nesneleri, çekirdek fonksiyonları,
çekirdek nesneleri ve bellek nesneleri gibi temeller üzerinde geliştirilir
(Eskikaya ve Altılar, 2012).
OpenCL cihazı: Bir bilgisayar sistemindeki hesaplama aygıtları, OpenCL cihazı
olarak tanımlanır. Bir aygıt, içerisinde bir veya birden fazla hesaplama birimi
bulundurabilir. Günümüzde 2 ila 8 çekirdeğe sahip olan CPU’larda veya 80 ila
28
100 çekirdeğe sahip olabilen GPU’larda her bir çekirdek bir hesaplama birimine
karşılık düşer (Eskikaya ve Altılar, 2012).
Çekirdek fonksiyonları: OpenCL destekleyen aygıtlar üzerindeki hesaplama
birimlerinde çalıştırılmak üzere yazılan fonksiyonlar çekirdek fonksiyonlarıdır.
Çekirdek fonksiyonları, C, C++, Objective C gibi dillerde yazılabilen ana
bilgisayar programlarından OpenCL API çağrıları aracılığıyla ile tetiklenir ve
hesaplama birimleri üzerinde çalışır. Bu fonksiyonlar, yaptıkları işlerin
sonuçlarını yine ana bilgisayar programına döndürür. Çekirdek fonksiyonlar,
çalışma zamanı esnasında, hesaplama birimi üzerinde çalışacak şekilde kaynak
kodlarından derlenir. Çekirdek fonksiyonu derlendiğinde bir çekirdek oluşur
(Kowalik, 2012).
Çekirdek nesneleri: Çekirdek nesneleri program içerisinde tanımlanmış belli
bir çekirdeği ve o çekirdek ile çalıştırılan argüman değerlerini tutar (Eskikaya
ve Altılar, 2012).
Programlar: Bir OpenCL programı, OpenCL çekirdeklerini, bu çekirdekler
tarafından çağırılan dış fonksiyonları ve sabitleri barındırır.
Bağlamlar: Bağlam, OpenCL çekirdeklerinin yürütüldüğü ortamı temsil eder.
Bağlam, aygıt kümesini, bu aygıtların erişebildiği bellek bilgisini ve çekirdekler
üzerinde yürütülmesi için zamanlanmış komut kuyruklarının bilgisini tutar.
Bağlam, bellek nesnelerinin aygıtlar arasında paylaşılmasını sağlar (Eskikaya ve
Altılar, 2012).
Program nesneleri: Bir program nesnesi, bir OpenCL programını temsil eden
veri tipidir. Program bağlamı referansı, program kaynak kodu, programın
derlenmiş ve yürütülebilir hali, programın hangi aygıtlar için derlendiği,
derlenme seçenekleri ve derlenme kaydı bilgileri program nesnesinde tutulur.
Komut kuyrukları: Komut kuyrukları hesaplama aygıtlarına iş atamak için
kullanılır. Aygıtlardaki çekirdeklerin yürütülmesini ve bellek nesnelerini
29
düzenlerler. OpenCL, komutları komut kuyruğundaki sıraya göre yürütür
(Eskikaya ve Altılar, 2012).
Ana bilgisayar programı: Ana bilgisayar programı, çekirdek fonksiyonun
hesaplama cihazı üzerinde yürütülmesi için gerekli bağlamları hazırlayan ve
yürütme işlemini düzenleyen programdır. Ana bilgisayar programları CPU
üzerinde çalışır ama CPU aynı anda bir hesaplama cihazı olarak da kullanılabilir.
Çekirdek fonksiyonların cihazlar üzerinde çalışması için ana bilgisayar programı
hangi hesaplama cihazlarının kullanılabileceğini bulur, uygulama için uygun
olan hesaplama cihazını seçer, seçilen cihazlar için komut kuyruklarını ve
çekirdek fonksiyonlarda kullanılacak bellek nesnelerini oluşturur.
Bellek nesneleri: Bellek nesneleri aygıtların genel belleğinin ilgili bölgesine
referanstır. Ana bilgisayar programı bellek nesnelerini kullanarak aygıt
belleğine yazma ve aygıt belleğinden okuma işlemlerini gerçekleştirebilir
(Munshi vd., 2011).
4.2.1. OpenCL mimarileri
Heterojen platform bir ya da daha fazla CPU, GPU, DSP işlemcisi, FPGA ve
hızlandırıcı bazı kartlardan oluşabilir. Heterojen sistemler, işlemlerin yalnızca
CPU üzerinde yapıldığı sistemlerden birçok açıdan farklılık gösterir. Aslında bu
farklılıklar heterojen sistemlerin neden ortaya çıktığının da cevabıdır. Bir
sistemin gerçekleştireceği tüm işlemleri CPU üzerinde yapmak CPU’a fazla yük
binmesine neden olur. CPU’ların temel çalışma frekansları her ne kadar diğer
hızlandırıcı kartlardan fazla da olsa her işlemin CPU tarafından yapılması
işlemlerin belli bir sıraya sokulmasını gerektirir ve dolayısıyla işlemleri
yavaşlatır. İstenilen performansın sağlanması için sisteme fazladan CPU
eklenirse hem sistemin maliyetini arttırır hem de güç harcaması oldukça
yükselir. Bu sorunların çözümü içim daha az güç harcayan ve daha ucuza mal
olabilecek kartlar heterojen sisteme dâhil edilerek sistemin maliyeti
azaltılabilir. Aynı zamanda GPU, FPGA ve diğer hızlandırıcı kartlar daha az güç
tükettiği için de sisteme avantaj sağlar. İşlem performansı açısından da bu
cihazlar kendilerine has mimarileri sayesinde paralel hesaplama yapabilecek
30
kabiliyetlere sahiptir. Dolayısıyla heterojen bir sistem kullanmak hem güç
tüketimini azaltmak, hem performansı arttırmak hem de sistemi daha ucuza mal
etmek bakımından avantajlıdır. Bir heterojen sistem örneği Şekil 4.7‘de
görülebilir.
Şekil 4.7. Bir heterojen platform örneği
Şekil 4.7‘de gösterilen örnek heterojen sistemde bir veri yolu üzerinden iki CPU
birbirine bağlanmıştır. Her iki CPU’nun kontrol ettiği ve yürüttüğü işlemler
mevcuttur. Grafik hafızası kontrol birimi ise GPU’nun RAM bellekten veri
okumasını ya da yazmasını sağlar. Giriş/çıkış kontrol ünitesi ise dışarıdan bilgi
almaya ya da dışarıya bilgi çıktısı üretmeye kanal sağlar. Benzer şekilde birçok
heterojen sistem mimarisi kurmak mümkündür. Mevcut olan ihtiyacı
karşılayacak şekilde heterojen sistemlerin tasarımı yapılır. Günümüzde
heterojen sistem mimarisi oldukça yaygın olarak kullanılmaktadır. Cep
telefonları heterojen sistemlere örnek olarak gösterilebilir. Cep telefonlarında
kullanılan CPU’lar hızlı veri işlemlerinin gerçekleştirilmesini, cep telefonu
işletim sistemi üzerindeki çalışacak uygulamaların koşturulmasını sağlarken,
31
sisteme gömülü olarak entegre olan bir DSP üzerinden de dışarıdan alınan ses
verisi sayısallaştırılarak bit verileri haline dönüştürülür. Daha sonra bu bit
verileri tekrar kulağın duyabileceği ses sinyallerine çevrilir. Böylece DSP,
CPU’dan bağımsız olarak kendi görevini yerine getirir. Aynı zamanda bunu
düşük güç tüketimiyle yaptığı için batarya ömrünün de uzamasını sağlamış olur
(Munshi vd., 2011).
OpenCL Çalışma Modelleri 4.3.
OpenCL çalışma modelleri aşağıdaki modellerin birleşimi şeklinde tanımlanır:
• OpenCL programlama modeli
• OpenCL platform modeli
• OpenCL uygulama modeli
• OpenCL bellek modeli
4.3.1. OpenCL programlama modeli
OpenCL, veri paralel ve görev paralel programlama modellerini destekler. Veri
paralel programlama modelinde aynı çekirdek fonksiyonu verinin küçük
parçaları üzerinde paralel olarak yürütülür. Her veri kümesi 1, 2 veya 3 boyutlu
uzayda belirli noktalar kümesine karşılık düşer. Görev paralel programlama
modelinde ise farklı çekirdek fonksiyonları oluşturulur ve bu fonksiyonlar farklı
verilerle aynı anda paralel çalışan iş parçacıkları şeklinde yürütülür (Banger,
2013).
4.3.2. OpenCL platform modeli
OpenCL programlama platform modeli, program kodunun herhangi bir
değişikliğe gerek kalmadan tüm cihazlar üzerinde işlem yapmasını sağlar.
OpenCL platformunda bir ana bilgisayar cihazı, diğer cihazları hesaplama birimi
olarak kullanılır. Ana bilgisayar adı verilen cihaz (genellikle bir CPU), hesaplama
birimi olarak kullanılan diğer birimlere görev dağıtımı yaparak ilgili birimler
üzerinde bellek bölgesinin ayarlanması, ayarlanmış bu bellek bölgelerine gerekli
verilerin yazılması, hesaplama birimi olarak kullanılan birimlerde yapılan
hesaplamaların sonuçlarının okunması gibi görevlere sahiptir. Tabii olarak ana
bilgisayar görevinde kullanılan bir CPU, bu işlemlerin yanında OpenCL
32
konseptinden bağımsız şekilde sistemin ihtiyaçlarını karşılamaya yönelik başka
işlemler de yapabilmektedir. OpenCL programlama platform modeli Şekil 4.8‘de
gösterilmiştir (Şimşek, 2014).
Şekil 4.8. OpenCL programlama platform modeli
Bir ana bilgisayar, sistem mimarisi içinde tüm hesaplama birimlerine bağlıdır.
Ana bilgisayar tarafından bu hesaplama birimlerinde yer alan hesaplama
ünitelerine iş öğelerinin atamaları gerçekleştirilir. Bu atamalar sonucunda her
birim kendine atanan işlemi kendi içinde yaparak sonuçları tekrar ana
bilgisayara döndürür. Sonuçların okunması ve tekrardan değerlendirilmesi
işlemi ise ana bilgisayar tarafından gerçekleştirilir. OpenCL programlama
platform modelinde hesaplama birimlerine paylaştırılmış olan iş öğeleri
genellikle bir algoritmanın gerçeklenmesi şeklindedir. Genelde paylaştırma aynı
işlemin tüm hesaplama birimlerinde farklı veriler üstünde yapılması
şeklindedir. Yapılabilecek iki çeşit paralelleştirme mevcuttur:
33
Veri paralel model
Veri paralel modelde, paralelleştirilmesi istenen bir algoritma OpenCL ile yazılır.
Oluşturulan bu kod çekirdek olarak ifade edilir. Çekirdekler her hesaplama
birimi üzerinde koşabilen OpenCL fonksiyonlarıdır. Bu kodlar ana bilgisayar
üzerinde çalışmayan, ama ana bilgisayar tarafından hesaplama birimlerine
gönderilen ve hesaplama birimleri üzerinde çalışan fonksiyonlardır. Çekirdekler
hesaplama cihazlarına gönderilip ilgili cihaz için organize edilirler. Her çekirdek,
hesaplama cihazlarında bir iş öğesi olarak işlem yapar. Veri paralel model,
çalışan bu kodların farklı veriler üzerinde eş zamanlı olarak çalıştırılarak tüm
verilerin eşzamanlı olarak işleme tabi tutulmasını ifade eder (Şimşek, 2014).
İşlem paralel model
İşlem paralel modelde ise bir algoritma çeşitli parçalara ayrılır. Her parça
hesaplama cihazları üzerinde koşturulur (Mattson, 2004).
4.3.3. OpenCL uygulama modeli
OpenCL uygulama modeli bir veya birden fazla hesaplama cihazı üzerindeki
çekirdek kopyalarının ana bilgisayar programı vasıtasıyla aynı zamanında
işletilmesini kapsar. Çekirdeğin her bir kopyası bir iş-öğesi olarak
tanımlanmaktadır. İş-öğeleri FPGA veya GPU çekirdekleri tarafından eş zamanlı
olarak, her bir çekirdek bir iş öğesini çalıştıracak şekilde yürütülür. Her bir iş
öğesi aynı çekirdek fonksiyonunu kendisine düşen veri parçacığı üzerinde
yürütür. İş öğeleri bir araya gelerek iş gruplarını oluşturur. Aynı zamanda, tüm
veriyi kapsayan iş öğeleri bir araya gelerek bir endeks alanını tanımlar. OpenCL
1, 2 ve 3 boyutlu endeks alanlarını destekler. Bu endeks alanı OpenCL
standartlarında NDRange endeks alanı olarak adlandırılır. Endeks alanı
içerisindeki her iş öğesi, genel ID’sini veya yerel ID ve iş grubu ID’sini kullanarak
verinin hangi kısmını işleyeceğini belirler. Şekil 4.9 NDRange endeks alanını, iş
gruplarını ve iş öğelerini göstermektedir.
34
Şekil 4.9. İş-öğeleri ve iş-grupları, NDRange endeks alanları
OpenCL uygulaması iki ana parçadan oluşmaktadır, bunlar ana bilgisayar
programı ve bir veya birden fazla çekirdek programıdır. Çekirdek, grafik
işlemcisi veya FPGA üzerinde çalışan ve OpenCL ile yazılan program parçasıdır.
Ana bilgisayar programın nasıl çalışacağını OpenCL belirlemez. OpenCL sadece
çekirdekler ile ana bilgisayar arası iletişimin nasıl olacağını belirler.
OpenCL çalışma modelini anlayabilmek için öncelikle OpenCL ile bir çekirdek
programın nasıl çalıştığının anlaşılması gerekmektedir. Çekirdekler ana
bilgisayar programı içerisinde tanımlanırlar. Çekirdeğin çalışması için ana
bilgisayar programı, OpenCL cihazı üzerine OpenCL çekirdeğinin
çalıştırılacağına dair komutu gönderir. Komutu alan OpenCL cihazı, OpenCL için
bir tam sayı indis uzayı oluşturur. Çekirdek, bu tam sayı uzayının her bir
elemanı için çalıştırılır. Çalışan çekirdeğin her bir birimine iş öğesi denilir. İş
öğeleri birleşerek bağımsız iş grubunu oluşturur. Bir OpenCL cihazı içerisindeki
iş grubunu oluşturan tüm iş öğeleri donanımsal olarak aynı anda çalıştırılırlar.
OpenCL iş gruplarının veya çekirdeklerin çalışmasını seri olarak
gerçekleştirebilir, ancak bir iş grubunu oluşturan iş öğelerinin her birisinin
paralel olarak çalışacağını garanti eder.
35
Tam sayı indis uzayı N boyutlu bir uzaydır. N-boyutlu olmasından ötürü
NDRange uzayı olarak adlandırılır. Günümüzdeki OpenCL sürümlerinde N, 1, 2
veya 3 olabilmektedir. Bir boyutlu olan vektörlerden üç boyutlu olan nesnelere
kadar bütün boyutları indisleye bilmektedir. Çalışma sırasında N boyutlu
indisler iş öğelerine atanarak donanım üzerinde hangi işlem birimine gideceği
belirlenir. NDRange uzayı iş gruplarına bölünür, iş grupları da iş öğelerine
bölünerek tüm uzayın indekslenmesi yapılır. Bölümlendirme ve bu boyutların
belirlenmesi ana bilgisayar tarafında yapılır, komutlar yardımıyla OpenCL
ortamına gönderilir.
OpenCL ortamını oluşturan öğeler; OpenCL destekli cihazlar, çekirdekler,
program nesneleri ve bellek nesneleridir. OpenCL ortamı ana bilgisayar
programı üzerinde oluşturulduğunda, çalışabilmek için bu dört öğeye ihtiyaç
duymaktadır. OpenCL cihazları, OpenCL kodu çalıştırılmadan önce kontrol
edilmelidir. OpenCL destekli bir cihaz olmaması durumunda programın
çalışması mümkün değildir. Çekirdekler OpenCL dilinde yazılmış ve OpenCL
cihazı üzerinde çalışacak olan program parçalarıdır. Program nesneleri,
çekirdeğin veya çekirdeklerin gerekli yapılandırma parametreleri ile birlikte
cihaz üzerinde çalışabilecek hale getirilmiş halidir. Program nesnelerini elde
etmenin iki yolu vardır. İlk yol, çalışma zamanı sırasında çekirdeklerin
derlenerek ortaya program nesnesinin çıkmasıdır. İkinci yol ise, çevrimdışı bir
derleyici yardımı ile program nesnesinin belirli bir OpenCL cihazına göre
derlenmesi yöntemidir. Her iki yöntemde de elde edilen program nesnesi aynı
işlevdedir. İkinci yöntem, çalışma zamanı sırasında ek bir derleme yükü
olmamasından ötürü ilk yöntemden daha yüksek başarıma sahiptir. Bellek
nesneleri ise, çekirdeklerin içerisindeki fonksiyonlarda kullanılan
parametrelerin, değişkenlerin ve oluşturulan statik veya dinamik nesnelerin
tümüdür. CPU'nun ve OpenCL cihazının farklı bellek adreslemesi olduğu için
(gömülü platformlar bu örneğe dâhil değildir) bellek nesneleri ana bilgisayar
tarafında oluşturularak OpenCL cihazı üzerine API çağrısı ile yazılır.
OpenCL çevresi oluşturulduktan sonra programların çalışabilmesi için
komutların OpenCL cihazı üzerine gönderilmesi gerekmektedir. Ana bilgisayar
ve OpenCL cihazı arasındaki bu etkileşimi sağlayan yapıya komut-kuyruğu ismi
36
verilmektedir. Komut-kuyruğu ortam oluşturulduktan sonra tanımlanır ve tek
bir OpenCL cihazı ile eşleştirme yapılır. Bir komut-kuyruğu birden fazla OpenCL
cihazında çalışamaz. Eşleştirme yapıldıktan sonra komutlar komut-kuyruğu
yardımıyla cihaza gönderilir ve cihaz üzerinde komutların zamanlaması yapılır.
OpenCL'de çekirdek çalıştırma komutları, bellek komutları ve eş zamanlama
komutları olmak üzere üç adet komut vardır. Tipik bir OpenCL programında,
ortam ve komut-kuyruğu tanımlanır, bellek ve program nesneleri tanımlanır ve
komutlar komut-kuyruğuna gönderilir. Bellek ve program nesnesi ana
bilgisayarda OpenCL cihazı üzerine gelir ve çalışma zamanı başlar. Çalışma
bittikten sonra sonuçların bulunduğu bellek nesneleri tekrar ana bilgisayar
üzerine alınabilir. Birden çok çekirdeğin çalışması durumunda çekirdeklerin
etkileşmesi ihtiyacı ortaya çıkabilir. Bu durumda ise, iki çekirdek arasında
bellek işlemleri ile ilgili sorunlar ortaya çıkabilir. İlk çekirdek işini bitirmeden
ikinci çekirdek çalışmaya başlarsa yazılmayan değerler okuyacağından program
hatalı sonuçlar üretecek veya hiç sonuç üretemeyerek hata verecektir. Bunun
önüne geçebilmek için de üçüncü tip komut olan eş zamanlama komutları
kullanılmaktadır.
OpenCL Bellek Modeli 4.4.
OpenCL Programlama bellek Modellerinde her hesaplama biriminin içinde
özelleştirilmiş bellek bölgeleri bulunur. Bu bellek bölgeleri Şekil 4.10’da
gösterilmiştir.
37
Şekil 4.10. OpenCL bellek modeli (Şimşek, 2016)
Özel bellek: Özel bellek sadece iş-öğeleri tarafından erişilebilen bellek alanıdır.
Yazmaç düzeyindedir. Her iş-öğesi bir özel bellek elemanına erişebilmektedir.
Her özel bellek elemanı bir iş-öğesine özel olarak adanmış şekildedir, başka iş-
öğeleri tarafından okunamaz. Yalnızca ilgili iş elemanı bellek bölgesine yazıp
okuma yapabilmektedir.
Yerel bellek: Yerel bellek aynı iş grubunda yer alan iş öğeleri tarafından
erişilebilen bir bellektir, her iş-grubunun kendisine ait bir yerel belleği
bulunmaktadır. İş-grubu içerisindeki tüm iş öğeleri bu belleği paylaşımlı olarak
kullanır. İş-grubu dışından erişim gerçekleşemez. Yerel bellek yonga üzerinde
bulunur bu yüzden erişim hızlıdır fakat iş öğesinin bu belleğe ulaşması özel
belleğe ulaşmasından daha uzun zaman almaktadır. Çekirdek çalışması sona
erdiğinde yerel bellekteki verilerin varlığı sona erer.
Üniversal bellek: OpenCL cihazı üzerinde bulunan, boyut olarak en büyük
bellektir. Üniversal bellek bütün iş-gruplarındaki iş-nesneleri tarafından
erişilebilir bir bellektir. Tüm iş-gruplarının ve iş- ögelerinin yazma ve okuma
izni vardır. Üniversal bellek bir anlamda tüm hesaplama cihazının paylaşılan
38
belleği olarak düşünülebilir. Ön bellekleme mekanizması seçimliktir, bazı
cihazlarda mevcut olmasına karşın bazı cihazlarda ihmal edilebilir düzeydedir.
Ana bilgisayar programı tarafından bu alana veri yazılıp okunabilmektedir.
Sabit bellek: Tüm iş-gruplarındaki iş-öğeleri için erişilebilir bir bellektir. Fakat
bu bellekte küresel bellekten farklı olarak sadece okuma yapılabilir. OpenCL
ortamı oluşturulduktan sonra bu bellek alanına yazılan veriler, çekirdeğin
çalışması süresince değişime uğramazlar. İş öğeleri bu alanı yalnızca okuma
amaçlı kullanabilirler. Ana bilgisayar programı tarafından bu alana veri yazılıp
okunabilmektedir. Üniversal bellekte tutulan sabit bellek elemanları, hızlı erişim
için önbelleğe aktarılmaktadır. Sabit bellekte tutulan verilere erişim bu yüzden
üniversal bellekte tutulan verilere göre daha hızlıdır. Sabit bellekte tutulan
verilerin ömrü, uygulamanın çalışma süresini kapsar.
Ana bilgisayar belleği: CPU'ya ait bellek alanıdır. Cihazın erişimi
bulunmamaktadır. Sadece tanımlı OpenCL ortamı içerisinde, cihazla etkileşimi
sağlamak amacıyla kullanılır. Ana bilgisayarda çalışan kod parçalarının
kullandığı ve cihaza gönderilen, sonrasında da sonucu geri okumakta kullanılan
bellek alanı burasıdır. OpenCL cihazının bu bellek alanına erişimi yoktur, ana
bilgisayarın okuma ve yazma erişimi vardır.
Hesaplama cihazları programlanırken veri akışı CPU’dan başlayarak, üniversal
bellek, yerel bellek ve son olarak da özel belleğe doğru gerçekleşir. Hesaplama
cihazı CPU tarafından gönderilen bu verileri giriş olarak kullanarak ürettiği
sonucu aynı yol üzerinden geri iletir. Bu sefer izlenen yol özel bellek, yerel
bellek daha sonra hesaplama cihazından çıkmadan önce üniversal bellektir. Bu
aşamadan da sonra veri CPU’nun belleğine iletilir. CPU üzerinde hesaplama
birimlerinden gelen sonuçların değerlendirilmesi ya da işlemin akışına göre
sonuçların ilgili şekilde kullanılması gerçekleştirilir. Bu kısım uygulamanın ne
olduğuyla alakalı olarak değişir. OpenCL kodu ile belirlenmiş olan işlemler iş-
öğeleri tarafından donanım üzerinde gerçekleştirilirken eş zamanlama ile ilgili
bir kural mevcuttur. Bu kurala göre aynı iş-grubunda olan iş nesneleri aynı
zamanda görevlerini gerçekleştirirler. Farklı iş-grubunda yer alan iş nesneleri
ise birbirine hiçbir şekilde eşzamanlı olamazlar. Şekil 4.11’de bu durum görsel
olarak anlatılmıştır.
39
Şekil 4.11. İş nesneleri arasında senkronizasyon
Bellek modellerinde hızlarına ve paralelliklerine göre birimleri sıralamak
gerekirse, en yavaş ve en seri erişim üniversal belleğe yapılmaktadır. Sabit
bellek önbelleklere mekanizması sayesinde üniversal bellekten daha başarılı ve
daha paralel erişime açıktır. Yerel bellek, programcı tarafından kullanılması
gereken, çok hızlı ve paralel bir yapıdır. Özel bellek ise en hızlı erişimin
sağlandığı yapıdır. Her iş öğesi için ayrı özel bellek alanı bulunduğu için
paralellik söz konusu değildir. Belleğe hızlı erişim sağlamak ve programın
başarımını arttırmak için hızlı bellek birimlerini sık sık kullanmak
gerekmektedir.
40
5. FPGA
FPGA, "Sahada Programlanabilir Kapı Dizileri" anlamına gelen "Field
Programmable Gate Array" ifadesinin kısaltmasıdır. Kapı dizileri (gate array)
ismi, FPGA'in yapısının Gate Array ASIC’lere benzemesinden dolayı verilmiştir.
Sahada programlanabilir olması da FPGA'nın üretimden sonra
programlanabilme özelliğine işaret eder (wordpress 2011).
FPGA'i kısaca, üretimden sonra istenen fonksiyona göre donanım yapısı
kullanıcı tarafından değiştirilebilen tümleşik devre olarak tanımlayabiliriz.
FPGA'i daha iyi anlayabilmek için, mantık kapılarının birbirinden bağımsız ve
serbest olarak üretildiği ham bir tümleşik devre olarak hayal edebiliriz.
Kullanıcının belirleyeceği tasarıma göre FPGA içindeki mantık kapıları
birbirlerine bağlanabilir ve bu sayede istenen fonksiyonlar gerçekleştirilebilir.
Yani teorik olarak sahip olduğu mantık kapısı kapasitesi dâhilinde akla gelen
herhangi bir tümleşik devrenin yaptığı iş FPGA ile yapılabilir (instruments
2012) (Smith 2010).
Programlanabilir olması sayesinde FPGA'lar teknoloji dünyasında çok geniş bir
yelpazede kullanılmaktadır. Ayrıca FPGA'ların gömülü işlemciler ve sayısal
sinyal işleme blokları, PLL'lar, yüksek hızlı paralel ve seri giriş/çıkış desteği,
harici bellek ara yüzleri, PCI Express ve Gigabit Ethernet gibi alıcı/ verici ara
yüzleri gelişmiş saat ve güç dağıtım yönetimi gibi özellikleri birçok alanda
FPGA'ların tercih edilmesini sağlamıştır. FPGA kullanımının bu denli popüler
olmasının en önemli nedenlerinden birisi de, güçlü yazılım desteğidir. FPGA
üreticilerinin sundukları gelişmiş PCB tasarım, modelleme ve benzetim
yazılımları ile yapılandırılabilir hazır fikri mülkiyet çekirdekleri tasarımcıların
işlerini oldukça kolaylaştırmaktadır. Bileşenlerin yerleşimlerini belirleme,
aralarındaki bağlantıları tasarlama, zamansal analizler yapma ve tasarım
değişikliklerini gerçekleştirme gibi işlemler FPGA tasarım akışında kolaylıkla
yapılabilmektedir. FPGA üreticilerinin sundukları yazılımlar sayesinde
tasarımlar sentezlenebilmekte ve FPGA cihazının içerisine otomatik olarak
yerleştirilebilmektedir (Wilson 2015).
41
FPGA’nın tasarımcılara sunduğu en büyük avantaj paralel işlem yapabilme
özelliğidir. Bu özelliği sayesinde çok daha hızlı işlem yapma olanağı
sunmaktadır. Çok büyük ve karmaşık tasarımların FPGA üzerinde
gerçekleştirilmesi hız, yer, zaman ve aynı zamanda güvenlik bakımından
üstünlükler sunmaktadır. Ayrıca yeniden programlanabilme özelliği ile de
tasarımcıya tasarımı güncelleyebilme olanağı sağlamaktadır. Deneme maliyeti
düşerken zaman açısından da büyük avantajlar elde edilmektedir.
FPGA Mimarisi 5.1.
Yarı iletken teknolojisi ile üretilen FPGA'lar, temel olarak Mantık Hücreleri,
Giriş/Çıkış Blokları ve Programlanabilir Ara Bağlantılardan oluşur.
Yapılandırılabilir özellikli olan mantık hücreleri FPGA içerisinde matris şeklinde
yerleştirilmiştir. Programlanabilir Ara Bağlantılar ile bu mantık hücreleri
birbirlerine bağlanmıştır.
Mantık hücreleri, FPGA içerisinde basit fonksiyonların gerçekleştirildiği
yapılardır. FPGA ile dış çevresi arasındaki ara yüzü sağlayan bağlantı uçlarına
ise Giriş/Çıkış Blokları adı verilir. FPGA içerisinde ayrıca birçok çarpma işlemini
paralel olarak yürütebilen DSP blokları ile bir giriş saatine bağlı değişik frekans
ve fazlarda çoklu saatler üretebilen PLL modülleri de bulunur. Bu modüller
tasarlanan devrede ihtiyaç duyulan osilatör sayısını ve dolayısıyla kullanılan
saat pini sayısını azaltır. Şekil 5.1’de FPGA mimarisi kabaca gösterilmiştir
(Doğan, 2008).
42
Şekil 5.1. FPGA Mimarisi
FPGA İle Tasarım 5.2.
FPGA ile tasarım süreci Şekil 5.2‘deki gibi bir ihtiyaç halinde başlar ve şematik
veya donanım tanımlama dillerinden birisi kullanılarak yazılımsal tasarım ile
devam eder. Yazılan kodların derlenmesinden sonra simülasyon ile yazılımın
doğrulaması yapılır. Simülasyonda çalışan uygulama analiz ve sentez kısmında
lojik kapılara dönüştürülür. Daha sonra yerleştirme ve yönlendirme bölümünde
tasarımın yükleneceği FPGA modülüne uygun hale getirilir. FPGA modülüne
uygun hale getirilen tasarım FPGA‟ya yüklenerek tasarım süreci sonlandırılır
(Çelik ve Topuz, 2013).
43
Şekil 5.2. FPGA İle Tasarım
OpenCL ve FPGA 5.3.
FPGA’lar doğal olarak paraleldir, bu nedenle OpenCL'in paralel bilgi işleme
yetenekleri ile mükemmel bir uyum içindedir. FPGA, iş hattı paralelliği
kabiliyetleri ile tipik veri veya görev paralelliğine bir alternatif sunar. Burada,
görevler, ana bilgisayar programının etkileşimi olmaksızın önceki görevden
farklı veriler kullanan, gönderme-alma yapılandırmasında oluşturulabilir.
OpenCL, kodun tanıdık C programlama dilinde geliştirilmesine ve OpenCL
tarafından sağlanan ek özelliklerin kullanılmasına olanak tanır. Çekirdek olarak
adlandırılan bu uygulamalar FPGA tasarımcılarının düşük seviyeli HDL dillerini
öğrenmek zorunluluğunu ortadan kaldırır ve kolaylıkla FPGA'e yüklenebilir.
44
Yazılım geliştiricileri ve sistem tasarımcıları için ve FPGA'da çalışacak kodları
geliştirmede OpenCL'i kullanmanın çeşitli avantajları vardır:
Basitlik ve geliştirme kolaylığı: Çoğu yazılım geliştiricisi C programlama dilini
bilir, ancak düşük seviyeli HDL dillerini bilenlerin sayısı azdır. OpenCL, yazılım
geliştiricisini daha yüksek bir programlama seviyesinde tutarak sistemi daha
fazla yazılım geliştiricisine açık hale getirir.
Kod ayrımlaması: OpenCL kullanılarak, kod ayrımlanabilir ve performansa
duyarlı kısımlar belirlenerek, FPGA'da çekirdekler olarak donanım
hızlandırmasına tabi tutulabilir.
Performans: Watt başına performans, sistem tasarımının nihai hedefidir. FPGA
kullanarak, yüksek performans ile enerji açısından verimli bir çözüm elde
edilebilir.
Heterojen sistemler: OpenCL ile gerçek anlamda heterojen bir sistem tasarımı
sağlamak için FPGA’ları, CPU'ları, GPU'ları ve DSP'leri sorunsuz bir şekilde
hedefleyen çekirdekler geliştirebilir.
Kodun yeniden kullanımı: Yazılım geliştirmenin önemli kurallarından biri,
kodun tekrar kullanılmasını sağlamaktır. Kodların tekrar kullanımı, genellikle
yazılım geliştiricileri ve sistem tasarımcıları için zor bir hedeftir. OpenCL
çekirdekleri, FPGA'ın farklı aileleri ve nesilleri için hedeflenebilecek taşınabilir
kod geliştirilmesini ve kodun ömrünün uzun olmasını sağlar.
Çoğu FPGA üreticisi, FPGA’lar üzerinde OpenCL ile geliştirme için yazılım
geliştirme araçları sağlar (Wiley ve Sons, 2014).
45
6. ARAŞTIRMA BULGULARI
Güvenlik Duvarında Paralel Mimariler 6.1.
Gün geçtikçe artan veri trafiği, güvenlik duvarlarının paket/saniye ile ölçülen
veri (paket) süzme hızlarının artmasını gerekli kılmıştır. Güvenlik duvarlarının
paralel proglanması bu amaca ulaşmak için uygun bir yöntemdir. Güvenlik
duvarı iki şekilde paralelleştirilebilir: Veri-paralel ve İşlev-paralel.
6.1.1. Veri-paralel güvenlik duvarı
Paralel programlama terminolojisine göre, verileri (paketleri) güvenlik duvarı
düğümleri arasında dağıtan bir tasarım veri paralel olarak kabul edilir. Veri-
paralel güvenlik duvarı sistemi, paralel bağlanmış birden fazla özdeş güvenlik
duvarından oluşturulur. Her bir güvenlik duvarı düğümü, diğerlerinden
bağımsız bir şekilde çalışmasını sağlayan, yerel kural setine ihtiyaç duyar. Bu
yerel kural setleri, genel güvenlik ilkesinin eksiksiz bir kopyası olmak
zorundadır. Gelen paketler daha sonra güvenlik duvarı düğümleri arasında
dağıtılır, böylece bir güvenlik duvarı düğümü belirli bir paketi işler. Bu sayede
farklı paketler paralel olarak işlenir ve tüm paketler tüm güvenlik politikasıyla
karşılaştırılmış olur.
Şekil 6.1. Veri-Paralel Güvenlik Duvarı
46
6.1.2. İşlev-paralel güvenlik duvarı
İşlev-paralel güvenlik duvarı tasarımı güvenlik duvarı düğümüleri dizisinden
oluşur. Bu tasarımda, filtrelenmesi istenilen trafik, tüm güvenlik duvarı
düğümlerine tekrarlanır. Her bir güvenlik duvarı düğümü, güvenlik politikasının
bir bölümü için kendisine gelen trafiği denetler. Güvenlik duvarı düğümleri
tarafından paketler işlendikten sonra, herbir düğümün denetleme sonucu CPU
üzerinde çalışan ana bilgisayar programına gönderilir. Bir paket üzerinde
birden fazla karara sebep verilmemesi amacıyla, güvenlik duvarı düğümlerinin
neticeleri sıralı olarak işlenir.
Bir paket aynı anda birden fazla iş parçacığı tarafından işlenir. Her bir iş
parçacığı (güvenlik duvarı düğümü) kural setinin bir bölümünü paket üzerinde
kontrol eder. Paketler ana bilgisayar programı tarafından OpenCL cihazının
üniversal belleğine kopyalanır. Kural veritabanın düğümü ilgilendiren kısmı,
OpenCL cihazının sabit belleğinde saklanır. Tüm iş parçacıkları yürütmeyi
tamamladıktan sonra oluşan karar dizisi cihazdan ana bilgisayar programına
kopyalanır (Gaur vd, 2010).
Şekil 6.2. İşlev-Paralel Güvenlik Duvarı
47
6.1.3. Hibrit model
Veri-paralel ve işlev-paralel tasarımlar, FPGA mimarisinin hesaplama
yetenekleri ile tam olarak eşleşmemektedir. Veri-paralel tasarım, güvenlik
duvarında saniyede işlenebilen paket sayısını artırır. Buna karşılık işlev-paralel
tasarım ise paket işleme gecikmesini azaltır. FPGA’ın yüksek paralel hesaplama
yetenekleri kullanılarak hem saniyede işlenebilen paket sayısı arttırılabilir hem
de paket işleme gecikmesi azaltılabilir. Böylece daha iyi bir model elde edilir.
Hibrit modelde bir paket kümesi biriktirilir ve her paket FPGA üzerinde farklı
bir blokla paralel olarak işlenir. Bir blok içinde, aynı anda bir paket birden çok iş
parçacığı tarafından işlenir ve her iş parçacığı kural setinin bir bölümünü
kontrol eder. Kural veri tabanı, OpenCL cihazının üniversal belleğinde tutulur.
Sonuçta tüm iş parçacıkları yürütmeyi tamamladıktan sonra paketlerin ne
olacağını belirleyen karar dizileri cihazdan ana bilgisayar programına
kopyalanır (Gaur vd, 2010).
Şekil 6.3. Hibrit Model
48
Altera DE1-SoC FPGA Geliştirme Kartı 6.2.
Altera chip içinde sistem (SoC) FPGA ile oluşturulmuş sağlam bir donanım
tasarım platformu olan DE1-SoC, resmi olarak Altera'nın sertifikalı geliştirme
kartıdır. Altera'nın SoC sistemi yüksek bant genişliği bağlantı omurgasını
kullanarak FPGA yapısı ile sorunsuz bir şekilde bağlanmış işlemci, çevre
birimleri ve bellek ara yüzlerinden oluşan bir ARM tabanlı sabit işlemci
sistemini (HPS) bütünleştirir. DE1-SoC geliştirme kartı, yüksek hızlı DDR3
bellek, video ve ses özellikleri, ethernet ağı ve daha fazlası gibi donanımları
içerir. SoC içerisindeki FPGA, Altera Cyclone V SE 5CSEMA5F31C6N modelidir
ve 64MB SDRAM’a sahiptir. İşlemci ise 800MHz çift çekirdekli ARM Cortex-A9
MPCore modelidir ve 1GB DDR3 SDRAM belleğe sahiptir. FPGA üzerinde 85 bin
programlanabilir mantık elemanı, 4450 Kbit gömülü bellek, 6 adet kademeli PLL
ve 2 tane sabit bellek denetleyicisi mevcuttur.
DE1-SoC’de geliştirilecek bir OpenCL projesi, Şekil 6.4'te gösterildiği gibi
OpenCL çekirdeği ve ana programdan oluşur. Çekirdek, SoC FPGA'in FPGA kısmı
üzerinde gerçekleştirilir ve ana program, SoC FPGA'in ARM kısmında bulunur.
Ana bilgisayar programı, Windows veya Linux'a kurulu Altera SoC EDS
tarafından çapraz derleyici ile derlenir ve çekirdek, Windows veya Linux'a
kurulmuş olan Quartus ve OpenCL SDK tarafından geliştirilir.
49
Şekil 6.4. Altera SoC OpenCL Mimarisi
Aynı zamanda kartın da üreticisi olan Terasic firması tarafından sağlanan DE1-
SoC OpenCL kart destek paketi (BSP: Board Support Package), kullanıcılar için
DE1-SoC kartına dayalı OpenCL projesi geliştirmek için gerekli kaynakları
içermektedir. Bu kaynaklar içerisinde ARM işlemci üzerinde çalışacak olan
Linux işletim sistemi imajı da mevcuttur. Ana bilgisayar programları bu işletim
sistemi üzerinde çalıştırılır.
Linux Kullanıcı Alanı Paket Kuyruğu 6.3.
DE1-SoC geliştirme kartı üzerindeki ağ arayüz donanımı SoC FPGA'ın ARM
kısmına bağlıdır. Bu işlemci üzerinde çalışan Linux işletim sistemi kullanılarak
ağ haberleşmesi gerçekleştirilmektedir. Linux çekirdeğinde bulunabilien
Netfilter uygulama çerçevesi kullanılarak, IP paketleri kullanıcı alanında
oluşturulan bir kuyruğa eklenebilir.
Kullanıcı alanı, işletim sisteminin çekirdeğinin dışında çalışan tüm kodu ifade
eder. Genellikle işletim sisteminin çekirdekle etkileşim kurmak için kullandığı
çeşitli program ve kitaplıklar için kullanılan bir terimdir. Bu programlar
50
giriş/çıkış işlemleri yapan programlar, dosya sistemi nesnelerini manipüle eden
programlar veya uygulama yazılımları olabilir.
Netfilter kullanıcı alanında oluşturulan kuyruğa eklediği paketleri daha sonra
paketlerle ne yapılacağını belirten bir karar (ACCEPT veya DROP gibi) ile
birlikte çekirdek içine geri götürür. Bu paketler, çekirdeğe yeniden enjekte
edilmeden önce kullanıcı alanında değiştirilebilir.
Bu tez çalışmasında kullanıcı alanında oluşturulan kuyruğa eklenen paketlerin
kabul edilip edilmeyeceği kararları, FPGA üzerindeki güvenlik duvarları
tarafından belirlenmiştir. IP paketlerinin kullanıcı alanında oluşturulan kuyruğa
eklenebilmesi için IPTables kuralları içinde belirtilen hedef NFQUEUE kullanılır.
Kuyruğa eklenen paketlerin çekirdek Nfnetlink_queue alt sisteminden alınması
ve kararların çekirdek Nfnetlink_queue alt sistemine verilmesi işlemleri
Libnetfilter_queue tarafından gerçekleştirilir. Örnek olarak aşağıdaki IPTables
kuralı, kullanıcı alanındaki kuyruğu okuyan programdan, sisteme giden TCP
paketleri için bir karar vermesini isteyecektir:
iptables -A INPUT –p tcp -j NFQUEUE --queue-num 0
Kullanıcı alanında çalışan program, 0 numaralı kuyruğa bağlanmak ve
çekirdekten mesajları almak için Libnetfilter_queue kullanır.
Kullanıcı alanı paket kuyrukları ile ilgili bilinmesi gereken hususlar şunlardır:
Kuyruklar sabit uzunlukta ve bağlantılı bir paket listesi olarak
oluşturulur.
Dizin değeri olarak her bir pakete bir tamsayı değeri entegre edilmiştir.
Paketler, kullanıcı alanı programı, pakete karşılık gelen dizin değerine bir
karar ürettiğinde serbest bırakılır.
Birden fazla IP paketi, program tampon belleği boyutuna göre, okunarak
kuyruğa eklenir. Paketler hakkında kararların verilerek her pakete uygulanması
gereken işlemi belirlemek üzere, paketleri paralel olarak işleyecek olan FPGA’a
paket kuyruğu gönderilir. Kararların Libnetfilter_queue tarafından paketler için
çekirdeğe enjekte edilmesi herhangi bir sırada yapılabilir. Örneğin, paketlerin 1,
2, 3 sırasıyla alınması ve 2, 3, 1 sırasıyla gönderilebilmesi mümkündür. Netfilter
51
paket akışı ve paket filtreleme programının yerleşimi Şekil 6.5'de gösterilmiştir.
Aynı şekilde, IPtables ve Libnetfilter_queue'nin kullanıcı alanındaki paket
filtrelemeyi gerçekleştirmek için nasıl işbirliği yaptıkları da görülebilmektedir.
Şekil 6.5. Netfilter veri akışı
Aralarında trafiği dağıtarak performası daha da arttırmak için CPU'daki
kullanıcı alanına birden fazla iş parçacığı oluşturulabilir. Daha sonra her iş
parçacığı kendi paket tamponunu FPGA’e gönderilir. FPGA’e veri paketlerini
aynı anda göndermekten kaçınmak amacıyla CPU iş parçacıkları arasında
senkronizasyon gereklidir. Mantıksal bir değişken kullanılarak bu
gerçekleştirilebilir. Bu durumda birden fazla iş parçacığı farklı bağlantıları işler.
Şekil 6.6’de, çoklu iş parçacığı program modeli gösterilmiştir.
Şekil 6.6. Çoklu iş parçacığı program modeli
52
OpenCL ile FPGA Programlama Modeli 6.4.
Ağ iletişimindeki her paketin bağımsız niteliğini göz önüne alındığında, birden
çok paketi paralel işleyerek, OpenCL kullanılarak FPGA’ın yüksek paralel işleme
yeteneğinden yararlanabilineceği sonucuna varılabilir. Dolayısıyla, paketlerin
alınıp veri yapısında kuyruğa dizilmesi gerekmektedir. Paket işlemenin
hızlandırılması, 'arabellek boyutu' çarpı 'kural seti boyutu' miktarınca FPGA’da
iş parçacığı çalıştırarak gerçekleştirilir. Bu yapılandırma kullanılarak, arabellek
boyutunun muhafaza edebildiği kadar, birden fazla paket bir seferde işlenir.
Her iş parçacığının iki özelliği vardır: iş parçacığı dizini ve blok dizini. Her iki
dizininde boyutları x, y ve z olan üç boyutlu dizinler olabilir. Uygulamamızda,
her bir iş parçacığı bir paketin güvenlik duvarı kuralı ile eşlemesini kontrol
eder. Paket tamponu ve kural dizisi ile birlikte bu tampon dizilimine karşılık
gelen başka bir dizi daha mevcuttur. Kural dizisi, programın başında FPGA
belleğine yüklenir. Karar dizisi, paket tamponu ile aynı boyuta sahiptir ve bu
dizinin, paket arabelleğindeki bir pakete karşılık gelen her bir öğesi, eşleşen ilk
kural paketini de belirtir. Her bir iş parçacığı, bir paketle eşleşen bir kuralı
bulduğunda, iş parçacığı numarasını karar dizisindeki karşılık gelen öğeye
yazar. Paketler, güvenlik duvarı kural kümesindeki birden çok kuralla ve
eşzamanlı olarak diğer iş parçacıklarında da eşleşebileceğinden, bu sorunu
çözmek için bir mekanizma uygulanmak zorundadır.
53
6.4.1. OpenCL cihazı çekirdek kodları
Altera DE1-SoC FPGA kartı için geliştirilmiş Linux dağıtımında IPTables desteği
eklenmemiştir. Geliştirilen uygulamada IPTables tarafından kullanıcı uzayındaki
kuyruğa eklenecek olan ağ trafiği suni olarak rastegele verilerden üretilmiştir.
Ağ trafiğinin FPGA üzerindeki güvenlik duvarlarına gönderilerek paralel olarak
işlenmesini temsil etmek amacıyla, kaynak IP adresi, hedef IP adresi, kaynak
bağlantı noktası (port) numarası, ve hedef bağlantı noktası numarasını
sakladığını varsaydığımız diziler tanımlanmıştır. Bu dizilerdeki herbir elemanın
boyutu saklayacağı veri türüne uyumlu olmalıdır. IPv4 adresleri 32 bit, IPv6
adresleri ise 128 bit uzunluğundadır. OpenCL tamsayı veri tiplerinin en genişi
64 bit uzunluğundadır. Dolayısı ile IPv6 adresleri iki dizi elemanı içerisine
saklanmak zorundadır. Bağlantı noktası numaraları 16 bit uzunluğunda ve
protokol bilgisi de 8 bit uzunluğundadır. Belirtilen bilgileri grup halinde ana
bilgisayardan FPGA’e transfer edebilmek amacıyla Şekil 6.7’de gösterilen yapı
tanımlanmıştır.
Bu yapıda dummy isminde fazladan değişken tanımlanmıştır. Bu tanımların
sebebi, “Intel® FPGA SDK for OpenCL™ Best Practices Guide” kılavuzunda
belirtilen, yapı hizalamasının gerçekleştirilmesidir (Intel, 2017). Bu dokümana
göre yapı boylarının byte cinsinden tüm yapı elemanlarının en küçük ortak katı
olarak ayarlanması performansı olumlu etkilemektedir. Oluşturulan yapının
normal boyutu 38 byte’dır. Yapının boyutunu, tüm elemanları en küçük ortak
katı olan 40 byte olacak şekilde ayarlamak için iki byte uzunluğunda
kullanılmayan bir eleman eklenmiştir. Şekil 6.8’de çekirdek için yazılan OpenCL
kodu verilmiştir. Standart gereği çekirdeğin parametreleri işaretçiler olarak
gönderilmiştir. Çekirdek aldığı paketi parametre olarak gelen kural sayısı kadar
1. 2. 3. 4. 5. 6. 7. 8.
typedef struct{ ulong sourceIP[2]; ulong destinationIP[2]; ushort sourceport; ushort destinationport; ushort protocoltype; ushort dummy; }Package;
Şekil 6.7. IPv6 paketleri için kullanılan yapı
54
kuralla karşılaştırır. Eşleşme bulunduğu anda paket indisi ve kaçıncı kuralla
eşleştiği karar (verdict) dizisine yazılarak işlem sonlandırılır.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
__kernel void firewall( __global const Package *restrict received, __global const Package *restrict rule, __global int *restrict verdict, __global int *rulelength) { // Is ogesinin indisini öğren int index = get_global_id(0); for (int i=0;i<rulelength[0];i++) { if((received[index].sourceIP[0]==rule[i].sourceIP[0]) && (received[index].sourceIP[1]==rule[i].sourceIP[1]) && (received[index].destinationIP[0]==rule[i].destinationIP[0]) && (received[index].destinationIP[1]==rule[i].destinationIP[1]) && (received[index].sourceport==rule[i].sourceport) && (received[index].destinationport==rule[i].destinationport) && +(received[index].protocoltype==rule[i].protocoltype)) { verdict[index*2] = index; verdict[(index*2)+1] = i; break; } } }
Şekil 6.8. Çekirdek için yazılan OpenCL kodları
6.4.2. Ana bilgisayar OpenCL kodları
OpenCL programlarında ilk olarak programlanacak platformun varlığı kontrol
edilmelidir. Bu amaçla findPlatform() fonksiyonu Altera isimli platformu
bulmak için Şekil 6.9’da gösterildiği şekilde kullanılmıştır.
1. 2. 3. 4. 5. 6. 7.
cl_platform_id platform = NULL; platform = findPlatform("Altera");
if(platform == NULL) { printf("HATA: Altera OpenCL platformu bulunamadi.\n"); return false; }
Şekil 6.9. Platform bulmak için gerekli kodlar
55
Bulunan platform sorgulanarak barındırdığı OpenCL cihazlarının sayısı ve
isimleri Şekil 6.10’da gösterilen kodlar ile ekrana yazdırılmıştır.
1. 2. 3. 4. 5. 6.
device.reset(getDevices(platform, CL_DEVICE_TYPE_ALL, &num_devices)); printf("Platform: %s\n", getPlatformName(platform).c_str()); printf("%d tane cihaz kullaniliyor\n", num_devices); for(unsigned i = 0; i < num_devices; ++i) { printf(" %s\n", getDeviceName(device[i]).c_str()); }
Şekil 6.10. Platform sorgulama kodları
Daha önce Altera OpenCL derleyicisi olan AOCL ile derlenen çekirdek kodunu
tüm cihaza programlamak amacıyla bulunan ilk cihaz temsili cihaz olarak
kullanılır (tüm cihazın aynı türde olduğu varsayılarak). Şekil 6.11’de ilgili kodlar
gösterilmiştir.
1. 2. 3. 4. 5. 6.
std::string binary_file = getBoardBinaryFile("firewall", device[0]); printf("AOCX: %s kullaniliyor\n", binary_file.c_str()); program = createProgramFromBinary(context, binary_file.c_str(), device, num_devices); status = clBuildProgram(program, 0, NULL, "", NULL, NULL); checkError(status, "Program hazirlanamadi");
Şekil 6.11. OpenCL cihazının programlanması
Bu işlemleri takiben sırasıyla içeriğin, komut kuyruğunun ve çekirdeğin
oluşturulması işlemleri gerçekleştirilir. Programımızda bir anda işlenecek paket
sayısının parametrik olması amacı ile paket sayısını gösteren N isimli bir
değişken tanımlanmıştır. Platformda bulunan OpenCL cihazlarının paketleri eşit
sayıda bölüşmeleri için gerekli kod yazılmıştır. Elimizdeki geliştirme kartı
sadece bir tane OpenCL cihazından oluştuğu için bütün paketler bu tek cihazda
işlenmektedir. Yazılan kod bu anlamda geliştirme kartından bağımsız olup
birden fazla cihaz bulunması durumunu desteklemektedir.
OpenCL cihazına paketlerin ve güvenlik duvarı kurallarının gönderilebilmesi ve
karar dizisinin de okunabilmesi amacıyla gerekli tampon bellekler
oluşturulmuştur. Gönderme tampon bellekleri rastgele paketlerle doldurularak
OpenCL cihazına gönderilmiştir. Şekil 6.12’de gösterilen kodlar bu işlemi
gerçekleştirmektedir.
56
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
cl_event write_event[3]; status = clEnqueueWriteBuffer(queue[i], input_a_buf[i], CL_FALSE, 0, n_per_device[i] * sizeof(Package), input_a[i], 0, NULL, &write_event[0]); checkError(status, "Paketler transfer edilemedi"); status = clEnqueueWriteBuffer(queue[i], input_b_buf[i], CL_FALSE, 0, rulelength * sizeof(Package), input_b[i], 0, NULL, &write_event[1]); checkError(status, "Kurallar transfer edilemedi"); status = clEnqueueWriteBuffer(queue[i], rule_length_buf[i], CL_FALSE, 0, sizeof(cl_int), &rulelength, 0, NULL, &write_event[2]); checkError(status, "Kural uzunluğu transfer edilemedi");
Şekil 6.12. OpenCL cihazına paketlerin ve kuralların gönderimi
Burada herbir çekirdeğin bir paketi kural sayısı kadar kural için kontrol etmesi
tasarlandığı için, kural sayısının çekirdekler tarafından bilinmesi
gerekmektedir. Bu amaçla paketler ve kuralların ardından kural sayısı da
OpenCL cihazına transfer edilmiştir. Gerekli verinin cihaza gönderilmesinin
ardından çekirdeklerin çalışması sağlanmış ve netice (karar dizisi) cihazdan
okunmuştur.
İşlemlerin doğruluğunu test etmek amacıyla karşılaştırma işlemi SoC FPGA
üzerindeki ARM işlemciye de yaptırılmıştır. İşlemcinin çalışma süresi, verilerin
cihaza transfer süresi ve çekirdeklerin çalışma süresi OpenCL ve Linux
tarafından sağlanan arayüzler getStartEndTime() ve getCurrentTimestamp()
fonksiyonları tarafından ölçülerek kaydedilmiştir.
OpenCL Kodlarının Derlenmesi ve Çalıştırılması 6.5.
Geliştirilen uygulamada ana bilgisayar ve OpenCL cihazı için ayrı iki kod olduğu
için iki ayrı derleme işlemi gerçekleştirilmiştir. Ana bilgisayar işlemcisi ARM
olduğu için bu işlemci için derlenecek kod bir çapraz derleyici (crosscompiler)
ile derlenmiştir. Intel (Altera) firması tarafından sağlanan çapraz derleyici hem
Windows hem de Linux işletim sisteminde çalışabilmektedir. Derleme
neticesinde elde edilen çalıştırılabilir dosya, geliştirme kartına kopyalanmıştır.
SoC FPGA üzerinde çalışacak olan OpenCL kodlarının derlenmesi uzun bir
kurulum sürecini gerektirmektedir. Derleme işleminin gerçekleştirilebilmesi
için kart üreticisinin yazdığı kart destek paketine ihtiyaç vardır. Bizim
çalışmamız için kullanılan geliştirme kartı Terasic firması tarafından
57
üretilmiştir ve gerekli destek paketi yazılımı web sitelerinde mevcuttur.
Altera’nın OpenCL derleyicisi (AOCL) lisanslı bir yazılımdır. OpenCL için Intel
FPGA SDK’sı, Intel FPGA ürünlerini hedefleyen OpenCL uygulamalarının
kurulması ve çalıştırılması için bir derleyici ve araçlar sağlar. Intel FPGA
SDK'sında bir eklenti sunulmuştur. Bu eklenti 10 Gb Ethernet gibi ara yüzlerden
akan verileri doğrudan çekirdeğe ulaştırmak için bir giriş/çıkış ve ana bilgisayar
kanalı API’si içermektedir. Intel FPGA SDK’sı OpenCL 1.0 sürümünün gömülü
profilini desteklemektedir. Üniversiteler için Altera firması yazılımı kısa süreler
için ücretsiz olarak kullanmaya izin vermektedir. Yapılan çalışmada AOCL ile
çekirdek kodunun derlenmesi Linux işletim sistemine sahip bir bilgisayar ile
yapılmıştır. AOCL ile çekirdek kodunun derlenmesi yaklaşık bir saat süre
almaktadır. Dolayısı ile yapılacak küçük hatalar uzun vakit kayıplarına yol
açacağı için derleme işlemi başlamadan önce kod dikkatlice incelenmelidir.
Derleme neticesinde elde edilen .aocx uzantılı dosya geliştirme kartına
kopyalanmıştır.
OpenCL kodlarının çalıştırılabilmesi için geliştirme kartı üzerindeki Linux
işletim sistemine bağlanmak gerekmektedir. Geliştirme kartının üzerinde
bulunan USB portlarından birisi konsol portu olarak ayarlanmıştır ve bu port
üzerinden geliştirme kartı bilgisayara bağlanabilir. Bilgisayarda Putty gibi bir
terminal emülatörü yazılımı ile geliştirme kartı üzerindeki Linux işletim
sistemine bağlanılarak oturum açılabilir. Programın çalıştırılmasında ilk aşama
ortamın OpenCL ayarlarının yapılması ve çekirdek sürücüsünün kurulması
işlemidir. Bunun için Linux dağıtımı ile beraber gelen kabuk dosyası aşağıdaki
komut ile kullanlır.
>source ./init_opencl.sh
İkinci olarak FPGA’in yapılandırılması işlemi gerçekleştirilmelidir. Daha önce
AOCL ile derlenen .aocx uzantılı dosya burada kullanılır. Linux dağıtımında hazır
gelen aocl komutu ile bu işlem aşağıdaki sekilde gerçekleştirilir.
>aocl program /dev/acl0 firewall.aocx
Üstteki komut “firewall.aocx” dosyasının mevcut olduğu klasörde
çalıştırılmalıdır. Böylelikle FPGA OpenCL cihazı haline gelmiştir ve ana
58
bilgisayardan gelecek komutlara göre işlem yapacaktır. Son olarak çapraz
derleyici ile ARM işlemci için derlenen ana bilgisayar kodu çalıştırılarak tüm
programların çalışması sağlanır. Bu amaçla ana bilgisayarda çalışacak
programın isminin “firewall” olduğu ve o dosya ile aynı klasörde bulunulduğu
durum için aşağıdaki komutun yazılması yeterlidir.
>./firewall
Üstteki komut çalıştırılmadan önce dosya izinlerinin çalıştırma yetkisi verilecek
şekilde ayarlanması gerekmektedir. Şekil 6.13’de geliştirilen iş akış şeması
gösterilmiştir.
Şekil 6.13. Geliştirilen iş akış şeması
59
7. SONUÇ VE ÖNERİLER
Bu tez çalışması ile, bilgisayar ağlarında kullanılan güvenlik duvarlarının artan veri
trafiğini gecikmesiz ve paket kayıpsız işleyebilmelerini sağlamak amacıyla yeni bir
yazılım geliştirilmiştir. Bu amaçla paralel programlamaya imkân veren OpenCL dili ile
FPGA üzerinde paralel mimari ile bir güvenlik duvarı tasarlanmıştır.
Altera SoC FPGA için geliştirilen çekirdek Linux işletim sistemi üzerinde çalışan AOCL
derleyici tarafından derlenmiş ve geliştirme kartına aktarılmıştır. Çizelge 7.1’de
derleyicinin ürettiği tahmini kaynak kullanımı raporu görülmektedir. Rapora göre en
fazla kaynak kullanımı bellekte %44 olarak görülmektedir.
Çizelge 7.1. AOCL derleyici tarafından üretilen derleme raporu
Tahmini Kaynak Kullanımı
Çekirdek Adı ALUT Sayısı FF Sayısı RAM Miktarı DSP Sayısı
Firewall 8488 28164 179 0
Global Ara Bağlaşım 11636 14778 0 0
Sabit Önbellek 554 7440 29 0
Kart arabirimi 2160 1908 20 0
Toplam 22838 (21%) 52290 (24%) 228 (44%) 0 (0%)
Kullanılabilir 109572 219144 514 112
Uygulamanın performasının test edilebilmesi amacı ile farklı sayıdaki kurallar için FPGA
ve ana bilgisayar üzerindeki hesaplama süreleri ölçülmüştür. Bunun yanısıra IP
paketlerin ana bilgisayardan FPGA’e aktarım süresi de gözlenmiştir. Bu sürelerin
ölçümüde IP paketleri için versiyon 6 kullanılmıştır. Olası en kötü durumu analiz etmek
için kurallar ile paketlerin eşleşmediği durumlar dikkate alınmıştır. Çizelge 7.2’de
hesaplama süreleri verilmiştir. Tablodaki veriler kullanılarak ana bilgisayar ve FPGA için
hesaplama sürelerine ait grafikler oluşturulmuştur. Birbirinden çok uzak paket boyutları
şeçildiği ve çalışma süreleri de bu sebeple birbirinden uzak neticelendiği için tüm
grafiklerde zaman ekseni logaritmik olarak seçilmiştir.
60
Çizelge 7.2. Ana bilgisayar ve OpenCL cihazı için kural kontrol süreleri. Orta sütunlar paketlerin ana bilgisayardan OpenCL cihazına
transfer süresini de içermektedir
Hesaplama Süreleri (milisaniye)
100 Kural İçin 500 Kural İçin 1000 Kural İçin
Paket Sayısı Ana Bilg. OpenCL Chz. Çekirdek Ana Bilg.
OpenCL Chz. Çekirdek Ana Bilg.
OpenCL Chz. Çekirdek
10 0,154 1,889 0,179 0,785 1,413 0,587 1,636 2,119 1,086
50 1,162 0,888 0,182 3,987 1,510 0,591 8,095 2,192 1,090
100 2,592 0,994 0,190 7,784 1,523 0,590 16,489 2,247 1,089
500 7,545 1,432 0,494 37,665 3,394 2,219 82,192 5,757 4,378
1.000 15,101 2,104 0,865 75,291 5,293 3,916 164,420 9,373 7,713
5.000 75,813 7,333 3,935 379,201 22,617 19,068 801,954 41,902 37,979
10.000 151,131 13,854 7,758 777,234 44,544 38,018 1.629,932 82,723 75,862
50.000 780,181 67,742 38,335 3.896,150 219,949 189,869 8.019,906 409,055 379,246
100.000 1.510,682 132,730 76,565 7.527,127 437,115 379,283 16.291,641 815,959 757,636
500.000 7.566,012 668,828 382,381 37.651,020 2.182,929 1.895,994 80.589,416 4.074,281 3.787,841
1.000.000 15.128,484 1.319,220 764,665 75.298,882 4.366,400 3.792,160 162.472,665 8.147,442 7.576,079
61
Şekil 7.1. Ana bilgisayarda ve FPGA’de 100 kural için paketlerin işlenme süreleri
Şekil 7.1’de, farklı sayıda paketlerin 100 güvenlik duvarı kuralı için, SoC FPGA üzerinde
bulunan ARM tabanlı işlemci tarafından tek çekirdek üzerinde işlenme süreleri ile FPGA
üzerinde işlenme süreleri kıyaslanmıştır. Bu grafiğe göre 10 paket kadar bir uzunluk için
ana bilgisayar daha hızlı işlem gerçekleştirirken, 10 paketten sonra işlem süresi ana
bilgisayar için paket sayısı ile doğrusal olarak artmaktadır. Bu durum işlemcinin yapısı
gereği beklenen doğal neticedir. FPGA için işlem sürelerindeki artış doğrusal olmayıp
daha yavaş bir artış göstermektedir. 1 milyon paket için süreler incelendiğinde FPGA 1
saniyeden biraz uzun bir sürede işlemini tamamlarken ARM tabanlı işlemci 15,5
saniyeden daha uzun bir sürede işlemi gerçekleştirmiştir. Gerçekleştirilen sistemin 100
kural için 1 Mpps değerine ulaştığını söylemek mümkündür. Şekil 7.1’de FPGA üzerinde
paketlerin işlenme sürelerinde 5000 pakete kadar yüksek bir değişiklik
gözlenmemektedir. Bu durum FPGA içerisinde oluşturulan paralel işleme sayesinde
mümkün olmaktadır.
1,00E+00
1,00E+01
1,00E+02
1,00E+03
1,00E+04
1,00E+05
1,00E+06
1,00E+07
1,00E+08
Zam
an (
mili
san
iye)
IPv6 Paket Sayısı
Ana Bilgisayar
FPGA
62
Şekil 7.2. Ana bilgisayarda ve FPGA’de 500 kural için paketlerin işlenme süreleri
Şekil 7.3. Ana bilgisayar ve FPGA işleme sürelerinin karşılaştırılması
1,00E+00
1,00E+01
1,00E+02
1,00E+03
1,00E+04
1,00E+05
1,00E+06
1,00E+07
1,00E+08
Zam
an (
mili
san
iye)
IPv6 Paket Sayısı
Ana Bilgisayar
FPGA
1,00E+00
1,00E+01
1,00E+02
1,00E+03
1,00E+04
1,00E+05
1,00E+06
1,00E+07
1,00E+08
1,00E+09
Zam
an (
mili
san
iye)
IPv6 Paket Sayısı
Ana Bilgisayar
FPGA
63
Şekil 7.2 ve Şekil 7.3’te ana bilgisayar ve FPGA üzerindeki işleme sürelerinin 500 kural
ve 1000 kural için bir mukayesesi görülmektedir. Tabiiki farklı işlemci mimarileri ve
hızları için bu durum farklılık gösterecektir. Aynı zamanda işlemci üzerindeki
çekirdeklerin kullanımı ile ana bilgisayar işlem süresinin kısaltılması mümkündür. Bu
grafikte gösterilmek istenen FPGA’in içerindeki kapı sayısına bağlı olarak artan veri
miktarından, işlemciye göre daha az etkilendiğidir. Bu durum FPGA’in zaten doğal olarak
mevcut olan paralel mimarisi ile ilgilidir.
Şekil 7.4. Ana bilgisayar için farklı kural sayılarında işleme süreleri
Şekil 7.5. OpenCL cihazı için farklı kural sayılarında işleme süreleri
1,00E+00
1,00E+01
1,00E+02
1,00E+03
1,00E+04
1,00E+05
1,00E+06
1,00E+07
1,00E+08
1,00E+09
Zam
an (
mili
san
iye)
IPv6 Paket Sayısı
100 Kural
500 Kural
1000 Kural
1,00E+00
1,00E+01
1,00E+02
1,00E+03
1,00E+04
1,00E+05
1,00E+06
1,00E+07
1,00E+08
Zam
an (
mili
san
iye)
IPv6 Paket Sayısı
100 Kural
500 Kural
1000 Kural
64
Son olarak Şekil 7.4 ve Şekil 7.5’te ana bilgisayar ile FPGA için farklı kural sayılarına göre
hesaplama süreleri kendi içerisinde kıyaslanmıştır. Bu grafikler işlemci için artışların
doğrusal olduğunu ve FPGA’de ise doğrusal olmadığını daha net göstermektedir.
Karimi vd. (2013), yaptıkları çalışmalarında, Grafik İşleme Ünitesinin (GPU) paralel
işleme kapasitesini kullanarak, Linux kullanıcı uzayında Iptables'in ilk eşleştirme kuralı
mekanizmasını gerçekleştirmişlerdir. Elde ettikleri bulgular, CPU-GPU ile hızlandırılmış
kodun, Iptables kodunun CPU sürümüne göre önemli derecede performans artışı
sağladığını göstermiştir. 10000 kural için GPU'daki paket filtrelemesinin genel
performansı 400.000 paket/saniye civarındadır. Yapılan çalışma Karimi ve diğerlerinin
çalışması ile kıyaslanacak olursa, elde edilen sonuçlar 100 kural için 1 milyon
paket/saniye paket filtreleme performansının elde edildiğini göstermektedir. Karimi vd.
(2013) IP paketlerinin versiyonundan bahsetmemişlerdir. IPv4 ile IPv6 adresleri
arasında ciddi bir uzunluk farkı vardır. IPv6 adresleri IPv4 adres uzunluğunun 4 katıdır.
Bu uzunluk farkı performansı ciddi şekilde etkileyen bir unsurdur. Bu çalışmada daha
öncede belirtildiği üzere IPv6 paketleri kullanılmıştır. Yine önceki çalışmalarla (Karimi
vd. 2013), (Widianto vd. 2015) benzer olarak çok düşük sayıdaki paketler için CPU paket
filtreleme performansı daha iyidir. Bunun sebebi, paketlerin ana bilgisayardan OpenCL
cihazına aktarılmasının kayda değer bir süre almasıdır.
Bu neticeler ışığında yapılan çalışmada yaklaşık 1000 paket ve daha fazlası için FPGA ile
IP paketlerin güvenlik duvarı paket filtrelemesi işlemlerinin, ana bilgisayar ile işlemeye
göre daha avantajlı olduğu ortaya çıkmıştır. Daha az sayıdaki paket için, verilerin ana
bilgisayardan FPGA’e transfer süresinin uzunluğundan dolayı, verileri ana bilgisayar
üzerindeki çekirdeklerde paralel olarak işlemek daha avantajlı görülmektedir. Buradaki
sayılar ve süreler elimizdeki mevcut geliştirme kartına göre verilmiş olup, farklı model
FPGA’lar için paket sayıları farklılık gösterecektir. Genel sonuç itibariyle FPGA ile
güvenlik duvarının paralelleştirilmesi performansta artış sağlamıştır.
65
8. KAYNAKLAR
Ahmed, T. (2011). OpenCL framework for a CPU, GPU, and FPGA Platform, University of Toronto.
Ajami, R., & Dinh, A. (2011). Design a hardware network firewall on FPGA. In Electrical
and Computer Engineering (CCECE). Anshuman, V., Helal, A. E., Krommydas, K., & Feng, W. C. (2016). Accelerating Workloads
on FPGAs via OpenCL: A Case Study with OpenDwarfs. Computer Science
Technical Reports.
Banger, R. ve K. Bhattacharyya (2013). OpenCL programming by example, Packt
Publishing Ltd. Başkaya Onur (2010). OSI Katman Modelinde 3. Katman Güvenlik Duvarı. Beal, V. (2010). The Differences and Features of Hardware and Software Firewalls. Belkhede, A., Sonawane, S., Khirsagar, C., & Sapkal, D. D. (2016). International Journal Of
Engineering Sciences & Research Technology Firewall Engine Based On Graphics Processing Unit.
Cameron, R. (2004). Configuring NetScreen Firewalls, Syngress. Carriero, N. ve D. Gelernter (1989). How to write parallel programs: A guide to the
perplexed. Çelik Ahmet (2010). Paralel Bilgisayar Sistemlerinin Performans Analizi. Çelik Barış ve Topuz Vedat (2013). FPGA Tabanlı Robotik Kontrol. Doğan Ahmed Yasir (2008). AES algoritmasının FPGA üzerinde düşük güçlü tasarımı. Ercan, U., H. Akar ve A. Koçer (2013). Paralel programlamada kullanılan temel
algoritmalar. Eskikaya Barış ve Altılar Deniz Turgay (2012). Dıstrıbuted Opencl Opencl Platformunun
Ağ Ölçeğinde Dağıtılması. Flynn, M. J. (1966). Very high-speed computing systems. Fulp, E. W. (2006). Parallel firewall designs for high-speed networks, 25th IEEE
International Conference on Computer Communications. Proceedings. Gaster, B., L. Howes, D. R. Kaeli, P. Mistry ve D. Schaa (2012). Heterogeneous Computing
with OpenCL: Revised OpenCL 1, Newnes.
66
Gaur, M. S., V. Laxmi, K. C. Reddy, A. Tharwani, C. V. Krishna ve Lakshminarayanan. (2010). Parallel firewalls on general-purpose graphics processing units, Department of Computer Engineering Malaviya National Institute of Technology.
Gregg, M. (2015). The network security test lab. Halsey, M. (2015). Windows 10 Features by Edition. Beginning Windows 10. Hansteen, P. N. (2015). A No-nonsense Guide to the Openbsd Firewall. Herlihy, M. ve N. Shavit (2012). The Art of Multiprocessor Programming, Revised
Reprint, Elsevier. instruments, n. (2012). FPGA Fundamentals. Intel, (2017) FPGA SDK for OpenCL™, Best Practices Guide. Jedhe, G. S., Ramamoorthy, A., & Varghese, K. (2008). A scalable high throughput firewall
in FPGA. In Field-Programmable Custom Computing Machines. Karimi, K., Ahmadi, A., Ahmadi, M., & Bahrambeigy, B. (2013). Parallell Implementation
of Linux Packet Filtering, In Symposium on Computer Science and Software Engineering (CCSE).
Kayssi, A., Harik, L., Ferzli, R., & Fawaz, M. (2000). FPGA-based Internet protocol firewall
chip. Keskin, S., Erdogan, H. T., & Kocak, T. (2016). Graphics processing unit based next
generation DDoS prevention system. 4th International Symposium IEEE. Kizza, J. M. (2014). Computer network security and cyber ethics, McFarland. Koht-arsa, K., & Sanguanpong, S. (2008). A practical approach for building a parallel
firewall for ten gigabit Ethernet backbone, 42nd Annual IEEE International Carnahan Conference IEEE.
Kowalik, J. ve T. Puźniakowski (2012). Using OpenCL: Programming Massively Parallel
Computers. Kumar, A., A. Mittal, A. Gupta ve S. Ghosh (2010). Firewall Implementation. Kurose, J. F. (2010). Computer Networking: A Top-Down Approach. Mattson, T. G., B. Sanders ve B. Massingill (2004). Patterns for parallel programming,
Pearson Education. Moraes, A. M. (2011). Cisco Firewalls, Cisco Press.
67
Munshi, A., B. Gaster, T. G. Mattson ve D. Ginsburg (2011). OpenCL programming guide, Pearson Education.
Pacheco, P. (2011). An introduction to parallel programming, Elsevier. Reddy, K. C., Tharwani, A., & Krishna, C. (2013). Parallel firewalls on general-purpose
graphics processing units. Sahoo, A. K., Das, A., & Tiwary, M. (2014). Firewall engine based on graphics processing
unit, In Advanced Communication Control and Computing Technologies IEEE. Sarıtaş, Engin ve Sedat Karataş, (2013). Her yönüyle fpga ve vhdl.
Schultz, E. E. (2010). Types of Firewalls. Smith, G. (2010). FPGAs 101: Everything you need to know to get started. Şimşek Buğra (2016). İris Karşılaştırma Algoritmasının Opencl Dili Kullanılarak
Hızlandırılması. Şimşek Osman Seçkin (2014). Gömülü Grafik İşlemcileri İçin Opencl Tabanlı Görüntü
İşleme Kütüphanesi ve İnsan Yüzü Tespit Etme Uygulaması Tuncer, T. (2010). Bilgisayar Ağları İçin Saldırı Tespit Sistemi Tasarımları ve FPGA
Ortamında Gerçekleştirilmesi. Doktora Tezi, Fırat Üniversitesi, Fen Bilimleri Enstitüsü.
w3ii (2016). parallel computer architecture. Widianto, A. R., Lim, C., & Kho, I. E. (2015). Improving performance of intrusion
detection system using opencl based general-purpose computing on graphic processing unit (gpgpu).
Wikipedia (2009). Personal firewall. Wikipedia (2011). Microsoft Forefront Threat Management Gateway. Wiley John & Sons, I. (2014). FPGAs for Dummies-FPGAs keep you moving in a fast-
changing world, Wiley. Wilson, P. (2015). Design recipes for fpgas: Using verilog and vhdl, Newnes. Wordpress (2011). System Designing of 100 Gbps Ethernet Controller for Copper
Medium. Zwicky, E., S. Cooper ve B. Chapman (2000). Building Internet Firewalls 2nd Edition.
68
9. ÖZGEÇMİŞ
Adı Soyadı : Mohammed Ridha FAISAL Doğum Yeri ve Yılı : Bağdat, 1991 Medeni Hali : Evli Yabancı Dili : İngilizce, Türkçe, Arabça E-posta : [email protected] Eğitim Durumu Yüksek Lisans : 2018, Türkiye, Isparta, SDÜ, Fen Bilimleri Enstitüsü, Bilgisayar
Mühendisliği ABD Lisans : 2013, Irak, Bağdat, Dejlh University, Bilgisayar Teknik Mühendisliği Mesleki Deneyim
- Vadi Bilgisayar. Pozisyon: Bilgisayar teknisyeni
- Al-Marmouka for Food Industries. Pozisyon: Veri giriş uzmanı