GNU/Linux >> Znalost Linux >  >> Linux

Kompilace GNU/Linux s optimalizací -O3

-O3 má několik nevýhod:

  1. Především často vytváří pomalejší kód než -O2 nebo -Os . Někdy vytváří delší kód kvůli rozbalování smyčky, která může být ve skutečnosti pomalejší kvůli horšímu výkonu mezipaměti kódu.
  2. Jak bylo řečeno, někdy vytváří nesprávný kód. Může to být buď chyba v optimalizaci nebo chyba v kódu (jako ignorování striktního aliasingu). Protože kód jádra někdy je a někdy musí být „chytrý“, řekl bych, že je možné, že nějaký vývojář jádra udělal nějakou chybu. Když jsem kompiloval jádro s gcc 4.5, které bylo v tu chvíli stabilní, zažil jsem různé podivné problémy, jako je pád utilit v uživatelském prostoru. Stále používám gcc 4.4 pro jádro a několik vybraných nástrojů pro uživatelský prostor kvůli různým chybám. Totéž může platit pro -O3 .
  3. Nemyslím si, že by to linuxovému jádru přineslo mnoho výhod. Jádro neprovádí náročné výpočty a místy ano, je optimalizováno sestavením. -O3 příznak nebude změnit náklady na přepínání kontextu nebo rychlost I/O. Nemyslím si, že něco jako <0,1% zrychlení celkového výkonu za to stojí.

Používá se v Gentoo a nevšiml jsem si ničeho neobvyklého.


Všimněte si, že velké části toolchainu (zejména glibc) se nezkompilují, pokud změníte úrovně optimalizace. Systém sestavení je nastaven tak, aby ignoroval vaše preference -O pro tyto sekce u většiny rozumných distribucí.

Jednoduše řečeno, určité základní funkce knihovny a operačního systému závisí na kódu, který skutečně dělá to, co říká, nikoli na tom, co by bylo v mnoha případech rychlejší. Zejména -fgcse-after-reload (povoleno -O3) může způsobit zvláštní problémy.


Linux
  1. Příkaz whoami v Linuxu vysvětlený na příkladech

  2. Linux – konfigurace, kompilace a instalace vlastního linuxového jádra?

  3. Linux – proprietární nebo uzavřené části jádra?

  1. Co to znamená, když se řekne linuxové jádro je preemptivní?

  2. Jak kódovat modul jádra Linuxu?

  3. Požadavky na portování Linuxu na jinou platformu

  1. Analyzujte linuxové jádro pomocí ftrace

  2. Rozdělte disk na Linuxu pomocí GNU Parted

  3. Linux Centos s časovým razítkem dmesg