Kích thước của một ghi nguyên tử vào đĩa trên hệ thống của tôi là gì?


10

Trong tài liệu cho các access_logchỉ thị , tài liệu nginx nói

Kích thước bộ đệm không được vượt quá kích thước ghi nguyên tử vào tệp đĩa.

Làm cách nào để xác định kích thước này trên hệ thống của tôi?


@mdpc Từ tài liệu được liên kết, nó khá rõ ràng, nó không phải là về kích thước của ngành, mà btw. đã được 512 byte trên hầu hết các phương tiện truyền thông kể từ cuối những năm 80 cho đến nay. Có một động thái hướng tới kích thước khu vực 4K trên các ổ đĩa mới.
kasperd

Thông số kỹ thuật này có thể có liên quan. Mặc dù nó dường như không đưa ra bất kỳ câu trả lời chính xác nào cho câu hỏi: pubs.opengroup.org/onlinepub/7908799/xsh/write.html
kasperd

Câu trả lời:


3

muộn còn hơn không :)

câu trả lời nhanh là: "2.147.479.552 byte, nếu phiên bản kernel là 3.14 hoặc mới hơn"

câu trả lời chi tiết:

Theo như tôi hiểu, đó là về việc viết tòa nhà:

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

1) mọi hệ thống POSIX (linux, bsd, tất cả unix) đều được đảm bảo có thể ghi tối đa MAX_SSIZE byte

Theo POSIX.1, nếu số lượng lớn hơn SSIZE_MAX, kết quả được xác định theo triển khai; xem GHI CHÚ cho giới hạn trên của Linux.

# getconf SSIZE_MAX
32767

2) linux đảm bảo có thể ghi tới 1.99 GiB (và đó là hoạt động nguyên tử cho phiên bản kernel linux 3.14 trở lên)

Trên Linux, write () (và các lệnh gọi hệ thống tương tự) sẽ chuyển tối đa 0x7ffff000 (2.147.479.552) byte, trả về số byte thực sự được chuyển. (Điều này đúng trên cả hệ thống 32 bit và 64 bit.)

Nhưng đó là hoạt động nguyên tử công bằng chỉ từ kernel linux 3.14

Theo POSIX.1-2008 / SUSv4 Phần XSI 2.9.7 ("Tương tác luồng với hoạt động tệp thông thường"):

Tất cả các chức năng sau đây sẽ là nguyên tử đối với nhau trong các hiệu ứng được chỉ định trong POSIX.1-2008 khi chúng hoạt động trên các tệp thông thường hoặc liên kết tượng trưng: ...

Trong số các API sau đó được liệt kê là write () và writev (2). Và trong số các hiệu ứng nên là nguyên tử trên các luồng (và quy trình) là các bản cập nhật của phần bù tập tin. Tuy nhiên, trên Linux trước phiên bản 3.14, đây không phải là trường hợp: nếu hai quy trình chia sẻ mô tả tệp mở (xem open (2)) thực hiện ghi () (hoặc writev (2)) cùng một lúc, thì I Các hoạt động / O không phải là nguyên tử đối với việc cập nhật phần bù tệp, với kết quả là các khối đầu ra dữ liệu của hai quy trình có thể (không chính xác) trùng nhau. Sự cố này đã được khắc phục trong Linux 3.14.


1

Câu trả lời Superuser này có một định nghĩa tốt về kích thước ghi nguyên tử là gì.

Điều này ít nhất là lớn bằng kích thước của lĩnh vực phần cứng, đó là kích thước đọc / ghi nguyên tử.


1
OK, vậy làm cách nào để xác định một khu vực đĩa lớn như thế nào?
bdesham

9
Tài liệu nginx và câu trả lời siêu người dùng không nói về cùng một lớp trong ngăn xếp lưu trữ. Tài liệu nginx nói về cách viết nguyên tử lớn nhất ở lớp hệ thống tệp, phụ thuộc vào hệ điều hành và FS. Câu trả lời của siêu người dùng đang nói về việc viết nguyên tử lớn nhất ở cấp độ khối, phụ thuộc vào phần cứng.
kasperd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.