Sử dụng tmpfs + phân vùng trao đổi rất lớn cho / tmp thay vì hệ thống tệp thông thường?


8

Tôi có máy chủ Linux và tôi có phân vùng đĩa dự phòng 500 GB. Tôi muốn định dạng nó và sử dụng nó cho / tmp. Máy chủ thỉnh thoảng chạy một số tác vụ xử lý dữ liệu lớn để có thể xảy ra rằng / tmp sẽ chứa GB dữ liệu tạm thời.

Sau đó, tôi có một ý tưởng rằng thay vào đó tôi có thể thêm nó dưới dạng phân vùng trao đổi thay thế và mount / tmp vào tmpfs. Ý tưởng này có hợp lý không?

Máy chủ có 6GB RAM, do đó, trong hầu hết các trường hợp, dữ liệu trên / tmp sẽ chỉ có trong RAM, với lợi thế tốc độ rõ ràng. Câu hỏi là, nếu chúng ta nói 10-20GB dữ liệu trên / tmp thì hệ thống sẽ hoạt động như thế nào? Hiệu năng sẽ là gì so với việc chỉ đơn giản là / tmp được gắn vào phân vùng ext4? Cảm ơn vì sự giúp đỡ.

Chỉnh sửa: Rõ ràng là hệ thống sẽ bắt đầu hoán đổi bộ nhớ khi việc sử dụng tmpfs đạt đến giới hạn RAM. Nhưng liệu Linux có đủ thông minh để trao đổi dữ liệu tmpfs và giữ dữ liệu "thường xuyên" trong RAM không? Nếu có, thì tôi cho rằng nó có thể cư xử hợp lý. Nếu không thì toàn bộ hệ thống sẽ bị ảnh hưởng nghiêm trọng.


Đừng quên zram.
Ken Sharp

Câu trả lời:


12

Đây không phải là một ý tưởng tốt TM .

Bạn sẽ ổn với một /tmpphân vùng lớn , được gắn kết như thế này (từ của bạn /etc/fstab)

tmpfs  /dev/tmp  tmpfs  defaults,nosuid,nodev,noexec,noatime,nodiratime,size=6000M 0 0

Và bạn có thể thêm ổ đĩa ngoài của mình dưới dạng phân vùng trao đổi khổng lồ

/dev/sdb1  swap  swap  defaults  0 0

Khi đạt đến giới hạn của nó, máy của bạn sẽ bắt đầu hoán đổi các trang từ RAM sang đĩa - tại thời điểm đó, trung bình tải sẽ đi qua mái nhà và máy sẽ ngừng hoạt động.

Dù sao đi nữa, bạn nên dựa vào SWAP bằng mọi cách, tốt hơn hết là bạn nên bán ổ 500 GB của mình và chỉ cần mua thêm RAM - giá rẻ của nó.

Tóm tắt

Nếu bạn thực sự muốn sử dụng đĩa 500 GB của mình, bạn có thể gắn đĩa 500 GB của mình /tmpvới hệ thống tệp không được ghi nhật ký bị vô hiệu hóa atime và diratime (ví dụ ext2:). Điều đó sẽ nhanh hơn đáng kể so với việc xử lý một cỗ máy đang hoạt SWAPđộng


1
Đây là một ý tưởng TERRIBLE. Sử dụng tmpfs và dựa vào nó để được đẩy để trao đổi âm thanh như một ý tưởng ... nhưng thực tế là hệ thống của bạn có thể đẩy những thứ sai để trao đổi có lợi cho việc giữ tmpfs trong RAM vật lý. Bạn nên tốt hơn chỉ đơn giản là gắn phân vùng 500gb của bạn lên / tmp và được thực hiện với nó. Tôi khuyên bạn nên sử dụng một hệ thống tệp cực kỳ nhẹ như xfs của riserfs ... vì bạn có thể nhanh chóng định dạng lại nó khi khởi động hoặc bất cứ khi nào có nhu cầu ... và bạn thực sự không cần tất cả các tính năng nâng cao của ext2 / 3/4 và như vậy.
TheCompWiz

3
Tại sao các downvote? Tôi đã không từ bỏ hành động này - nhưng cung cấp một phương tiện về cách thực hiện. Câu hỏi đặt ra là liệu điều đó có khả thi hay không và làm thế nào để giải quyết nó - không phải là liệu đó có phải là một ý tưởng tốt hay không. Tôi đã tuyên bố rõ ràng rằng đây là một ý tưởng tồi - và giải pháp thực tế chỉ là mua thêm RAM nếu anh ta cần tmptruy cập nhanh hơn .
Fran

1
Đây là nơi dành cho những ý tưởng hay ... không phải là giải pháp băng keo & bong bóng-kẹo cao su. Mọi người đến đây để được giúp đỡ ... và không phải vì ý tưởng về cách biến cuộc sống của họ thành địa ngục.
TheCompWiz

Tôi đã chỉnh sửa câu trả lời của mình cho phù hợp với nhận xét của bạn, cảm ơn về ý kiến ​​đóng góp của bạn
Fran

3
Mọi người ở đây dường như đồng ý rằng đây là một ý tưởng tồi. Tuy nhiên, tmpfs.txt trên tài liệu kernel liệt kê đây là một trong những trường hợp sử dụng cho tmpfs. @Fran, bạn có dữ liệu để hỗ trợ cho khẳng định đáng sợ của mình rằng nó sẽ gây ra sự cố không? Rõ ràng điều này phụ thuộc vào những gì sẽ xảy ra / tmp.
di chuyển

1

Đây có thể là một ý tưởng hợp lý.

Việc đặt một hệ thống tệp thực tế trên / tmp sẽ phát sinh chi phí, bởi vì các hệ thống tệp phải trải qua thời gian dài để đảm bảo dữ liệu trên đĩa không bị hỏng trong trường hợp lỗi hệ thống. Đối với một / tmp được làm sạch tại thời điểm khởi động, đó rõ ràng chỉ là chi phí hoạt động. Sử dụng một tmpfs sẽ tránh được chi phí đó.

Mặt khác, các hệ thống tệp cũng đảm bảo rằng các tệp được sắp xếp trên đĩa theo cách tối ưu hóa thời gian truy cập - tức là chúng sẽ tránh bị phân mảnh. Truy cập tệp tuần tự điển hình sẽ (hầu hết) dẫn đến truy cập đĩa tuần tự, hiệu quả hơn so với truy cập ngẫu nhiên. Hiệu ứng này rõ rệt hơn khi quay đĩa cứng hơn so với SSD. Kết hợp hoán đổi + tmpfs không thể dễ dàng thực hiện điều này, vì hoán đổi không nhận biết phần bộ nhớ nào thuộc về tệp nào và tmpfs không nhận thức được cách các trang được ánh xạ vào bộ nhớ vật lý hoặc vào đĩa. Tuy nhiên, đối với các tệp lớn, nó sẽ hoạt động tốt, vì cả tmpfs và trao đổi đều cố gắng giữ mọi thứ liền kề trong trường hợp đó. Ít nhất, miễn là có nhiều không gian trống trên trao đổi (nếu không thì phân mảnh sẽ xảy ra), và việc viết xảy ra đủ chậm để họ có cơ hội bị tráo đổi.

Vì vậy, điểm mấu chốt là: nó phụ thuộc, bạn nên thử cả hai tùy chọn để xem cái nào hoạt động tốt nhất.

Khi bạn gắn các tmpfs, hãy nhớ đặt kích thước rõ ràng. Mặc định là một nửa RAM vật lý, vì vậy chỉ 3GB.


- câu trả lời hợp lý (mà trớ trêu thay, sâu sắc hơn câu trả lời khác)
poige

1

Đây thực sự là một ý tưởng tốt khi bạn thường không có nhiều dữ liệu /tmp, nhưng đôi khi tiêu thụ hàng gigabyte vô tận trong thời gian giới hạn. Vấn đề là hệ thống trao đổi linux không biết đủ về trường hợp sử dụng của bạn để làm điều đó đúng. Nó thường sẽ ưu tiên việc bán phá giá hoặc hoán đổi bộ đệm trong các trang của chương trình, nhưng điều đó không thực sự hữu ích. Có thể sử dụng các nhóm để đạt được mục tiêu của bạn, đó là khi dữ liệu cào được lưu trong bộ nhớ chương trình, nhưng tôi không chắc cách cấu hình các nhóm trong trường hợp này (tôi cho rằng bạn có thể sử dụng một tmpfs FUSE ...) . May mắn thay, điều đó không bắt buộc. Bạn có thể có được hành vi mong muốn với zram và thiết bị sao lưu.

zram-initlà chương trình tự động hóa việc thiết lập zram, là một thiết bị khối ram nén. Thường có một ví dụ trong zram-initcấu hình để gắn /tmpdưới dạng zram. Nó sẽ giống như sau

type0=/tmp
flag0= 
size0=524288 # 500G of logical space
mlim0=2G # 2G of memory
back0=/dev/loop0 # (or /dev/sdxN, your large slow drive)
notr0= 
maxs0=4 # maximum number of parallel processes for this device
algo0=zstd 
labl0=tmp # the label name
uuid0= 
args0= 

Điều này sẽ nén và lưu trữ trong bộ nhớ bất cứ thứ gì được ghi vào / tmp. Nén thông thường là khoảng 50%. Nó sẽ tiêu thụ tối đa 2G bộ nhớ vật lý. Nếu nó thiếu bộ nhớ vật lý, nó sẽ lấy các tệp cũ nhất và đẩy chúng vào thiết bị sao lưu, vẫn được nén. Lưu ý rằng nó không phải chịu một số chi phí CPU để nén và giải nén các tệp, nhưng điều này thường được bù bằng IO giảm.

Một thiết lập tương tự có thể được sử dụng cùng với các nhóm để cho phép các quy trình nhất định hoán đổi mà không ảnh hưởng xấu đến hiệu suất hệ thống tổng thể.

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.