Áp suất hay thước đo nào mà áp lực bộ nhớ Ma của Mavericks và Yosemite tuân theo?


57

Trình giám sát hoạt động của Mavericks (và cả Yosemite) hiển thị sơ đồ mới, áp suất bộ nhớ . Đáng buồn thay, văn bản trợ giúp của nó chỉ mơ hồ giải thích chính xác những gì nó đo. Áp suất bộ nhớ được tính như thế nào?

Giám sát hoạt động Mavericks - bộ nhớ

Tín dụng hình ảnh đi đến câu trả lời này từ một câu hỏi thăm dò ý kiến ​​về tính năng mới tốt nhất của Mavericks.

Câu trả lời:


51

Áp suất bộ nhớ không phải là thước đo đơn giản về tỷ lệ phần trăm của bộ nhớ và dường như là đồ thị từ 0 đến 100%. Các sysctlgiá trị vm.memory_pressuređược tính toán liên quan đến mục tiêu tính toán theo dõi tỷ lệ giữa các trang bộ nhớ miễn phí và hoạt động đến các trang có dây và hoạt động. Các bộ đếm tuyệt đối được xem bằng vm_statcông cụ dòng lệnh để kiểm tra phân bổ chi tiết bộ nhớ ảo. Jonathan Levin có tài liệu tuyệt vời tại http://newosxbook.com/articles/MemoryPressure.html bao trùm cả bộ nhớ ảo macOS và iOS và cách họ tính toán áp lực bộ nhớ cũng như các hành động được thực hiện khi chỉ số áp suất cao.

Bộ nhớ ảo có liên quan (vm) cung cấp cho tính toán vm.memory_pressurelà:

  • vm.page_free_count - số lượng trang miễn phí tuyệt đối
  • vm.vm_page_free_target - mục tiêu hoặc mục tiêu được tính toán cho tình huống "không áp lực"
  • vm.page_free_wanted - những gì hệ thống vm muốn miễn phí để giảm bớt chỉ số áp suất tính toán hiện tại

Vì vậy - nếu bạn đang theo dõi áp suất bộ nhớ của mình bằng Trình giám sát hoạt động (hoặc tôi kiểm tra các giá trị sysctl theo chương trình hoặc tại vỏ dòng lệnh), bạn sẽ làm tốt việc xem xét bốn giá trị này:

sysctl -a vm | egrep "page_free|pressure"

Có một lệnh mới được memory_pressuregiới thiệu với Mavericks và khi tôi chạy nó để điều khiển hệ thống con bộ nhớ vào trạng thái cảnh báo - bạn có thể thấy áp suất bộ nhớ tăng lên trong phạm vi màu vàng.

kết quả giám sát hoạt động của <code> sudo memory_pressure -l cảnh báo </ code>

Công cụ phân bổ khoảng 4 GB bộ nhớ cho công cụ khi biểu đồ áp suất tăng dần đến trạng thái này trong đó rõ ràng mức độ "cảnh báo" được biểu thị : sudo memory_pressure -l warn. Như bạn có thể thấy, hệ thống trước áp lực đã sử dụng 5,9 GB và sau đó lên tới 7,99 GB được sử dụng mà thậm chí không cần phải bổ sung do hoán đổi và nén.

Sau khi xem cách vm_stat 15hiển thị kết quả cảnh báo không có phân trang có thể đo lường được, tôi thoát khỏi công cụ (Control-C) và sau đó chạy lại công cụ để làm cho áp lực bộ nhớ trở nên quan trọng:sudo memory_pressure -l critical

Tôi đã không để điều này chạy trong hơn một vài phút khi phân trang bắt đầu và một khi công cụ nói rằng tôi có 5 GB RAM được phân trang vào đĩa, tôi không muốn lấp đầy ổ đĩa của mình và thoát khỏi công cụ.

kết quả giám sát hoạt động của <code> sudo memory_pressure -l tới hạn </ code>

Bạn có thể quan sát hệ thống giải phóng RAM nhanh như thế nào sau khi cảnh báo kết thúc và cũng như cách nó tràn vào lãnh thổ "đỏ" để cho thấy rằng hệ thống bộ nhớ ảo không thể nén đủ các trang để tránh trao đổi vào đĩa. Dự đoán có giáo dục của tôi là màu đỏ đối với áp lực cho thấy việc hoán đổi và phân bổ quá mức đáng kể và / hoặc thời gian mà các trang miễn phí ở dưới mức mà hệ thống thích và nó chủ động thanh trừng các trang không hoạt động và / hoặc các trang hoán đổi dự kiến ​​sẽ được sử dụng để hoán đổi. Tương tự, hệ thống phục hồi nhanh chóng sau khi phân bổ được giải phóng và áp lực được đưa ra khỏi hệ thống bộ nhớ ảo.


Cảm ơn bạn đã làm rõ. Tôi muốn biết nếu có một lệnh (hoặc bộ lệnh) tính toán các tham số Bộ nhớ ảo, Bộ đệm tệp và Bộ nhớ ứng dụng trong ảnh chụp màn hình ở trên.
Muhammad Hassan Nasr

@MuhammadHassan Câu trả lời dưới đây bao gồm một bản tóm tắt kỹ thuật đảo ngược tốt đẹp của thuật toán và chỉ ra nơi để tìm xnunguồn mở cho các phần bên trong. Tôi đã rút ra 4 giá trị được bảo hiểm có liên quan nhất đến màn hình hiển thị áp lực GUI.
bmike

30

Để phần nào làm rõ và làm cho phỏng đoán đó chính xác hơn: áp suất bộ nhớ là một số liệu được sử dụng bởi kernel (xnu) với một luồng chuyên dụng gọi là memory_status (trước đây gọi là Jetsam). Chuỗi này chịu trách nhiệm phát hiện khi RAM khả dụng thấp - điều này trong OS X có thể buộc phải tráo đổi và trong iOS sẽ giết chết ứng dụng tiêu thụ bộ nhớ cao nhất (vì không có trao đổi). Trong Mavericks, hai hệ điều hành gần nhau hơn. Memorystatus đưa ra một ghi chú kernel, mà thời gian chạy Obj-C cuối cùng chuyển thành appDidReceiveLowMemoryWarning. Các ứng dụng được cho là để xóa bộ nhớ không sử dụng hoặc bộ nhớ ngoài (ví dụ: bộ nhớ cache). LibC của Darwin cũng tự động thanh lọc bộ nhớ.

Có một cuộc gọi hệ thống cụ thể (mặc dù không có tài liệu), vm_pressure_monitor (# 296, nếu tôi nhớ chính xác), cho phép khách hàng lắng nghe các sự kiện áp lực và xem có thể thu hồi được bao nhiêu trang vật lý.

Bạn có thể xem các sự kiện gây áp lực trên Mavericks bằng Process Explorer cho OS X - có thể tải xuống từ http://newosxbook.com/index.php?page=doads . Cả hai đều cho bạn thấy "áp kế" áp lực, cũng như các sự kiện áp lực.


Trang web đó cũng có một bài viết chi tiết - newosxbook.com/articles/MemoryPressure.html - chi tiết Áp lực và xử lý bộ nhớ trong OS X và iOS
user61711

Chi tiết tuyệt vời về sự tương đồng và khác biệt giữa Mavericks và nhân iOS. Cảm ơn đã liên kết đến Process Explorer.
bmike

14

Áp suất bộ nhớ được xác định bởi hai bộ đếm Mach giữ bên trong:

  • vm_page_free_count: Hiện tại có bao nhiêu trang RAM miễn phí
  • vm_page_free_target: Tối thiểu bao nhiêu trang RAM, tối thiểu là miễn phí.

Bạn có thể thấy những điều này dễ dàng bằng cách sử dụng sysctl:

morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243

nếu số lượng trang miễn phí giảm xuống dưới mức mục tiêu - chúng tôi có một tình huống áp lực.


Từ http://newosxbook.com/articles/MemoryPressure.html

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.