Gömülü Linux
  • Giriş
  • Linux Çekirdeği
    • Gömülü Sistemlerdeki Kullanımı
    • Geliştirme Süreci ve Versiyonlar
    • Kod Sözdizim Rehberi
    • Konfigürasyon Süreci ve Kbuild Sistemi
    • Derleme ve Çapraz Derleme
    • Initramfs İmajının Eklenmesi
    • U-boot İmajı Haline Getirilmesi
  • Gömülü Sistemlerde Boot Yükleyiciler
    • U-boot
    • RedBoot
    • ARM Mimarisinde Açılış Süreci
  • Linux Açılış Süreci
    • Kernel Açılış Süreci
    • Kullanıcı Kipine Geçiş - Init Süreci
  • Kök Dosya Sistemi Oluşturma
  • Initramfs İle Erken Kullanıcı Kipi
  • Devtmpfs Dosya Sistemi
  • NfsRoot Çalışma Yöntemi
  • Çapraz Derleme ve Gerekli Ekipmanlar
  • NOR, NAND, eMMC ve Flash Tabanlı Depolama
  • Memory Technology Device - MTD Katmanı
  • Unsorted Block Images - UBI Katmanı
  • Gömülü Sistemlerde Kullanılan Dosya Sistemleri
    • JFFS2 Dosya Sistemi
    • YAFFS2 Dosya Sistemi
    • UBIFS Dosya Sistemi
    • Cramfs Dosya Sistemi
    • Squashfs Dosya Sistemi
    • Minix Dosya Sistemi
    • FAT Dosya Sistemi
    • Ext2,3,4 Dosya Sistemi
  • Watchdog Kullanımı
  • CPU Frequency Scaling
  • Buildroot
  • Android Platformu
    • Geliştirme Ortamının Hazırlanması
    • İnşa Süreci
  • Sistem Çağrıları
  • I2C Protokolü
    • I2C Protokolünün Tanıtılması
    • Linux Altında I2C İşlemleri
    • Board Seçimi ve İlk İşlemler
    • Sıcaklık Sensörünün Seçilmesi
    • Sıcaklık Değerinin Yazılımsal Olarak Elde Edilmesi
  • Strace Kullanımı
  • GNU Build Sistemi Araçları
    • Make
    • Autoconf, Automake
  • Orange Pi Zero
    • Orange Pi Zero Teknik Özellikleri
    • Gerekli Araçların Elde Edilmesi
    • U-boot Derleme Süreci
    • Kernel Derleme Süreci
    • Wifi Desteği - Problemli Senaryo Örneği
    • Dosya Sisteminin Hazırlanması
    • SD Kartın Hazırlanması
    • Cihazın Açılması
  • Raspberry Pi
    • Raspberry Pi 2 Teknik Özellikleri
    • Açılış Süreci
    • Gerekli Araçların Elde Edilmesi
    • Kernel Derleme Süreci
    • U-boot Derleme Süreci
    • Dosya Sisteminin Hazırlanması
    • Cihazın Açılması
    • NFS Root Çalışma
    • Sistem Konfigürasyonu
    • Raspberry Pi 3
  • Board Spesifik Kılavuzlar
    • Hawkboard
    • Olimex A20
    • TI DM6446 EVM
    • BeagleBoard
    • BeagleBoneBlack
    • Savage Board
  • EKLER
    • Seri Konsol Kullanımı
    • TFTP Sunucu Kurulumu
    • NFS Sunucu Kurulumu
    • TI işlemcilerinde DSP kullanımı
      • C6Run
      • DSP Testi
    • Ubuntu Sanal Makine Performansı
Powered by GitBook
On this page
  • Cpufreq Governor
  • Performance Governor
  • Powersave Governor
  • Ondemand Governor
  • Conservative Governor
  • Userspace Governor
  • Aktif Governor Seçimi
  • Örnek Uygulama - 5000 Asal Sayı Bulma
  • cpufreq-utils
  • cpufreq-info
  • cpufreq-set

Was this helpful?

CPU Frequency Scaling

Cpu Frequency Scaling katmanı, Linux çekirdeğinin güç tüketimini azaltmak için işlemci çalışma frekansını azaltıp artırmasına imkan verir.

Frekans yönetimini sağlayan conservative, ondemand, userspace, powersave ve performance adında 4 farklı governor (yönetici) opsiyonu bulunmaktadır.

Linux çekirdeği versiyon 3.4 ve yukarısında gerekli modüller otomatik olarak yüklenmekte ve ondemand governor aktif edilmektedir.

Cpufreq Governor

Her bir governor basitçe CPU çalışma frekansının ne olması gerektiğine dinamik olarak karar veren algoritmalar olarak düşünülebilir.

Governor algoritmaları, belirlenen minimum ve maksimum değerler içerisinde kalmak şartıyla, istatistiki olarak seçilen politikaya uygun olarak kararlar vermeye çalışırlar.

Performance Governor

Bu governor sistemden sürekli maksimum performans istendiği durumda kullanılır.

Seçilen çalışma frekansı, scaling_max_freq değerini geçemez.

Powersave Governor

Sistemde güç tüketimini minimuma getirmeye çalışır.

Anlık cpu kullanım isteklerine tepkisi daha yavaş olur.

Seçilen değerler scaling_min_freq ve scaling_max_freq arasında olur.

Güç tüketiminin çok önemli olduğu senaryolarda önerilir.

Ondemand Governor

Bu governorda CPU frekansı ihtiyaç doğrultusunda anlık olarak değiştirilir.

Seçim algoritması cpu kullanımına dair aralıklarla örnekler alır ve bu örneklemi karar mekanizmasında kullanır.

Algoritma, sysfs üzerinden optimize edilebilir.

ondemand/sampling_rate dosyası üzerinden kaç mikrosaniyede bir örnek alınacağı belirtilebilir.

Bunun yanı sıra up_threshold, ignore_nice_load, sampling_down_factor, powersave_bias parametreleriyle algoritmanın karar üretme süreci daha hassas biçimde ayarlanabilir.

Conservative Governor

Ondemand governor'un özelleştirilmiş bir hali olarak düşünülebilir.

Ondemand'dan farklı olarak, Cpu frekansını azaltmak veya artırmak gerektiğinde bu işlemi kademeli olarak yapmaktadır.

freq_step, down_threshold ve sampling_down_factor parametreleriyle algoritmanın davranışında bir takım özelleştirmeler yapmak mümkündür.

Userspace Governor

Bu governor sistemdeki root kullanıcısının CPU frekansını spesifik olarak belirli bir değere ayarlayabilmesini sağlar.

Governor yüklendikten sonra, sysfs üzerinden scaling_setspeed dosyası aracılığıyla istenen çalışma frekansı ayarlanabilir.

Herhangi bir cpu hızını seçmek mümkün değildir. İlgili CPU için kullanılabilecek CPU hız değerleri sysfs üzerinde scaling_available_frequencies dosyasında belirtilmiştir:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
300000 600000 800000 1000000

Aktif Governor Seçimi

Sistemde o anda aktif olan governor scaling_governor dosyası üzerinden öğrenilebilir:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
performance

Aktif governor bu dosyaya ilgili governor ismi yazılmak suretiyle değiştirilebilir. Örnek olarak userspace governor kullanmak için:

# echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

Örnek Uygulama - 5000 Asal Sayı Bulma

Aşağıdaki örnek uygulamayı prime.c adıyla kaydedip farklı cpu governor'lar aktif iken test edelim.

/* prime.c */
#include <stdio.h>

int main()
{
        int n = 5000;
        int i = 3, count, c;

        for (count = 2; count <= n;) {
                for (c = 2; c <= i - 1; c++) {
                        if (i % c == 0) {
                                break;
                        }
                }
                if (c == i) {
                        count++;
                }
                i++;
        }
        printf("found %d prime numbers\n", count);
        return 0;
}

Uygulamayı şu şekilde derleyebilirsiniz:

$ gcc -o prime prime.c

Ardından sistemdeki farklı cpu governor veya saat frekansları için toplam zamanları time komutu yardımıyla ölçtüğümüzde aşağıdakine benzer bir sonuç alınmaktadır:

Aktif Governor

İşlem Süresi

Powersave

15.91 s

Conservative

6.84 s

Ondemand

5.05 s

Performance

4.70 s

Userspace - 300 Mhz

15.91 s

Userspace - 1000 Mhz

4.70 s

cpufreq-utils

Frekans değişimi işlemlerini kolaylaştırmak amaçlı cpufreq-utils paketinden çıkan uygulamalar kullanılabilir.

cpufreq-info

$ sudo cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: generic_cpu0
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 300 us.
  hardware limits: 300 MHz - 1000 MHz
  available frequency steps: 300 MHz, 600 MHz, 800 MHz, 1000 MHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance
  current policy: frequency should be within 300 MHz and 1000 MHz.
          The governor "powersave" may decide which speed to use
          within this range.
  current CPU frequency is 300 MHz (asserted by call to hardware).
  cpufreq stats: 300 MHz:nan%, 600 MHz:nan%, 800 MHz:nan%, 1000 MHz:nan%

cpufreq-set

  • -d parametresi ile minimum frekans, -u parametresi ile maksimum frekans, -g parametresi ile governor seçilir.

  • Minimum 300 Mhz, maksimum 600 Mhz ve ondemand governor seçmek için:

$ sudo cpufreq-set -d 300000 -u 600000 -g ondemand
  • userspace governor aktif iken -f parametresi ile spesifik bir frekans seçimi yapmak için:

$ sudo cpufreq-set -g userspace
$ sudo cpufreq-set -f 600000
PreviousWatchdog KullanımıNextBuildroot

Last updated 5 years ago

Was this helpful?

cpufreq-utils paketini, adresinden indirip derleyebilirsiniz. Paket içerisinden çıkan cpufreq-info ve cpufreq-set uygulamaları ile işlemleri kolay bir şekilde gerçekleştirmek mümkündür.

http://ftp.sunet.se/pub/Linux/kernel.org/linux/utils/kernel/cpufreq/cpufrequtils.html