Skip to main content
  • Place orders quickly and easily
  • View orders and track your shipping status
  • Enjoy members-only rewards and discounts
  • Create and access a list of your products

5 způsobů, jak zlepšit rychlost pevného disku v systému Linux

Summary: Zde najdete 5 způsobů, jak zlepšit výkon pevného disku v Linuxu.

This article applies to   This article does not apply to 

Symptoms

5 způsobů, jak zlepšit rychlost pevného disku v systému Linux 

Cause

-

Resolution

  1. Obejít PAGE-CACHE pro data "read-once".
  2. Vynechejte PAGE-CACHE pro velké soubory.
  3. IF (CPU-BOUND) THEN SCHEDULER == NO-OP;
  4. Velikost bloku: Čím větší, tím lepší
  5. SYNC vs. ASYNC (a ČTENÍ vs. ZÁPIS)

 

1. Obejít PAGE-CACHE pro data "read-once".

Zpět na začátek

Mezipaměť stránek ukládá do mezipaměti nedávno navštívené stránky z pevného disku, čímž zkracuje dobu hledání pro následné přístupy ke stejným datům. Vyrovnávací paměť stránky nezlepší výkon při prvním přístupu na stránku z pevného disku. Pokud se tedy aplikace chystá přečíst soubor jednou a pouze jednou, pak je lepší obejít mezipaměť stránky. To je možné pomocí příznaku O_DIRECT. To znamená, že jádro nebere v úvahu tato konkrétní data pro stránkovací cache. Snížení kolizí mezipaměti znamená, že ostatní stránky (ke kterým by se přistupovalo opakovaně) mají větší šanci na zachování v mezipaměti stránky. Tím se zlepší poměr přístupů do mezipaměti a zajistí se lepší výkon.

void ioReadOnceFile()
{
/* Použití direct_fd a direct_f obchází kernel page-cache.
* - direct_fd je nízkoúrovňový deskriptor
souboru* - direct_f je datový proud podobný tomu, který vrací fopen()
* POZNÁMKA: Použijte getpagesize() pro určení optimální velikosti vyrovnávací paměti.
*/

int direct_fd = open("název_souboru", O_DIRECT | O_RDWR);
SOUBOR *direct_f = fdopen(direct_fd, "w+");

/* přímý disk-I/O hotovo ZDE*/

fclose(f);
zavřít(fd);
}


2. Vynechejte PAGE-CACHE pro velké soubory.

Zpět na začátek

Vezměme si příklad čtení ve velkém souboru (tj. databázi) tvořeném velkým počtem stránek. Každá další navštívená stránka jde do mezipaměti stránky, aby byla později vyřazena, když se čtou další a další stránky. Tím se výrazně snižuje poměr přístupů do mezipaměti. V tomto případě mezipaměť stránky neposkytuje žádné zvýšení výkonu. Proto by bylo lepší obejít mezipaměť stránky při přístupu k velkým souborům.

void ioLargeFile()
{
/* Použití direct_fd a direct_f obchází jádrovou stránkovací mezipaměť.
* - direct_fd je nízkoúrovňový deskriptor
souboru* - direct_f je datový proud podobný tomu, který vrací fopen()
* POZNÁMKA: Použijte getpagesize() pro určení optimální velikosti vyrovnávací paměti.
*/

int direct_fd = otevřeno("largefile.bin", O_DIRECT | O_RDWR | O_LARGEFILE);
SOUBOR *direct_f = fdopen(direct_fd, "w+");

/* přímý disk-I/O hotovo ZDE*/

fclose(f);
zavřít(fd);
}

3. IF (CPU-BOUND) THEN SCHEDULER == NO-OP;

Zpět na začátek

IO-scheduler optimalizuje pořadí vstupně-výstupních operací, které mají být zařazeny do fronty na pevném disku. Vzhledem k tomu, že doba hledání je nejtěžší penalizací pevného disku, většina plánovačů I/O se snaží minimalizovat dobu hledání. To je implementováno jako varianta algoritmu výtahu, tj. změna pořadí náhodně seřazených požadavků z mnoha procesů na pořadí, ve kterém jsou data přítomna na pevném disku, vyžaduje značné množství času CPU.

Některé úlohy, které zahrnují složité operace, bývají omezeny tím, jak rychle dokáže procesor zpracovat obrovské množství dat. Složitý I/O plánovač běžící na pozadí může spotřebovávat drahocenné cykly procesoru, a tím snižovat výkon systému. V takovém případě přepnutí na jednodušší algoritmus, jako je no-op, snižuje zatížení procesoru a může zlepšit výkon systému.
echo noop > /sys/block//queue/scheduler

 


4. Velikost bloku: Čím větší, tím lepší

Zpět na začátek

I když to nakonec skončí, rozhodně to není nejoptimálnější způsob. Z pohledu jádra je nejoptimálnější velikostí pro I/O požadavky velikost bloku souborového systému (tj. velikost stránky). Vzhledem k tomu, že všechny vstupně-výstupní operace v souborovém systému (a v mezipaměti stránek jádra) jsou z hlediska stránek, dává smysl, aby aplikace prováděla přenosy také v násobcích velikosti stránky. Také s vícesegmentovými mezipaměťmi, které se nyní dostávají na pevné disky, by bylo velmi výhodné provádět I/O v násobcích velikosti bloku.


Následující příkaz může být použit k určení optimální velikosti
blokustat --printf="bs=%s optimal-bs=%S\n" --file-system /dev/


5. SYNC vs. ASYNC (a ČTENÍ vs. ZÁPIS)

Zpět na začátek

Když aplikace iniciuje vstupně-výstupní čtení SYNC, jádro zařadí do fronty operaci čtení dat a vrátí se až po načtení celého bloku požadovaných dat. Během této doby jádro označí proces aplikace jako blokovaný pro I/O. Jiné procesy mohou využívat CPU, což vede k celkově lepšímu výkonu systému.

Když aplikace iniciuje vstupně-výstupní zápis SYNC, jádro zařadí do fronty operaci zápisu pro data a vloží proces aplikace do blokovaného vstupně-výstupního souboru. Bohužel to znamená, že proces aktuální aplikace je zablokovaný a nemůže provádět žádné další zpracování (nebo vstupně-výstupní operace), dokud se tato operace zápisu nedokončí.

Když aplikace inicializuje vstupně-výstupní čtení ASYNC, read() funkce se obvykle vrátí po přečtení podmnožiny velkého bloku dat. Aplikace musí opakovaně volat read() s velikostí dat, která se mají přečíst, dokud se nenačtou všechna požadovaná data. Každé další volání pro čtení přináší určitou režii, protože zavádí kontextový přepínač mezi uživatelským prostorem a jádrem. Implementace úzké smyčky pro opakované volání read() plýtvá cykly procesoru, které by mohly použít jiné procesy. Proto se obvykle implementuje blokování pomocí select(), dokud další read() nevrátí čtení nenulových bajtů. To znamená, že ASYNC je vytvořen tak, aby blokoval stejně jako čtení SYNC.

Když aplikace iniciuje asynchronní vstupně-výstupní zápis, jádro aktualizuje odpovídající stránky v mezipaměti stránek a označí je jako špinavé. Pak se ovládací prvek rychle vrátí do aplikace, která může pokračovat v běhu. Data jsou na pevný disk odeslána později v optimálnějším čase (nízké zatížení procesoru) optimálnějším způsobem (sekvenční zápisy).

Proto jsou čtení SYNC a ASYNC zápisy obecně dobrým způsobem, protože umožňují jádru optimalizovat pořadí a časování základních vstupně-výstupních požadavků.

 

 

 

 

 

 

 

 

 

 

Affected Products

Red Hat Enterprise Linux Version 5, Red Hat Enterprise Linux Version 6, Red Hat Enterprise Linux Version 7, Red Hat Enterprise Linux Version 9, Red Hat Enterprise Linux Version 8
Article Properties
Article Number: 000140396
Article Type: Solution
Last Modified: 16 Aug 2024
Version:  4
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.