2009-05-24 58 views
9

Không ai biết như thế nào 3 sau so sánh về tốc độ:Shmem vs tmpfs vs mmap

  • bộ nhớ chia sẻ

  • tmpfs (/ dev/shm)

  • mmap (/ dev/shm)

Cảm ơn!

Trả lời

8

Đọc về tmpfshere. Sau đây được sao chép từ bài viết đó, giải thích mối quan hệ giữa bộ nhớ dùng chung và tmpfs nói riêng.

1) There is always a kernel internal mount which you will not see at 
    all. This is used for shared anonymous mappings and SYSV shared 
    memory. 

    This mount does not depend on CONFIG_TMPFS. If CONFIG_TMPFS is not 
    set the user visible part of tmpfs is not build, but the internal 
    mechanisms are always present. 

2) glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for 
    POSIX shared memory (shm_open, shm_unlink). Adding the following 
    line to /etc/fstab should take care of this: 

    tmpfs /dev/shm tmpfs defaults 0 0 

    Remember to create the directory that you intend to mount tmpfs on 
    if necessary (/dev/shm is automagically created if you use devfs). 

    This mount is _not_ needed for SYSV shared memory. The internal 
    mount is used for that. (In the 2.3 kernel versions it was 
    necessary to mount the predecessor of tmpfs (shm fs) to use SYSV 
    shared memory) 

Vì vậy, khi bạn thực sự sử dụng POSIX bộ nhớ chia sẻ (mà tôi sử dụng trước đó, quá), sau đó glibc sẽ tạo ra một tập tin tại /dev/shm, được sử dụng để chia sẻ dữ liệu giữa các ứng dụng. Bộ mô tả tập tin mà nó trả về sẽ đề cập đến tệp đó, mà bạn có thể chuyển đến mmap để cho nó ánh xạ tệp đó vào bộ nhớ, giống như nó có thể thực hiện với bất kỳ tệp "thực" nào. Các kỹ thuật bạn liệt kê là do đó bổ sung. Họ không cạnh tranh. Tmpfs chỉ là hệ thống tệp cung cấp tệp trong bộ nhớ dưới dạng kỹ thuật triển khai cho glibc.

Ví dụ, có một quá trình đang chạy trên hộp của tôi hiện đã đăng ký như một đối tượng bộ nhớ chia sẻ:

# pwd 
/dev/shm 
# ls -lh 
insgesamt 76K 
-r-------- 1 js js 65M 24. Mai 16:37 pulse-shm-1802989683 
# 
+0

Vì vậy, tốc độ là như nhau?Làm thế nào các tập tin mở mmap được so sánh với các tập tin mở glibc thông thường? – SyRenity

-1

tmpfs là chậm nhất. Bộ nhớ chia sẻ và mmap có cùng tốc độ.

+2

bạn có thể vui lòng giải thích ... Cảm ơn bạn – hhafez

+1

Trên thực tế, có vẻ như tmpfs thực quyền hạn chia sẻ ký ức? Và tôi đoán, mmap chỉ nhanh khi sử dụng tmpfs như vận chuyển cơ bản? – SyRenity

2

"Phụ thuộc." Nói chung, tất cả chúng đều trong bộ nhớ và phụ thuộc vào việc triển khai hệ thống, do đó hiệu suất sẽ không đáng kể và cụ thể cho từng nền tảng cho hầu hết các ứng dụng. Nếu bạn thực sự quan tâm đến hiệu suất, bạn nên lập hồ sơ và xác định các yêu cầu của mình. Nó khá tầm thường để thay thế bất kỳ một trong những phương pháp với nhau.

Điều đó nói rằng, bộ nhớ dùng chung là ít tốn kém nhất vì không có hoạt động tệp nào liên quan (nhưng lại phụ thuộc rất nhiều vào việc triển khai thực hiện). Nếu bạn cần mở và đóng (map/unmap) nhiều lần, lot lần, thì đó có thể là chi phí đáng kể.

Chúc mừng!
Sean

1

Bởi "Bộ nhớ dùng chung" nghĩa là bộ nhớ dùng chung của System V, phải không?

Tôi nghĩ rằng Linux mmap là một tmpfs ẩn khi bạn sử dụng, do đó, nó có hiệu quả giống như mmaping một tmpfs.

Làm tập tin I/O trên tmpfs là sẽ có một hình phạt ... chủ yếu (có những trường hợp đặc biệt, nơi nó có thể làm cho tinh thần, chẳng hạn như> 4G trong một quá trình 32-bit)

+0

Làm thế nào? Nếu mmap sử dụng bộ nhớ chia sẻ, vì vậy hiệu suất phải giống nhau? – SyRenity

+0

@SyRenity read() và bạn bè liên quan đến việc sao chép từ bộ đệm cache hạt nhân. mmap cho phép truy cập trực tiếp vào các trang trong bộ đệm đệm. Vì vậy, mmap thường nhanh hơn. – Eloff

Các vấn đề liên quan