Là trao đổi một lỗi thời?


43

Tôi đã sử dụng unix khá lâu và trong vài năm qua tôi cảm thấy như hoán đổi là lỗi thời, nhưng tôi tò mò không biết những người khác nghĩ gì.

Đối số của tôi đại khái là thế này (giả sử không có sự lo lắng toàn cầu hoặc vặn vẹo các cài đặt OOM):

There is little value in swap because if you need to swap out to disk, 
odds are it's going to be a vicious cycle where an app will continue 
to eat not only real memory, but swap as well until it gets OOM 
reaped (_if_ it gets OOM reaped). 

If you have swap enabled, it will only prolong this death march to 
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.

Without swap, it will probably get OOM reaped sooner (if at all)

Đối với bất kỳ dịch vụ nào được điều chỉnh theo hiệu suất, tôi sẽ nghĩ rằng việc hiểu được giới hạn trên của việc sử dụng tài nguyên sẽ là chìa khóa để điều chỉnh dịch vụ đó ngay từ đầu, trong trường hợp bạn biết bạn cần bao nhiêu.

Tôi không thể tưởng tượng nhiều tình huống (một số, nhưng không phải nhiều) khi bạn tạm dừng một quy trình đang chạy và nó có thể trao đổi để nhường chỗ cho những thứ khác, nhưng bạn vẫn mất ổ cắm nếu bạn làm vậy, vì vậy buộc phải core-dump thông qua gcc hoặc sao chép bộ nhớ ra bằng tay sẽ tương đương về mặt chức năng.

Tôi chắc chắn sẽ không muốn trao đổi trên một hệ thống nhúng (mặc dù nó có thể có một ram có sẵn nhỏ hơn), nếu bạn hết ram, tôi thà chết quá trình của mình còn hơn là xé nát bộ nhớ flash hàng triệu lần ghi lái xe vào cuối tuần bằng cách mài mòn các lĩnh vực xuống nub.

Bất kỳ bộ râu unix ngoài kia có bất kỳ lý do thuyết phục để giữ trao đổi xung quanh?

CẬP NHẬT câu trả lời && phân tích:

  • ĐÃ XÁC NHẬN? - fork () yêu cầu cùng dung lượng bộ nhớ cho tiến trình con như cha mẹ

    Modern fork () là bản sao khi viết cho trẻ em trên POSIX (nói chung), nhưng cụ thể là LinuxFreeBSD , và tôi giả sử OSX bằng phép ngoại suy. Tôi xem xét phần này của hành lý lỗi thời mà trao đổi mang theo nó.

    Thật kỳ lạ, bài báo Solaris này tuyên bố rằng mặc dù Solaris sử dụng Copy-on-Write với fork (), nhưng bạn nên có ít nhất gấp 2 lần (!) Kích thước quy trình cha mẹ trong bộ nhớ ảo miễn phí để fork () không bị hỏng trong ở giữa. Trong khi phần tử Solaris phần nào phá vỡ lập luận rằng hoán đổi là lỗi thời - tôi nghĩ rằng đủ các hệ điều hành thực hiện chính xác CoW theo cách quan trọng hơn để xua tan huyền thoại hơn là đánh dấu nó như là sự biện minh cho việc hoán đổi. Từ. Hãy đối mặt với nó. Tại thời điểm này, những người thực sự sử dụng Solaris có lẽ chỉ là những người của Oracle. Không xúc phạm Solaris!

  • XÁC NHẬN - các tệp tmpfs / ramfs có thể được hoán đổi như một sự kết hợp khi tmpfs / ramfs lấp đầy

    Đừng sử dụng tmpfs / ramfs không giới hạn! Luôn xác định rõ ràng số lượng ram mà bạn muốn tmpfs / ramfs sử dụng.

  • PLAUSABLE - Có một chút trao đổi 'chỉ trong trường hợp'

    Một trong những ông chủ cũ của tôi từng có một câu nói rất hay, 'bạn không biết những gì bạn không biết' - về cơ bản, bạn không thể đưa ra quyết định dựa trên thông tin mà bạn chưa có. Tuy nhiên, đây là một lý lẽ hợp lý để trao đổi với tôi - Tôi nghi ngờ rằng các loại điều bạn sẽ làm để phát hiện xem ứng dụng của bạn có bị tráo đổi hay không sẽ nặng hơn kiểm tra xem malloc () có thành công hay bắt ngoại lệ không một thất bại mới ().

    Điều này có thể hữu ích trong trường hợp bạn đang chạy máy tính để bàn và có một loạt những điều ngẫu nhiên đang diễn ra, nhưng thậm chí vẫn còn - nếu có gì đó không ổn, tôi thà gặt hái hơn là lặn xuống địa ngục. Đó chỉ là tôi.

  • BẮT ĐẦU! - Trên Solaris , trao đổi rất quan trọng vì một vài lý do

    tmpfs - trạng thái Lượng không gian trống có sẵn cho tmpfs phụ thuộc vào lượng không gian hoán đổi chưa phân bổ trong hệ thống. Kích thước của một hệ thống tệp tmpfs phát triển để chứa các tệp được ghi vào nó, nhưng có một số sự đánh đổi cố hữu cho người dùng nặng của tmpfs. Tmpfs chia sẻ tài nguyên với các phân đoạn dữ liệu và ngăn xếp của các chương trình thực thi. Việc thực thi các chương trình rất lớn có thể bị ảnh hưởng nếu hệ thống tệp tmpfs gần với kích thước tối đa cho phép của chúng. Tmpfs miễn phí phân bổ tất cả trừ 4 MB dung lượng trao đổi của hệ thống.

    Solaris sự thật và huyền thoại về trao đổi - trạng thái Bộ nhớ ảo ngày nay bao gồm tổng cộng RAM vật lý và không gian trao đổi trên đĩa. Solaris KHÔNG yêu cầu bất kỳ không gian trao đổi nào được cấu hình cả. Nếu bạn chọn tùy chọn này, khi RAM đầy, bạn sẽ không thể bắt đầu các quy trình mới. .

    Tôi không chắc điều này có nghĩa là bản đồ ảo tối đa bạn có thể tạo là ram + hoán đổi hay nếu bạn vẫn có thể làm một cái gì đó như mmap () một tệp lớn hơn ram và dựa vào khởi tạo lười biếng của mmap () Có thể chạy Solaris những ngày này tốt mà không cần trao đổi, có vẻ như nó không thân thiện với nó hơn các hệ điều hành POSIXy khác.

  • BẮT ĐẦU! Các công cụ ngủ đông phổ biến của Linux dường như dựa vào trao đổi

    Theo mặc định, TuxOnIce trông giống như nó dựa trên trao đổi cho ngủ đông - mặc dù backends khác tồn tại. Tuy nhiên, nếu bạn không chạy một hộp cần ngủ đông, tôi vẫn sẽ đứng sau tuyên bố rằng 'hoán đổi là lỗi thời trên linux'


Tôi không có nhiều râu * * (một số tóc vẫn còn;), nhưng 2 xu của tôi sẽ là việc có một chút "trao đổi" sẽ mang lại cho hệ thống của bạn sự mạnh mẽ. Thay vì trực tiếp OOM, bạn sẽ chuyển sang thay thế nếu vượt quá giới hạn hệ thống của bạn một chút. Chắc chắn, nếu thực sự vượt quá giới hạn hệ thống của bạn, hệ thống của bạn cuối cùng sẽ gặp sự cố / tạm dừng / nuke-chính nó / bất cứ điều gì-địa ngục-bạn có thể tưởng tượng. Vì vậy, cho một chút dây để chơi với;)
Ouki

1
Thực tế về fork () thực tế là đúng nếu bạn đặt hệ thống của mình thành không bao giờ vượt quá RAM (đây không phải là mặc định). Bây giờ tại sao bạn cần cài đặt đó nữa tôi không có manh mối. Nó không hữu ích để xử lý thời gian thực.
Joshua

@Jushua: Bộ nhớ thừa có thể không phải là mặc định hoặc thậm chí có thể tùy thuộc vào hệ điều hành.
jlliagre

Tôi có một máy chủ NAS với 8GB RAM, nó sẽ chạy tới 2 VM. Tôi đã không đặt trao đổi. Nếu nó bắt đầu thay đổi mạnh mẽ, thì dù sao nó cũng đã chết. Vì vậy, nó hoàn toàn hỗ trợ lập luận của bạn. Mặt khác, tôi vẫn đang sử dụng máy tính để bàn bị rỉ sét của mình với giới hạn ở 1GB RAM và ở đó tôi có trao đổi để xử lý bộ nhớ thưa thớt. Nó làm cho mọi thứ chậm hơn một chút nhưng giúp tôi mở Firefox và các ứng dụng khác cùng một lúc.
Huygens

Tôi thấy trình kích hoạt sát thủ OOM quá muộn, chỉ sau khi tất cả các bộ nhớ cache đã được dọn sạch và hệ thống trở nên chậm chạp. Để giữ cho hệ thống của tôi hoạt động tốt, tôi sử dụng Earlyoom hoặc nohang để thực hiện cùng một công việc nhưng sớm hơn! Có thể được sử dụng có hoặc không có trao đổi.
joeytwiddle

Câu trả lời:


28

Không nhầm lẫn (hoán đổi) (dưới dạng vùng đĩa) và (sang) hoán đổi (như một phương pháp để di chuyển các trang bộ nhớ từ RAM sang đĩa và đối ứng lại).

Trao đổi quá nhiều là điều cần tránh vì lý do hiệu suất nhưng có một khu vực trao đổi không nhất thiết là một vấn đề.

Trên các hệ thống, như Linux, bộ nhớ quá mức đó, tức là cho phép các quá trình phân bổ nhiều bộ nhớ hơn mức có sẵn, hết RAM mà không đủ trao đổi để xử lý tình huống sẽ kích hoạt kẻ giết OOM. Bạn phải tin tưởng vào thuật toán được sử dụng để chọn quy trình "đúng" để giết và chấp nhận một hoặc nhiều quy trình của bạn bị giết mà không có cơ hội tắt đúng cách. Đây là một tương tự nổi tiếng giải thích tại sao kẻ giết người OOM có thể không phải là một ý tưởng tốt ở tất cả.

Trên các hệ thống như Solaris, bộ nhớ không quá tải, tức là đảm bảo rằng việc đặt trước bộ nhớ luôn được hỗ trợ bởi bộ nhớ ảo, cho dù là RAM hay trên đĩa, việc có một vùng trao đổi đủ là hoàn toàn cần thiết nếu không sẽ là một phần đáng kể của RAM lãng phí


1
Bạn có chắc chắn rằng quan điểm về Solaris vẫn đúng? blog.oracle.com/jimlaurent/entry/solaris_faq_myths_and_facts tuyên bố: Bộ nhớ ảo ngày nay bao gồm tổng số RAM vật lý và dung lượng trao đổi trên đĩa. Solaris KHÔNG yêu cầu bất kỳ không gian trao đổi nào được cấu hình cả. Nếu bạn chọn tùy chọn này, khi RAM đầy, bạn sẽ không thể bắt đầu các quy trình mới. Tôi nghĩ tôi thấy quan điểm của bạn là gì - nếu bạn muốn tạo ra thứ gì đó lớn hơn ram vật lý mà không cần trao đổi, bạn không thể? (Bất kể rằng mmap là một trình khởi tạo lười biếng).
tổng

5
Vâng, tôi chắc chắn quan điểm của tôi về Solaris vẫn đúng. Ngay cả khi trích dẫn của Jim Laurent của bạn là đúng, tức là Solaris không yêu cầu trao đổi, không có trao đổi có nghĩa là tất cả các đặt chỗ bộ nhớ (tức là malloc) cần được hỗ trợ bởi RAM, ngay cả khi một số bộ nhớ được phân bổ không được sử dụng. Điều này không liên quan đến mmap hoặc tmpfs lớn, mặc dù tmpfs cũng là một lý do tại sao bạn có thể muốn trao đổi với Solaris (và Linux cũng vì vấn đề đó).
jlliagre

1
Cập nhật cho Linux: có thể tắt quá mức, thuật toán OOM có thể được sửa đổi, thậm chí bạn có thể có trình xử lý OOM của riêng mình với các nhóm.
peterph

1
@peterph Tắt quá mức trên Linux giúp trao đổi thậm chí ít lỗi thời hơn. Nếu bạn không quá quan trọng, bạn phải đảm bảo rằng bạn có một khu vực trao đổi đủ lớn để tất cả các đặt phòng được sao lưu.
jlliagre

1
Bộ nhớ ảo được đặt trước bởi một ngã ba phụ thuộc vào kích thước của chương trình thực hiện nó. Giả sử bạn có máy ảo java sử dụng 2 GB bộ nhớ, nó sẽ tạm thời yêu cầu thêm 2 GB. Nếu điều này xảy ra trong khi bạn có ít hơn 2 GB khả dụng hoặc đồng thời nhiều lần, một hoặc nhiều ngã ba sẽ thất bại. Đây là một tình huống phổ biến với các hệ điều hành không cam kết quá mức và với Linux cũng vậy khi quá mức bị vô hiệu hóa. Nó có thể dễ dàng sửa chữa bằng cách có một vùng trao đổi đủ lớn mà IMHO là một giải pháp khá tốt hơn so với việc vượt quá bộ nhớ.
jlliagre

3

Tôi biết một lý do để tiếp tục trao đổi xung quanh. Tôi có một ứng dụng chiếm nhiều bộ nhớ nhất có thể để cấu hình cho hệ thống của mình. Nó sử dụng Hadoop, tại một phần của quá trình xử lý thực hiện một ngã ba và thực thi để chạy một lệnh unix duy nhất (tôi nghĩ "uname" hoặc "user" hoặc thứ gì đó mà họ không thể tìm thấy tương đương với Java). Dường như java không thực hiện một vfork với bản sao trên ngữ nghĩa ghi giống như một ứng dụng gốc. Nếu tôi khởi động ứng dụng của mình bằng RAM 4Gb, khi nó rẽ nhánh, thì fork sử dụng thêm 4Gb RAM, nhưng sau đó nhanh chóng giải phóng nó. Nếu tôi không có trao đổi 4Gb cho Hadoop đó để trao đổi, tôi sẽ phải trả 8Gb RAM chỉ để có 4Gb cho ứng dụng của mình.


Đây là một điểm tuyệt vời, nhưng không phải là sự phản ánh của fork hiện đại () - Trên Linux và FreeBSD (và, bề ngoài OSX?) Fork () được triển khai thông qua việc sử dụng các trang sao chép. Copy-on-write (hoặc COW) là một kỹ thuật để trì hoãn hoặc hoàn toàn ngăn chặn việc sao chép dữ liệu. Thay vì nhân đôi không gian địa chỉ tiến trình, cha mẹ và con có thể chia sẻ một bản sao duy nhất. Tuy nhiên, dữ liệu được đánh dấu theo cách mà nếu nó được ghi vào, một bản sao được tạo và mỗi quy trình nhận được một bản sao duy nhất. Trích dẫn: forum.freebsd.org/showthread.php?t=26355 và trang quản trị Linux cho fork ()
tổng

Mặc dù đúng, có một số trang không thể được đánh dấu COW. Ví dụ: các trang được sử dụng cho ngăn xếp kernel của tiến trình con mới và các trang được sử dụng cho các cấu trúc dữ liệu nội bộ (the files_struct, the struct signals, the task_structvà các trang khác). Ngoài ra, nhiều trang thực thi không phải là mã phụ thuộc vào vị trí (PIC) và do đó, các trang của mã thực thi đã được sửa đổi bởi trình tải động ( ld-linux.so) phải có không gian hoán đổi dành riêng cho chúng ngay cả khi không có gì được ghi để hoán đổi không gian ngay lập tức. Đó là lý do tại sao tôi yêu Linux; bạn có thể tắt trao đổi và hệ thống vẫn chạy. :)
Azhrei

3

Tôi không thể thêm vào cuộc thảo luận về mặt kỹ thuật, nhưng tôi có thể đưa ra một vài ví dụ. Máy tính xách tay cũ của tôi (RAM 2 GB kunbfox lucid) thường chạy với trao đổi ở mức 0. Khi tôi chạy truyền (máy khách bittorrent) với một số dòng có thể sử dụng chung 100 kết nối, trao đổi của tôi có thể tăng lên. Thậm chí còn tệ hơn khi tôi chạy XP vm sử dụng bộ nhớ thực 1GB.

Tôi đã thấy những người khác nhận xét rằng các quá trình sử dụng nhiều bộ nhớ như kết xuất đồ họa cũng có thể nhúng vào trao đổi. Nếu bạn chỉ thỉnh thoảng làm điều đó, thì đó không phải là vấn đề.

Theo như các vấn đề của OOM, trao đổi thực sự có thể là cứu cánh vì nó mua cho bạn thời gian giữa việc xác định vấn đề và mọi thứ ở phía nam. Rất nhiều thứ sử dụng gần như tất cả bộ nhớ của tôi, vì vậy tôi không chú ý đến điều đó, nhưng khi trao đổi bắt đầu chạy lên tôi nhận thấy điều đó và bắt đầu tìm kiếm vấn đề - trước khi nó cắn tôi.


Vâng, các hệ thống cũ không thể làm gì nhiều mà không cần trao đổi. Tôi vẫn còn một danh mục con cũ với 256 MB RAM, trong đó trao đổi được yêu cầu để bắt đầu khá nhiều chương trình. Tôi tin rằng câu hỏi nhắm vào các hệ thống hiện đại mặc dù.
Dmitry Grigoryev

3

Có một ứng dụng rất hay cho không gian trao đổi: mở rộng RAM bằng cách đặt không gian trao đổi trên thiết bị lưu trữ sử dụng RAM, để khắc phục các hạn chế của RAM hệ thống có thể cài đặt

Hãy xem http://Techreport.com/articles.x/16255 này về cơ bản là giao diện từ S-ATA đến DDR2-RAM. Bạn có thể nhét tới 64GB RAM vào đó. Bằng cách đặt không gian hoán đổi trên một trong những người bạn sẽ nhận được một số RAM bổ sung đáng kể. Tất nhiên nó không nhanh bằng RAM hệ thống thông thường. Nhưng nó biến RAM hệ thống thành một lớp bộ đệm bổ sung.


1
Việc xem xét giá của nó (549 đô la) sẽ không hiệu quả hơn khi đầu tư 100 đô la vào bo mạch chính hỗ trợ 64GB RAM ?
Dmitry Grigoryev

1
@DmitryGrigoryev: Tất nhiên rồi. Nhưng đôi khi bạn buộc phải sử dụng loại phần cứng đặc biệt đó (vì lý do ho chứng nhận hệ thống y tế ho ) mà còn phải xử lý các bộ dữ liệu lớn một cách lố bịch được sản xuất trong thời gian rất ngắn (nghĩ máy quét chụp cắt lớp, dữ liệu> 3GiB / s).
datenwolf

Bạn sẽ không phải chứng nhận ổ đĩa RAM là một thiết bị y tế trong trường hợp đó chứ? ;) Nhưng vâng, tôi đã nhận được điểm.
Dmitry Grigoryev

1
@DmitryGrigoryev: Quả thực bạn phải làm điều đó. Tuy nhiên, việc chứng nhận một thiết bị đĩa RAM S-ATA như vậy dễ dàng hơn nhiều so với việc chứng nhận toàn bộ bo mạch chính. Khi tìm nguồn cung ứng cho các máy tính được sử dụng trong các thiết bị y tế, bạn thường mua càng nhiều linh kiện càng tốt được chứng nhận ngoài giá. Đối với những phần không có chứng nhận sẵn có, bạn hãy tự mình làm các xét nghiệm cần thiết và chứng nhận. Đặc biệt là khi làm việc trong nghiên cứu, trong đó nhấn mạnh vào sự an toàn của bệnh nhân và dữ liệu không được sử dụng để lập kế hoạch điều trị, đây là giải pháp nhanh nhất và hiệu quả nhất. BT; DT.
datenwolf

3

Tôi đã chạy Linux và Windows mà không cần trao đổi (tệp hoán trang, theo danh pháp Windows), trên máy tính xách tay / máy tính để bàn có 4Gb trở lên. Có một vài lần khi tình trạng cạn kiệt trí nhớ xảy ra, tôi chỉ giải quyết chúng. Tôi cảm thấy hệ thống này nhanh hơn theo cách này, điều mà tôi quan tâm hơn. Không có yêu cầu đặc biệt về khối lượng công việc của tôi mặc dù.

Những điều tôi đã học được:

  • Windows "mất" bộ nhớ theo thời gian, trong khoảng 20-30 ngày hoạt động, tôi đạt đến điểm khi tôi chỉ muốn khởi động lại. Tôi không biết tại sao điều này xảy ra. Tôi đoán nó có thể là một rò rỉ trong một số trình điều khiển hoặc chống vi-rút. Khi bạn có tệp hoán trang, tôi tin rằng nó có thể đặt bộ nhớ bị rò rỉ này vào tệp hoán trang, do đó sẽ khó nhận thấy vấn đề này hơn trên hệ thống Windows thông thường.
  • Firefox xử lý tốt hơn với ít bộ nhớ hơn Chrome. Firefox cảnh báo bạn và vẫn chạy, Chrome chỉ gặp sự cố.

2

Tôi nghĩ rằng các đối số của bạn khá hợp lệ cho một máy chủ , trong đó hiệu suất là quan trọng và việc biết ứng dụng nào sẽ hoạt động tiếp theo có thể không dự đoán được.

Tuy nhiên, đối với máy tính để bàn , tôi thấy trao đổi hữu ích khi tôi đang đẩy và bật các tác vụ.

Ví dụ: nếu tôi đang thực hiện một tác vụ bằng ứng dụng Avà sau đó tôi phát hiện ra mình cần sử dụng ứng dụng Bcho một thứ gì đó (có thể là tác vụ phụ hoặc gián đoạn), thì tôi có thể dễ dàng Atrao đổi sang đĩa trong khi tôi làm việc trong Bhơn để đóng Avà sau đó nhớ để bắt đầu lại sau đó.

Điều này đặc biệt đúng nếu Ađang giữ một số trạng thái chưa được lưu sẽ không được khôi phục khi được khởi động lại.

Việc đẩy và kéo Ađến / từ trao đổi có nhanh hơn hay đóng và khởi động lại hay không, tùy thuộc vào ứng dụng. (Một số quản lý để có một khởi động chậm nhưng quy mô dân cư nhỏ.)

Tuy nhiên, tôi đồng ý rằng một giải pháp tốt hơn để tăng năng suất sẽ là cài đặt thêm một số RAM.


Cập nhật: Sau khi viết câu trả lời này, tôi sở hữu một máy tính xách tay có nhiều RAM và ổ cứng chậm. Trong trường hợp đó lời khuyên của tôi đã đảo ngược! Dưới đây là một bản tóm tắt về ưu và nhược điểm .
joeytwiddle

1

Trên hệ thống của tôi, / tmp tràn ra để trao đổi nếu nó ngấu nghiến quá nhiều RAM.

Điều này nhanh hơn rất nhiều so với việc sử dụng một hệ thống tập tin thực sự cho / tmp.


Điều đó khá nguy hiểm - nếu tôi cần ramfs, tôi chỉ định trong fstab (hoặc tùy chọn) để đặt kích thước rõ ràng. Có khả năng là một chương trình có thể trở nên điên rồ khi phân bổ bộ nhớ vì nó sẽ bắt đầu tạo các tệp trong / tmp. Swap sẽ là một nơi tốt cho ramfs tập tin để hiển thị (đặc biệt là nếu bạn đang dựa vào ramfs cho tốc độ)
synthesizerpatel

2
Tôi vượt quá kích thước RAM trong đó thường xuyên. tmpfs được hỗ trợ bởi trao đổi nhanh hơn đáng kể so với ext2 ngay cả khi đổ.
Joshua

Hữu ích để biết - và có lẽ sẽ là một mục nghiên cứu trong tương lai - Tôi vẫn lo ngại về một ứng dụng lấp đầy ram của tôi bằng proxy của tmpfs / ramfs trong / tmp. Điều đó mang lại cho tôi các jebeb heebie!
tổng

Sau đó đặt giới hạn = kích thước của trao đổi.
Joshua

Ngẫu nhiên, đây là sự khác biệt giữa ramfs và tmpfs. tmpfs có thể tràn ra để trao đổi trong khi ramfs không thể.
Joshua

1

Có rất nhiều lý do, khi trao đổi được sử dụng.

Thông thường, khi hệ thống không đủ bộ nhớ vật lý, kernel có thể đặt một số ứng dụng (thực tế - một số phần của bộ nhớ được sử dụng bởi không chạy ứng dụng) để trao đổi.

Sau này, khi các ứng dụng này sẽ làm một cái gì đó (ví dụ, một số dữ liệu đến trên một ổ cắm hoặc một số bộ đếm thời gian kích hoạt) - kernel sẽ đặt một số ứng dụng khác để trao đổi.

Một ví dụ khác về việc sử dụng trao đổi là đình chỉ vào đĩa.

Liên quan đến các thiết bị nhúng, tất cả chúng có thể được chia thành (ít nhất) hai nhóm lớn:

  1. họ chạy Linux / Windows hoặc không tương tự RTOS (Hệ điều hành thời gian thực); hoặc là
  2. họ chạy RTOS.

Tất nhiên, có những thiết bị chỉ chạy một số mã (một số loại vi điều khiển), v.v. Tôi sẽ không mô tả chúng vì các thiết bị đó không có bất kỳ HĐH nào, vì vậy thảo luận về trao đổi là vô nghĩa đối với các thiết bị đó.

Nhóm thiết bị nhúng đầu tiên (chạy một số HĐH) có thể sử dụng (và thường là chúng sử dụng) trao đổi. Và nói chung, các thiết bị như vậy sử dụng trao đổi theo cách tương tự như máy tính để bàn và máy chủ.

Nhóm thiết bị thứ hai (chạy RTOS) hoàn toàn không sử dụng trao đổi, vì RTOS có giới hạn về thời gian phản hồi về sự kiện và

  • đọc từ trao đổi có thể mất thời gian không thể đoán trước
  • các thiết bị có số lượng tác vụ được xác định trước (tại thời gian biên dịch) không cần thiết phải trao đổi

BTW, có rất nhiều mô tả về cách linux sử dụng trao đổi, một trong số đó là http://distiledb.com/blog/archives/date/2009/02/22/swap-files-in-linux.page
Windows sử dụng một cách tiếp cận tương tự.


Ngoài ra, trao đổi là cần thiết để ngủ đông (tạm dừng vào đĩa) trừ khi bạn đang sử dụng một cái gì đó như TuxOnIce.
Renan

1

Dường như với tôi rằng cả ngủ đông và ngủ lai đều cần không gian hoán đổi trên Linux .

Tôi chưa bao giờ sử dụng không gian hoán đổi / phân vùng trên Linux cho đến khi phải đối mặt với nhu cầu sử dụng Hybrid Sleep - vì chế độ ngủ ở mức pin quan trọng không có sẵn trên hệ thống của tôi, do Upower xử lý, chỉ chọn giữa Shut-Down, Hibernate và Hybrid -ngủ. (thêm ở đây )


0

Một vài cách sử dụng tốt mà tôi đã thấy là các quá trình sử dụng nhiều bộ nhớ, nhưng không quan trọng về hiệu năng. Một trường hợp là một Firefox cổ xưa bị rò rỉ bộ nhớ xấu. Nó sẽ lấp đầy RAM và tràn ra để trao đổi mà không có hiệu ứng xấu. Một cái khác mà chúng tôi đã có là máy chủ DNS đệ quy của chúng tôi (những máy này nhanh chóng tạo ra một bộ đệm lớn hiếm khi được sử dụng).

Một lời giải thích khác mà tôi đã thấy về hoán đổi đã chạy một chút dọc theo dòng: "Bạn được yêu cầu luôn luôn cấu hình SWAP = 2 * RAM. Điều này hoàn toàn vô nghĩa, không có mối quan hệ nào giữa RAM và trao đổi. , bạn nên thêm đủ bộ nhớ để phần lớn thời gian tải của bạn phù hợp với RAM. Nếu tải của bạn ổn định, bạn không cần trao đổi. Nếu tải của bạn thay đổi nhiều, bạn cần trao đổi đủ cho các gai và sắp xếp sao cho hoán đổi được sử dụng hiếm khi đủ để không ảnh hưởng đến hiệu suất tổng thể. Tóm tắt, vì bạn không biết mức tăng tải của mình là bao nhiêu và vì đĩa rẻ hơn nhiều so với RAM, hãy cấu hình SWAP = 2 * RAM. "

Một số phiên bản cũ của Solaris hoàn toàn không thể sử dụng trao đổi trừ khi có ít nhất trao đổi nhiều như RAM (tôi nhớ rằng nó đã phân bổ không gian trao đổi cố định để thoát RAM hoặc một cái gì đó tương tự), vì vậy RAM 2 * thực sự ở mức tối thiểu có thể cảm nhận được giá trị. Nhưng đó là những ngày trước, khi cỗ máy lớn của chúng tôi có RAM 64 MiB và đĩa 1 GiB ...

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.