BG8: Uzman Seviyesi Linux Kernel Ayarları

Linux kernel ayarlarını varsayılanda bıraksak da sıkıntı olmaz ancak biz bu makineleri big data için kullanacağız bu sebeple bazı konfigürasyon değişikliği yapmak hem faydalı hem de performans artırıcı olacaktır. Bu ayarları yapmadan devam edebilirsiniz.

1. Tavsiye Edilen Linux Kernel Parametreleri:

Değiştireceğimiz temel kernel ayarları   /etc/sysctl.conf dosyasındadır.

[root@basecentos7min ~]# nano /etc/sysctl.conf
 # sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
fs.file-max=6815744
fs.aio-max-nr=1048576
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 262144 16777216
net.ipv4.tcp_wmem=4096 262144 16777216

Girdiğimiz değerleri kontrol edelim.

[root@basecentos7min ~]# sysctl fs.file-max
fs.file-max = 6815744
[root@basecentos7min ~]# sysctl net.core.rmem_default
net.core.rmem_default = 262144
[root@basecentos7min ~]# sysctl net.ipv4.tcp_rmem
net.ipv4.tcp_rmem = 4096        262144  16777216

Evet değiştirdik.

2. Disk ve Dizinler için noatime ve noadiratime atama

POSIX ailesi İşletim sistemleri her dosya için en son erişim zamanına ait bir metadata tutar. Access time anlamında atime denir. Diğer iki değer değiştirme (ctime) ve modifiye (mtime) zamanıdır. Bu güzel özeliğin bazı sıkıntıları var. Örneğin okumaya biz sadece okuma olarak bakarız ancak en son erişim zamanı tutulduğu için aslında her okuma bir yazma operasyonunu da gerektirir. Bildiğimiz gibi yazma hep daha maliyetlidir. Bir programın çalışırken onlarca kütüphaneyi gidip biryerlerden okuduğunu düşünün. Aşağıdaki değişiklikleri yapıyoruz.

[root@basecentos7min ~]# nano /etc/fstab
[root@basecentos7min ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Sep 24 18:11:36 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults,noatime        0 0
UUID=b4c94bc3-721a-4d60-a957-40d56f7c9eaf /boot                   xfs     defaults,noatime        0 0
/dev/mapper/centos-swap swap                    swap    defaults,noatime        0 0

Kontrol edelim

[root@basecentos7min ~]# mount | grep noatime
/dev/mapper/centos-root on / type xfs (rw,noatime,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,noatime,attr2,inode64,noquota)

3. Testing Disk I/O Speed

Disk hızını ölçmek için küçük bir programcık kuralım. Sonra test edelim

 [root@basecentos7min ~]# yum install hdparm

[root@basecentos7min ~]# hdparm -t /dev/sda1

/dev/sda1:
 Timing buffered disk reads: 604 MB in  3.01 seconds = 200.78 MB/sec

Makinem SSD üzerinde olduğu için fena bir performans göstermedi. HDD için 70 MB/s iyi sayılır.

4. Sunucu BIOS Ayarlarını Kontrolü

BIOS ayarları optimal performans için ayarlandığından emin olun. Örneğin disk sürücülerinin IDE emülasyonu kapalı olmalıdır. Diskleri mount etmeden önce tüm Hadoop dizinlerinin dosya yetkilerinin 700’e ayarlayın.

5. NIC Bonding

Verimliliği ve performansı ve güvenirliği arttırmak için NIC bounding kullanın.

6. NTP Kullanma

Cluster’daki tüm sunucuların saatlerinin senkronize olduğundan emin olun. Bunu NTP ile yapabilirsiniz. Eğer clusterınız internete erişmiyorsa sunuculardan birini NTP server yapabilirsiniz. Bu özellikle  ZooKeeper, Kerberos and HBase servisleri için önemlidir.

7. DNS

Cluster içindeki her bir sunucu hem ip hem de sunucu ismi ile birbirine erişebilmelidir ( forward lookup (of its hostname) and a reverse lookup (with its IP address)). Bunu DNS servisinden ya da tüm /etc/hosts dosyalarını güncelleyerek yapabilirsiniz.

Hadoop tabiatı gereği dağıtık hesaplama yaptığı için ağı çok kullanır dolayısıyla DNS hizmetini de. Dolayısıyla isim sunucusunun tampon belleğini (name server cache deamon) açmak iyi bir fikirdir. Bu ayarlama isim çözümlemesinden kaynaklı gecikmeleri asgariye indirir. 

8. Swap’i Kapatma

İşletim sistemi RAM’a ilave olarak diskte bir alanı RAM gibi kullanır. Swapiness değeri düştükçe RAM’i kullanma ve diske başvurma oranı da azalır. Değer sıfır ise bellek taşması aşamasına gelmedikçe disk kullanılmaz. Bu oran arttıkça diske müracaat da artar dolayısıyla performans düşer. Bu değeri 10 yapabiliriz. nano editör ile /etc/sysctl.conf içine girip son satıra değeri ekliyoruz.

[root@basecentos7min ~]# nano /etc/sysctl.conf
[root@basecentos7min ~]# grep swappiness /etc/sysctl.conf
vm.swappiness=10

grep ile eklediğimiz değeri kontrol ettik. Sunucuyu yeniden başlatmalıyız.

9. ipv6 Kapatma

Aşağıdaki komutları giriyoruz.

[root@basecentos7min ~]# sysctl -w net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6 = 1
[root@basecentos7min ~]# sysctl -w net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6 = 1
[root@basecentos7min ~]# cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1

Ayarın kalıcı olması için /etc/sysctl.conf içine girip aşağıdaki satırları dosyanın son satırına ekliyoruz.

[root@basecentos7min ~]# nano /etc/sysctl.conf 
net.ipv6.conf.all.disable_ipv6=1 
net.ipv6.conf.default.disable_ipv6 = 1

Tekrar başladıktan sonra kontrol yapalım:

[root@basecentos7min ~]# cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1

Sonuçta 1 görmeliyiz. Bu ipv6’nın kapandığı anlamına gelir.

10. Ulimits’i Ayarlama

Bir dosyayı açtığımızda işletim sistemi bu dosyayı temsil eden bir kayıt (entry) açar. Yüz dosya açılmışsa çekirdekte (kernel) bir yerde bunu temsil eden 100 kayıt açılır. Bu kayıtlar 1,2,3…100 şeklinde rakamlarla numaralandırılır. Bu kayıt numaralarına dosya tarifleyicisi (file descriptor) denir. Bu kayıt sayısı parametrelerle ayarlanır eğer bir kullanıcı yada hizmet (process) bu sayıyı taşarsa file descriptor error alır. Biz clusterımızda bu hatayı almamak için bu parametreyi yükselteceğiz. Kullanıcılar için shell limitleri belirliyoruz. nofile özelliği her bir kullanıcı prosesi için açık file descriptor için sınır tanımlar. nproc, proses sayısının üst değerini, soft uyarı limitini ve hard limit settings are the actual resource limits. nano editör ile limits.conf dosyasının en altına aşağıdaki satırları ekliyoruz.

[root@basecentos7min ~]# nano /etc/security/limits.conf
* soft nofile 32768
* hard nofile 32768
* soft nproc 32768
* hard nproc 32768

Değerleri kontrol edelim:

ulimit -a komutuyla açılan listede open files (-n) 32768 ve max user processes (-u) 32768 olduğunu görüyoruz.

11. Transparent Huge Pages (THP) Compaction’ı Kapatma

Cloudera ve Hortonworks uzmanlarına göre THP sıkılaştırması Hadoop performansını kötüleştiriyor. Bu sebeple birleştirmeyi (dfragmentation) kapatmak gerekiyor. Önce THP ne durumda görelim:

[root@basecentos7min ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
[root@basecentos7min ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

Açık. Temelli kapatmak için aşağıdaki işlemleri yapıyoruz.

[root@basecentos7min ~]# nano /etc/systemd/system/disable-thp.service
[root@basecentos7min ~]# cat /etc/systemd/system/disable-thp.service
[Unit]
Description=Disable Transparent Huge Pages (THP)

[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target

Systemd deamon u çalıştırıyoruz ve oluşturduğumuz scriptleri (disable-thp.service ve disable-thp.service) çalıştırıyoruz.

[root@basecentos7min ~]# systemctl daemon-reload
[root@basecentos7min ~]# systemctl start disable-thp
[root@basecentos7min ~]# systemctl enable disable-thp
Created symlink from /etc/systemd/system/multi-user.target.wants/disable-thp.service to /etc/systemd/system/disable-thp.service.

Sunucuyu tekrar başlattıktan sonra tekrar kontrol edelim kapanmışlar mı?

[root@basecentos7min ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@basecentos7min ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

Evet gördüğümüz gibi ikisi de never oldu.

Böylelikle uzman seviyesinde yapılacak Linux kernel ayarlarını bitirdik. Bu ayarları şuan kurduğumuz gibi eğitim amaçlı küçük zorlama clusterler için yapmasak da olur ancak gerçek clusterlerda canlı ortamda mutlaka yapılmalıdır. Söylentilere göre %30-40 performans artışı sağlıyormuş.


Yazar Hakkında
Toplam 179 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara