Sistemimdeki diske atomik yazma boyutu nedir?


10

Belgelerine de yönergede , nginx belgelerine diyoraccess_log

Arabellek boyutu, bir disk dosyasına atomik yazma boyutunu aşmamalıdır.

Sistemimde bu boyutun ne olduğunu nasıl belirleyebilirim?


@mdpc Bağlantılı belgeden, btw'nin sektör boyutları ile ilgili olmadığı oldukça açıktır. 80'lerin sonlarından bu yana çoğu medyada 512 bayt oldu. Yeni sürücülerde 4K sektör boyutlarına doğru bir ilerleme var.
kasperd

Bu şartname ilgili olabilir. Bu soruya kesin bir cevap vermese de
kasperd

Yanıtlar:


3

geç olsun güç olmasın :)

hızlı cevap: "Çekirdek sürümü 3.14 veya daha yeni ise 2.147.479.552 bayt"

detaylı cevap:

Anladığım kadarıyla, bu yazma sistemiyle ilgilidir:

http://man7.org/linux/man-pages/man2/write.2.html

1) tüm POSIX sistemlerinin (linux, bsd, tüm unix) en fazla MAX_SSIZE bayt yazabileceği garanti edilir

POSIX.1'e göre, sayı SSIZE_MAX'tan büyükse, sonuç uygulama tanımlıdır; Linux'ta üst sınır için NOTLAR'a bakın.

# getconf SSIZE_MAX
32767

2) Linux 1,99 GiB'ye kadar yazılabileceğini garanti eder (ve linux çekirdek sürüm 3.14 ve daha yenisi için atomik işlemdir)

Linux'ta, write () (ve benzeri sistem çağrıları) en fazla 0x7ffff000 (2,147,479,552) bayt aktarır ve gerçekte aktarılan bayt sayısını döndürür. (Bu hem 32 bit hem de 64 bit sistemler için geçerlidir.)

Ama sadece linux çekirdeği 3.14'ten adil atomik işlem

POSIX.1-2008 / SUSv4 Bölüm XSI 2.9.7'ye göre ("Düzenli Dosya İşlemleriyle İş Parçacığı Etkileşimleri"):

Aşağıdaki işlevlerin tümü, normal dosyalar veya sembolik bağlantılar üzerinde çalışırken POSIX.1-2008'de belirtilen efektlerde birbirlerine göre atomik olacaktır: ...

Daha sonra listelenen API'ler arasında write () ve writev (2) bulunmaktadır. Ve iş parçacıkları (ve işlemler) arasında atomik olması gereken efektler arasında dosya ofseti güncellemeleri vardır. Ancak, 3.14 sürümünden önceki Linux'ta durum böyle değildi: açık dosya tanımını paylaşan iki işlem (bkz. Open (2)) aynı anda bir write () (veya writev (2)) gerçekleştirirse, I / O işlemleri, dosya ofsetini güncelleştirmeyle ilgili olarak atomik değildi, sonuç olarak iki işlemin veri çıkış blokları (yanlış) çakışabilir. Bu sorun Linux 3.14'te giderilmiştir.


1

Bu Superuser cevabının atomik yazma boyutunun iyi bir tanımı vardı.

Bu, en azından atomik okuma / yazma boyutu olan donanım sektörünün büyüklüğü kadar büyüktür.


1
Peki, bir disk sektörünün ne kadar büyük olduğunu nasıl belirlerim?
bdesham

9
Nginx belgeleri ve süper kullanıcı yanıtı, depolama yığınındaki aynı katmandan bahsetmiyor. Nginx dokümantasyonu, dosya sistemi katmanındaki OS ve FS'ye bağlı en büyük atomik yazma hakkında konuşuyor. Süper kullanıcı cevabı, donanıma bağlı olan blok düzeyinde en büyük atomik yazma hakkında konuşuyor.
kasperd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.