OPENCL İLE FPGA ÜZERİNDE GÜVENLİK DUVARININ …tez.sdu.edu.tr/Tezler/TF03700.pdf · FPGA İle...

79
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

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

© 2018 [Mohammed Ridha FAISAL]

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ı