Không có sự khác biệt giữa các tmpfs và shm. tmpfs là tên mới của shm. shm là viết tắt của SHaredMemory.
Xem: Linux tmpfs .
Lý do chính tmpfs thậm chí được sử dụng ngày hôm nay là nhận xét này trong / etc / fstab trên hộp gentoo của tôi. Chromium BTW sẽ không được xây dựng với dòng bị thiếu:
# glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for
# POSIX shared memory (shm_open, shm_unlink).
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0
đã ra khỏi tài liệu kernel linux
Trích dẫn:
tmpfs có những cách sử dụng sau:
1) Luôn có một mount bên trong kernel mà bạn hoàn toàn không thấy
. Điều này được sử dụng cho ánh xạ ẩn danh được chia sẻ và
bộ nhớ chia sẻ SYSV .
Gắn kết này không phụ thuộc vào CONFIG_TMPFS. Nếu CONFIG_TMPFS không được đặt, phần hiển thị của người dùng của tmpfs sẽ không được tạo. Nhưng các
cơ chế nội bộ luôn luôn có mặt.
2) glibc 2.2 trở lên dự kiến tmpfs sẽ được gắn tại / dev / shm cho
bộ nhớ chia sẻ POSIX (shm_open, shm_unlink). Thêm
dòng sau vào / etc / fstab sẽ đảm bảo việc này:
tmpfs / dev / shm tmpfs mặc định 0 0
Hãy nhớ tạo thư mục mà bạn định gắn tmpfs nếu cần.
Gắn kết này là không cần thiết cho bộ nhớ chia sẻ SYSV.
Gắn kết nội bộ được sử dụng cho điều đó. (Trong các phiên bản kernel 2.3,
cần phải gắn kết tiền thân của tmpfs (shm fs) để sử dụng
bộ nhớ chia sẻ SYSV )
3) Một số người (bao gồm cả tôi) thấy rất thuận tiện khi gắn nó,
ví dụ như trên / tmp và / var / tmp và có một phân vùng trao đổi lớn. Và bây giờ các
mount của các tệp tmpfs hoạt động, vì vậy mkinitrd được
phân phối bởi hầu hết các bản phân phối sẽ thành công với một tmpfs / tmp.
4) Và có lẽ còn nhiều điều nữa tôi không biết về :-)
tmpfs có ba tùy chọn gắn kết để định cỡ:
size: Giới hạn của byte được phân bổ cho thể hiện tmpfs này. Mặc định là một nửa RAM vật lý của bạn mà không cần trao đổi. Nếu bạn quá khổ các trường hợp tmpfs của mình, máy sẽ bế tắc vì trình xử lý OOM sẽ không thể giải phóng bộ nhớ đó.
nr_blocks: Giống như kích thước, nhưng trong các khối PAGE_CACHE_SIZE.
nr_inodes: Số lượng nút tối đa cho trường hợp này. Mặc định là một nửa số trang RAM vật lý của bạn hoặc (trên máy có highmem) số trang RAM lowmem, tùy theo số nào thấp hơn.
Từ Hạt nhân Hugepage trong suốt:
Hỗ trợ trong suốt Hugepage tối đa hóa tính hữu ích của bộ nhớ trống nếu so với phương pháp đặt trước của hugetlbfs bằng cách cho phép tất cả bộ nhớ không sử dụng được sử dụng làm bộ đệm hoặc các thực thể di chuyển khác (hoặc thậm chí không thể di chuyển). Nó không yêu cầu đặt trước để ngăn chặn các lỗi phân bổ hugepage đáng chú ý từ vùng người dùng. Nó cho phép phân trang và tất cả các tính năng VM nâng cao khác có sẵn trên các trang web. Nó không yêu cầu sửa đổi cho các ứng dụng để tận dụng lợi thế của nó.
Tuy nhiên, các ứng dụng có thể được tối ưu hóa hơn nữa để tận dụng tính năng này, ví dụ như chúng đã được tối ưu hóa trước đó để tránh một loạt các cuộc gọi hệ thống mmap cho mỗi malloc (4k). Tối ưu hóa vùng người dùng cho đến nay không bắt buộc và khugepaged đã có thể đảm nhiệm việc phân bổ trang tồn tại lâu dài ngay cả đối với các ứng dụng không biết về hugepage xử lý một lượng lớn bộ nhớ.
Nhận xét mới sau khi thực hiện một số tính toán:
Kích thước HugePage: 2MB
HugePages được sử dụng: Không / Tắt, bằng chứng là tất cả 0, nhưng được bật theo 2Mb ở trên.
DirectMap4k: 8.03Gb
DirectMap2M: 16.5Gb
DirectMap1G: 2Gb
Sử dụng Đoạn trên liên quan đến Tối ưu hóa trong THS, có vẻ như 8Gb bộ nhớ của bạn đang được sử dụng bởi các ứng dụng hoạt động bằng cách sử dụng mallocs 4k, 16.5Gb, đã được các ứng dụng sử dụng mallocs 2M yêu cầu. Các ứng dụng sử dụng mallocs của 2M đang bắt chước Hỗ trợ HugePage bằng cách giảm tải các phần 2M cho kernel. Đây là phương pháp ưa thích, vì một khi malloc được giải phóng bởi kernel, bộ nhớ sẽ được giải phóng vào hệ thống, trong khi việc cài đặt tmpfs bằng hugepage sẽ không làm sạch hoàn toàn cho đến khi hệ thống được khởi động lại. Cuối cùng, một cách dễ dàng, bạn đã có 2 chương trình mở / chạy yêu cầu một malloc 1Gb
Đối với những bạn đọc mà không biết malloc là Cấu trúc tiêu chuẩn trong C, viết tắt của ALL ALLationation. Các tính toán này đóng vai trò là bằng chứng cho thấy mối tương quan của OP giữa DirectMapping và THS có thể đúng. Cũng lưu ý rằng việc gắn một HUGEPAGE CHỈ fs sẽ chỉ tăng được 2 MB, trong khi việc để hệ thống quản lý bộ nhớ bằng THS xảy ra chủ yếu ở các khối 4k, nghĩa là về mặt quản lý bộ nhớ, mỗi cuộc gọi malloc sẽ tiết kiệm cho hệ thống 2044k (2048 - 4 ) cho một số quy trình khác để sử dụng.
/proc/meminfo
đó có chứaHugePage
(hoặc phiên bản kernel của bạn không có những thứ này) thì sao? Kiến trúc này là gì trên (x86_64 tôi cho là)?