GNU/Linux >> Znalost Linux >  >> Linux

O_DIRECT vs. O_SYNC na Linuxu/FreeBSD

U současných pevných disků to ne neexistuje ujištění, že soubor je skutečně zapsán na disk, i když disk hlásí operačnímu systému zápis jako dokončený! To je způsobeno vestavěnou mezipamětí v jednotce.

Na freeBSD to můžete zakázat nastavením kern.cam.ada.write_cache sysctl na 0. Tím se degraduje zapisovat výkon významně . Naposledy jsem to změřil (pevný disk WDC WD5001ABYS-01YNA0 na čipové sadě ICH-7, FreeBSD 8.1 AMD64), výkon nepřetržitého zápisu (měřeno s dd if=/dev/zero of=/tmp/foo bs=10M count=1000 ) klesla ze 75 000 000 bajtů/s na 12 900 000 bajtů/s.

Pokud chcete mít naprostou jistotu, že jsou vaše soubory zapsány;

  • Zakažte ukládání do mezipaměti pomocí sysctl kern.cam.ada.write_cache=0 následuje camcontrol reset <bus>:<target>:<lun> .
  • Otevřete soubor pomocí O_SYNC možnost.

Poznámka:

  • Váš výkon při zápisu (na HDD) bude nyní naprosto na hovno.
  • Nepřipojujte oddíl s sync volba; to způsobí vše I/O (včetně čtení) se mají provádět synchronně.
  • Nepoužívejte O_DIRECT . Pokusí se vyrovnávací paměť úplně obejít. To pravděpodobně ovlivní i čtení.

O_DIRECT v podstatě existuje pouze pro Oracle, aby obešel vrstvu mezipaměti jádra a prováděl vlastní mezipaměť. Má špatně definovanou sémantiku, svévolná omezení velikosti a zarovnání čtení, která můžete provádět, a obecně by se neměl používat. O_SYNC má vám poskytnout požadované efekty, ale bez základního souborového systému, který je odolný proti výpadku napájení nebo pádům, stále nemusí být pro vaše potřeby dostačující.


Linux
  1. Jak napsat text na obrázek pomocí příkazu Linux

  2. Jak vymazat mezipaměť v Linuxu

  3. Zkontrolujte připojení otevřené nebo zavřené? (v C v Linuxu)

  1. Linux – použití O_direct na Linuxu?

  2. linuxová schránka pro čtení/zápis v C

  3. Získejte délku MP3 v Linuxu / FreeBSD

  1. Jak používat příkazy Grep na Linuxu nebo FreeBSD

  2. Jak napsat soubor s C v Linuxu?

  3. Co potřebuji k napsání malé hry na Linuxu?