Hiệu suất khác nhau giữa ramfs và tmpfs


23

Tôi cần thiết lập một hệ thống lưu trữ bộ nhớ cho khoảng 10 GB dữ liệu, bao gồm nhiều tệp đơn 100 kb (hình ảnh). Sẽ có rất nhiều lần đọc và ghi khá định kỳ (thêm tệp mới, xóa một số tệp cũ).
Bây giờ, tôi biết rằng tmpfs hoạt động giống như một hệ thống tệp thông thường mà bạn có thể, ví dụ, kiểm tra không gian trống / đã sử dụng với df , đây là một tính năng hay. Tuy nhiên, tôi quan tâm nếu ramfs sẽ cung cấp một số lợi thế liên quan đến tốc độ hoạt động của IO. Tôi biết rằng tôi không thể kiểm soát kích thước bộ nhớ đã sử dụng khi sử dụng ramfs và hệ thống của tôi có thể bị treo nếu nó hoàn toàn tiêu thụ RAM miễn phí, nhưng điều đó sẽ không thành vấn đề trong kịch bản này.

Tóm lại, tôi quan tâm:
- Hiệu suất khôn ngoan, nhanh hơn: ramfs hoặc tmpfs (và có thể tại sao)?
- Khi nào tmpfs sử dụng không gian hoán đổi? Nó có di chuyển dữ liệu đã lưu để trao đổi (sang RAM miễn phí cho các chương trình khác hiện đang chạy) hay chỉ dữ liệu mới nếu tại thời điểm đó không còn RAM trống?


Ừm, máy chủ có bao nhiêu RAM?
ewwhite

1
Máy chủ có tổng cộng 16 GB RAM. Cũng đáng chú ý là tôi không có bộ lưu trữ SSD mà chỉ có một ổ cứng 7200 vòng / phút. Đó là lý do tại sao tôi đang xem xét sử dụng một số loại lưu trữ RAM.
Ivan Kovacevic

Câu trả lời:


21

Đề nghị của tôi:

Đo và quan sát hoạt động thực tế trong điều kiện bình thường.

Những tệp đó dường như không cần TẤT CẢ và được phục vụ từ bộ đệm mọi lúc. Nhưng có một công cụ hay gọi là vmtouch có thể cho bạn biết những gì trong bộ nhớ cache tại một thời điểm nhất định. Bạn cũng có thể sử dụng nó để khóa các thư mục hoặc tệp nhất định vào bộ đệm. Vì vậy, xem những gì mọi thứ trông như thế nào sau khi sử dụng thường xuyên. Sử dụng tmpfs và ramfs là không cần thiết cho tình huống này.

Xem: http://hoytech.com/vmtouch/

Tôi nghĩ bạn sẽ ngạc nhiên khi thấy rằng các tệp hoạt động mạnh nhất có thể sẽ nằm trong bộ đệm.


Theo như tmpfs so với ramfs, không có sự khác biệt đáng kể về hiệu suất. Có sự khác biệt hoạt động. Trường hợp sử dụng thực tế là Oracle, trong đó ramfs được sử dụng để cho phép Oracle quản lý dữ liệu trong RAM mà không có nguy cơ bị hoán đổi. dữ liệu tmpfs có thể được hoán đổi dưới áp lực bộ nhớ. Cũng có sự khác biệt trong việc thay đổi kích thước và sửa đổi cài đặt một cách nhanh chóng.


1
Tiện ích nhỏ tuyệt vời! +1
Janne Pikkarainen

1
@ewwhite Trả lời tuyệt vời. Trong một trong những trường hợp của chúng tôi một vài năm trước, chúng tôi đã thực sự phát hiện ra rằng các tệp được sử dụng chủ yếu đã nằm trong bộ đệm. Gợi ý: Hệ thống tập tin ngày nay thông minh hơn nhiều so với suy nghĩ của tôi.
gianniapi

13

Đừng nghĩ quá nhiều về điều này. Đặt đủ RAM trong hệ thống của bạn và để bộ đệm đĩa của kernel xử lý mọi thứ cho bạn. Bằng cách đó, bạn có được lợi ích của việc đọc đến trực tiếp từ bộ nhớ, trong khi vẫn có thể duy trì dữ liệu trên đĩa.


1
Hệ thống của tôi hiện có 16 GB RAM. Đây là bản cài đặt Debian đơn giản chạy Nginx để phục vụ những hình ảnh đó. Tôi có kết nối mạng 1 Gbit sẽ tải dưới 100% mọi lúc, phục vụ những hình ảnh đó không theo thứ tự cụ thể. Bạn có nghĩ rằng kernel sẽ tải tất cả 10 hợp đồng hình ảnh đó trong bộ đệm trong kịch bản này không?
Ivan Kovacevic

3
Có, nếu có đủ RAM trong hệ thống và các ứng dụng khác trên máy chủ không cạnh tranh được tài nguyên RAM, các tệp đó sẽ vẫn còn trong bộ đệm.
EEAA

2
Tôi đã ở quản trị unix được khoảng 15 năm và tôi chưa bao giờ gặp phải tình huống tmpfs / ramfs sẽ cung cấp bất kỳ lợi ích nào cho bộ đệm fs kernel gốc. Điều đó không có nghĩa là các tình huống không tồn tại ngoài đó nơi chúng sẽ được bảo hành, nhưng chúng khá hiếm. Thông thường nếu bạn cần bộ nhớ cache RAM cho mọi thứ, người ta sẽ sử dụng lớp bộ nhớ đệm xây dựng mục đích (Redis / Memcache / vv.).
EEAA

4
Bộ nhớ đệm đĩa chắc chắn sẽ hoạt động trong trường hợp cần đọc hình ảnh, nhưng tmpfs hoặc ramfs vẫn có thể hữu ích nếu bạn muốn tăng tốc nhiều ghi ngẫu nhiên / nhỏ nhưng bị ràng buộc vào một đĩa chậm với I / ngẫu nhiên Ôi Hãy nhớ rằng nếu máy gặp sự cố hoặc bị mất điện, nội dung của tmpfs sẽ biến mất vì chúng (chỉ) trong bộ nhớ.
Martijn

1
@Martijn nói đúng. tmpfs và ramfs thực sự hữu ích. Ví dụ, tôi đang thực hiện viết lại chuyên sâu (nhánh bộ lọc) của kho lưu trữ git. Làm điều đó trong bộ nhớ sẽ nhanh hơn so với thực hiện trên SSD của tôi. Bộ nhớ đệm giúp đọc không ghi, vì (thông thường) Linux phải đáp ứng một số đảm bảo về tính lâu dài của hoạt động đĩa.
Paul Draper

7

1) Điểm chuẩn hiệu suất.

Sử dụng trang này làm tài liệu tham khảo, tôi đã so sánh I / O giữa tmpfs và ramfs và kết quả là nó khá giống nhau về hiệu suất:

# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)

# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s

# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s

2) Theo trang này , tmpfs sử dụng trao đổi và ramfs không sử dụng trao đổi.


2
Câu trả lời của bạn là đi đúng hướng. Tuy nhiên tôi không đồng ý với kết luận của bạn về hiệu suất, các thử nghiệm của bạn cho thấy có sự khác biệt 0,2 GB / giây và 0,1 GB / giây so với ramfs. Tôi tin rằng điều này nên được kiểm tra hơn nữa để cung cấp một mẫu thống kê hợp lệ. Về 2) Có, điều đó đã được biết, tuy nhiên tôi ước tôi có thể hiểu rõ hơn về chính xác khi nào hoán đổi được sử dụng.
Ivan Kovacevic

nếu chúng tôi thực hiện điểm chuẩn này một loạt các lần với các tệp kích thước khác nhau, tôi không nghĩ chúng ta sẽ thấy sự khác biệt. bạn sẽ nhận thấy rằng khi tôi tăng kích thước lên bốn lần, sự khác biệt thực sự thu hẹp thay vì mở rộng.
Michael Martinez

1
Còn trường hợp bạn có một loạt các tập tin nhỏ. Ví dụ viết triệu tập tin 100-200 kb. Ngoài ra, bạn có nhận được chênh lệch 0,2 GB / s liên tục cho cùng kích thước tệp không? Mà chắc chắn sẽ chỉ ra sự khác biệt hiệu suất. Tôi có thể sẽ tự kiểm tra điều này khi nó nằm trong lịch trình của tôi. Nhưng đó là lý do tại sao tôi hỏi ở đây, vì vậy tôi có thể vượt qua nó khỏi danh sách việc cần làm nếu có ai khác đã làm điều đó.
Ivan Kovacevic

yeah cách duy nhất để biết chắc chắn là làm các bài kiểm tra.
Michael Martinez

1

Nếu bạn có đủ lượng RAM được cài đặt để lưu trữ các bộ đệm kernel khác nhau, các ngăn xếp và đống ứng dụng, bộ đệm hệ thống tệp thông thường và tất cả các tệp bạn định đặt vào đó, ramfssẽ không bao giờ bị chậm hơn tmpfsvì sẽ không có rủi ro I / O vật lý theo thiết kế. I / O vật lý chắc chắn là nguyên nhân chính của sự suy giảm hiệu suất trong khu vực đó.

Tuy nhiên, nếu bạn chưa cài đặt lượng RAM đó, việc sử dụng ramfscó thể và có thể sẽ chậm hơn so tmpfsvới việc sử dụng bộ nhớ ảo heuristic để quyết định xem cái gì tốt hơn trên đĩa (tức là trong vùng trao đổi) so với cái gì nên có trên RAM trong khi với tmpfs, dữ liệu hệ thống tệp của bạn bị kẹt trên RAM có thể gây lãng phí tài nguyên.

Để trả lời câu hỏi thứ hai của bạn, vâng, tmpfssẽ chuyển dữ liệu cũ trước tiên sang khu vực trao đổi, không phải là "nóng" cuối cùng.

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.