Tại sao RAM đầy một phần gây ra độ trễ?


53

Tại sao RAM đầy một phần (giả sử là 80%), khiến thiết bị bị lag rất nhiều, mặc dù có một số không gian có sẵn để lưu trữ nhiều dữ liệu hơn? Những gì tôi mong đợi là nó tiếp tục hoạt động tốt đến 99%.

Tôi nhận thấy rằng trên điện thoại di động nhiều hơn trên PC, vì nó có RAM nhỏ hơn, ví dụ như điện thoại di động của tôi có RAM 2 GB; Khi tôi có ít hơn 1 GB RAM, nó sẽ bị chậm rất nhiều! Tại sao điều đó xảy ra, mặc dù nó vẫn có ~ 1 GB để sử dụng?


28
Tôi nghi ngờ rằng bạn đang cho rằng RAM không có sẵn không được sử dụng. Vì vậy, bạn thấy 20% RAM có sẵn và nghĩ rằng chỉ 80% RAM đang được sử dụng. Điều này là không chính xác, RAM có thể được sử dụng và có sẵn. (Ví dụ: máy tôi đang sử dụng hiện có 32 GB RAM và 21,1 GB khả dụng, nhưng chỉ có 1,8 GB là miễn phí.)
David Schwartz

2
Bạn có nghĩa là không gian trống của tôi với RAM của tôi? chắc chắn không.
Mohammed Noureldin

3
Họ có thể được thay thế, chắc chắn. Nhưng điều đó sẽ có tác động tiêu cực rất lớn đến hiệu suất - chính xác như bạn đang thấy. Nếu bộ làm việc vượt quá RAM, hiệu suất sẽ rất tệ, cho dù có bao nhiêu RAM.
David Schwartz

3
Điều gì khiến bạn nghĩ rằng chính tỷ lệ RAM khiến thiết bị bị lag?
enkryptor

4
@MohammedNoureldin Tôi đoán phải có lý do khiến RAM của bạn bận (một số quy trình đang hoạt động và đang làm gì đó). Đây có thể là cùng một lý do tại sao thiết bị bị lag. Việc tải RAM có thể chỉ là một triệu chứng, không phải là lý do.
enkryptor

Câu trả lời:


70

Có nhiều thứ liên quan ở đây nhưng tôi sẽ cố gắng giải thích nó đơn giản nhất có thể và theo cách áp dụng cho bất kỳ HĐH nào.

Có 2 nguyên tắc cơ bản ở đây:

  1. Tổng cộng tất cả mọi thứ cần có trong RAM và những thứ có lợi từ RAM sẽ hầu như luôn lớn hơn kích thước của RAM. Những thứ sẽ được hưởng lợi từ RAM bao gồm các bộ làm việc quá trình và danh sách chờ. Cái sau chứa dữ liệu và mã đã từng được sử dụng nhưng đã mất hiệu lực. Phần lớn trong số này sẽ được sử dụng lại, một số trong số đó khá sớm, vì vậy có lợi khi giữ nó trong RAM. Bộ nhớ này hoạt động như một loại bộ đệm nhưng không thực sự cần thiết vì vậy thuộc danh mục bộ nhớ khả dụng. Giống như bộ nhớ trống, nó có thể nhanh chóng được cung cấp cho bất kỳ chương trình nào cần nó. Vì lợi ích của hiệu năng bộ nhớ dự phòng nên lớn.

  2. Tần suất sử dụng các khối bộ nhớ khác xa với ngẫu nhiên nhưng có thể dự đoán với độ chính xác đáng kể. Bộ nhớ được chia thành các khối, thường là 4K byte. Một số khối được truy cập nhiều lần trong một giây trong khi các khối khác không được truy cập trong nhiều phút, giờ, ngày hoặc thậm chí vài tuần nếu hệ thống đã hoạt động đủ lâu. Có một phạm vi sử dụng rộng rãi giữa 2 thái cực này. Trình quản lý bộ nhớ biết những khối nào đã được truy cập gần đây và những khối nào không có. Đó là một giả định hợp lý rằng một khối bộ nhớ đã được truy cập gần đây sẽ sớm được cần đến một lần nữa. Bộ nhớ không được truy cập gần đây có lẽ sẽ không cần thiết bất cứ lúc nào sớm. Kinh nghiệm lâu năm đã chứng minh điều này là một nguyên tắc hợp lệ.

Trình quản lý bộ nhớ tận dụng nguyên tắc thứ hai để giảm thiểu phần lớn hậu quả không mong muốn của nguyên tắc thứ nhất. Để làm điều này, nó thực hiện một hành động cân bằng giữ dữ liệu được truy cập gần đây trong RAM trong khi đó giữ dữ liệu hiếm khi được sử dụng trong các tệp gốc hoặc tệp trang.

Khi RAM dồi dào, hành động cân bằng này rất dễ dàng. Phần lớn dữ liệu không được sử dụng gần đây có thể được giữ trong RAM. Đây là một tình huống tốt.

Mọi thứ trở nên phức tạp hơn khi khối lượng công việc tăng lên. Tổng số dữ liệu và mã được sử dụng lớn hơn nhưng kích thước của RAM vẫn giữ nguyên. Điều này có nghĩa là một tập hợp con nhỏ hơn này có thể được giữ trong RAM. Một số dữ liệu ít được sử dụng gần đây có thể không còn trong RAM mà phải để lại trên đĩa. Trình quản lý bộ nhớ cố gắng hết sức để duy trì sự cân bằng tốt giữa bộ nhớ trong sử dụng tích cực và bộ nhớ khả dụng. Nhưng khi khối lượng công việc tăng lên, trình quản lý bộ nhớ sẽ buộc phải cung cấp thêm bộ nhớ khả dụng cho các tiến trình đang chạy. Đây không phải là một tình huống tốt nhưng người quản lý bộ nhớ không có sự lựa chọn.

Vấn đề là việc di chuyển dữ liệu đến và từ RAM khi chương trình chạy cần có thời gian. Khi RAM dồi dào, điều đó sẽ không xảy ra thường xuyên và thậm chí sẽ không được chú ý. Nhưng khi việc sử dụng RAM đạt mức cao thì điều đó sẽ xảy ra thường xuyên hơn. Tình hình có thể trở nên tồi tệ đến mức dành nhiều thời gian hơn cho việc di chuyển dữ liệu đến và từ RAM so với việc sử dụng nó thực sự. Đây là một sự cố, một điều mà người quản lý bộ nhớ cố gắng hết sức để tránh nhưng với khối lượng công việc lớn thì thường không thể tránh được.

Trình quản lý bộ nhớ đứng về phía bạn, luôn cố gắng hết sức để duy trì hiệu suất tối ưu ngay cả trong các điều kiện bất lợi. Nhưng khi khối lượng công việc lớn và bộ nhớ khả dụng bị thiếu, nó phải làm những điều xấu để duy trì hoạt động. Thực tế đó là điều quan trọng nhất. Ưu tiên hàng đầu là giữ cho mọi thứ hoạt động sau đó thực hiện nhanh nhất có thể.


1
Câu trả lời của bạn đã giúp tôi rất nhiều, cảm ơn bạn! Đó memory mangerlà một phần OSquyền của tôi ? Vì vậy, nếu tôi đang xử lý các con trỏ và những thứ rất thấp này, nó vẫn có thể phân trang chứ?
Mohammed Noureldin

7
Trình quản lý bộ nhớ là một phần của HĐH. Phân trang là một chức năng cơ bản của trình quản lý bộ nhớ và rất cần thiết cho hoạt động như hơi thở đối với bạn và tôi. Nó không thể dừng lại.
LMiller7

2
@MohammedNoureldin: Khi bạn viết các ứng dụng không gian người dùng (có chế độ xem bộ nhớ được tách biệt với nhân và các quy trình khác), bạn không thể truy cập trực tiếp vào bộ nhớ vật lý . Tất cả những gì bạn có thể truy cập là một chế độ xem trên bộ nhớ được quản lý bởi - bạn đoán nó - trình quản lý bộ nhớ với tất cả các tính năng của nó (có thể) bao gồm cả phân trang. Con trỏ bộ nhớ chỉ tham chiếu đến các điểm trong không gian địa chỉ của chế độ xem bộ nhớ. Chúng là một khái niệm ngôn ngữ được sử dụng trong cả mã vùng và mã vùng người dùng nhưng điều đó không có nghĩa là hai khung nhìn bộ nhớ giống hệt nhau. Đừng nhầm lẫn giữa quản lý bộ nhớ với kernel MM!
David Foerster

6
Đó là 'hiển nhiên' hoặc 'nổi tiếng', nhưng có lẽ vẫn nên thêm vào câu trả lời này: bộ nhớ (ram) nhanh hơn 1000 lần so với ổ cứng (tốt, phụ thuộc vào rất nhiều thứ, ví dụ như ssd / ide / sata, v.v.) Hệ điều hành thực thi mã từ ram (+ cache), không phải từ đĩa. Khi bộ nhớ xuống thấp và HĐH cần "hoán đổi" các phần của mã ("không sử dụng") từ bộ nhớ sang đĩa, để ram miễn phí để thực thi một cái gì đó khác, việc này sẽ mất rất nhiều thời gian (hoán đổi) và nếu điều này xảy ra thường xuyên (ví dụ: bạn có nhiều chương trình, mỗi chương trình cần một trao đổi để mã của chúng được tải vào bộ nhớ), nó sẽ làm mọi thứ chậm lại rất nhiều.
Olivier Dulac

3
Chúng tôi thường không sử dụng thuật ngữ "trao đổi" để chỉ việc tải mã vào bộ nhớ. Điều đó thường được gọi là "lỗi". Thông thường, thuật ngữ "trao đổi" chỉ được sử dụng cho thông tin phải được ghi vào đĩa trước khi có thể được đẩy ra khỏi RAM.
David Schwartz

29

Tất cả các hệ điều hành hiện đại đều sử dụng bộ nhớ không sử dụng cho bộ nhớ đệm dữ liệu để có thể truy cập từ RAM nhanh thay vì lưu trữ chậm hơn. Họ thường sẽ báo cáo đây là bộ nhớ trống, vì các ứng dụng có thể xóa bộ nhớ cache và sử dụng nó nếu cần, nhưng nó vẫn thực sự được sử dụng. Càng có ít, dữ liệu có thể được lưu trữ càng ít và máy tính sẽ càng chậm.


11
Trên thực tế, các ứng dụng không cần phải "xóa" bộ đệm. Họ chỉ yêu cầu RAM từ HĐH. Hệ điều hành, nhận thấy rằng nó không có RAM không sử dụng, sẽ xóa một phần bộ đệm của tệp và cung cấp RAM không cần thiết cho ứng dụng. Ứng dụng không thể biết RAM đó đến từ đâu.
MSalters

5
@MSalters Có, tôi đồng ý, ứng dụng yêu cầu RAM và HĐH sẽ xóa bộ nhớ cache nếu cần. Tôi đã cố gắng để giữ cho nó đơn giản.
Mike Scott

Đó là một số cách rõ ràng, nhưng tôi nhận thức rõ hơn một chút về các chi tiết, do đó tôi có cảm giác thiếu một cái gì đó và tôi cần thêm chi tiết câu trả lời @LMiller đã giúp tôi thực sự, điều đó sẽ rất tuyệt nếu bạn có thể sửa đổi thông tin trong đó.
Mohammed Noureldin

4

Câu trả lời này chủ yếu được viết lại để sắp xếp lại cấu trúc và làm cho thông điệp rõ ràng hơn. Tôi cũng đã mở nó như một câu trả lời wiki cộng đồng; Hãy chỉnh sửa.

Phân trang là một sơ đồ quản lý bộ nhớ thông qua đó các khối bộ nhớ có kích thước cố định có các quy trình được gán cho chúng. Khi mức sử dụng bộ nhớ tăng lên mức cao (tức là 80% dung lượng), phân trang bắt đầu mở rộng từ RAM sang vRAM (RAM ảo).

vRAM được đặt trong bộ lưu trữ hệ thống, thường là trong ổ cứng hoặc các vị trí lưu trữ khá lớn khác.

Các quy trình được chỉ định một phần trong ổ cứng của bạn để chạy dưới dạng bộ nhớ và sẽ coi phần của chúng là RAM. Đây là một quá trình hoàn toàn bình thường, tuy nhiên, khi thời gian để truyền dữ liệu đến và từ vRAM tăng lên, hiệu năng hệ thống sẽ giảm.

Mặc dù RAM chuyên dụng được truy cập trực tiếp thông qua bo mạch chủ từ CPU, cung cấp kết nối nhanh, RAM ảo phải chuyển đổi cáp giữa bo mạch và vị trí của vRAM.

Điều này tuy nhiên, chỉ gây ra tác động hiệu suất nhẹ. Khi tốc độ phân trang cho vRAM diễn ra tăng mạnh (khi RAM chuyên dụng đạt tới dung lượng), việc đập sẽ diễn ra.

Thrashing là thực hành chuyển nhanh chóng và nhanh chóng các trang bộ nhớ vào bộ nhớ ảo của bạn. Điều này gây tổn thất lớn về hiệu suất vì phải dành nhiều thời gian hơn để tìm nạp và xử lý dữ liệu.

Hãy nói rằng, bạn muốn viết ra một số dài 30 chữ số. Bạn có thể ngồi cạnh màn hình bằng notepad và viết nó (sử dụng bộ nhớ chuyên dụng) hoặc bạn nhớ các đoạn 5, chạy sang phòng bên cạnh và ghi nó vào notepad của bạn trong đó (sử dụng bộ nhớ ảo). Cả hai đều hoàn thành công việc, nhưng sẽ nhanh hơn?

Tìm hiểu thêm về đập ở đây !

Rất cảm ơn những người đóng góp câu trả lời này bao gồm Daniel B , xenoidJon Bentley .


3
Nó không giống như đập là có chủ ý. Nó chỉ là một tác dụng phụ của phân trang và cạnh tranh cho bộ nhớ vật lý. Ngoài ra, bộ nhớ ảo không được tạo ra bằng cách chuyển các trang sang đĩa.
Daniel B

Thrashing là một sản phẩm phụ, đúng, nhưng nó là một sản phẩm vô cùng hữu ích trong thời gian mà các quá trình chạy qua, giúp ngăn chặn tình trạng chặn lưới. Và vâng, bộ nhớ ảo bị chiếm dụng hơn là được tạo ra. Tôi sẽ chỉnh sửa nó trong.
Sẽ

8
Không, bạn đang nhầm lẫn giữa rác và phân trang. Rác chỉ là phân trang trở thành bệnh lý.
xenoid

@xenoid Paging là sơ đồ quản lý bộ nhớ; Nó giống như nói rằng tôi nhầm lẫn khi đánh một con nai với xe của tôi và hệ thống đường cao tốc. Đập là quá trình gây ra hiệu suất nhúng này; Tuy nhiên, tôi đồng ý với bạn rằng đây là kết quả của hệ thống phân trang.
Sẽ

1
Nhận xét được kết hợp, đưa vào câu trả lời wiki, hãy chỉnh sửa.
Sẽ

1

Đó là vì HĐH phải thực hiện nhiều thao tác phân trang (tải các phần của chương trình đang hoạt động) và hoán đổi (chuyển dữ liệu trong RAM sang HD và ngược lại) để giữ cho phần mềm của bạn chạy. Khi các trang mới cần được tải có thể cần nhiều dung lượng hơn 20% khả dụng, HĐH sẽ phải trao đổi các trang hiện có trong RAM mà nó cho rằng sẽ ít được sử dụng sớm hơn. Đặc biệt là khi bắt đầu các chương trình khác. Việc hoán đổi và quay lại trong các trang mất rất nhiều thời gian và làm chậm hiệu suất máy tính của bạn một cách mạnh mẽ bởi vì bạn hiện đang làm việc ở tốc độ HD chứ không phải RAM.

Nó giúp một chút trên ổ cứng để tạo một phân vùng đặc biệt trên HD của bạn và gán nó dưới dạng "hoán đổi" chuyên dụng (không sử dụng nó cho các tệp "thực") để việc hoán đổi ít bị ảnh hưởng bởi sự phân mảnh HD.


ROM chỉ là danh pháp cho HD khi nói về bộ nhớ đệm, phân trang, v.v ... Bất cứ thứ gì không phải là bộ nhớ làm việc. Và ROM thường chậm hơn RAM, hầu như luôn luôn như vậy. Các máy tính cũ đã sao chép dữ liệu từ ROM sang RAM (ROM Shadowing) khi khởi động vì nó hoạt động nhanh hơn.
Gilles Lesire

1
Chắc chắn, nhưng ROM và RAM cũng được sử dụng như bộ nhớ không bay hơi và dễ bay hơi? ROM BTW thường chậm hơn, ROM được sao chép vào RAM (ROM Shadowing) khi khởi động để tăng hiệu suất. Nhưng chắc chắn, tôi sẽ thay đổi một tham chiếu để sửa lỗi nitpicking của bạn. ;)
Gilles Lesire

1

Hãy nhớ rằng, ổ cứng có tốc độ chậm hơn RAM và bản thân RAM không phải là tốc độ nhanh nhất để bắt đầu (trong kiến ​​trúc tổng thể). Theo thứ tự tốc độ truy cập (trong đó mỗi nấc thang là một thứ tự cường độ chậm hơn so với ở trên) bạn có

  1. Các thanh ghi bộ xử lý - Về mặt thực tế, các thanh ghi có sẵn trong vòng 1 chu kỳ của bộ xử lý . Xem xét rằng các bộ xử lý thực hiện hàng tỷ chu kỳ một giây (3 GHz = 3 tỷ chu kỳ mỗi giây), điều này thật nhanh chóng.
  2. Bộ đệm của bộ xử lý - Tùy thuộc vào cấp độ, nhưng chúng vẫn khá nhanh (khả năng sẵn sàng 3-5 chu kỳ cho bộ đệm L1).
  3. Bộ nhớ truy cập ngẫu nhiên (RAM) - Phần ngẫu nhiên có nghĩa là bạn không biết trạng thái của nó khi bạn truy cập nó. Hãy nghĩ về một người giao hàng trọn gói phải dừng lại, nhặt gói hàng lên, đi đến cửa và bấm chuông cửa và chờ phản hồi. Có lẽ bạn không đợi chút nào, hoặc có thể bạn đợi một hoặc hai phút để bà Smith xáo trộn ra cửa sau nhà. Về mặt thực tế, chúng ta đang nói chuyện ở bất cứ đâu từ 14-27 chu kỳ (tùy thuộc vào trạng thái của RAM khi chúng ta truy cập nó).
  4. Ổ đĩa cứng - Hiện tại có một quy trình vật lý và trong khi nó diễn ra nhanh nhất có thể thì bạn đang chờ đợi những cái đầu di chuyển và những dấu vết di chuyển dưới những cái đầu đó. Về mặt thực tế, ổ cứng 7.200 vòng / phút có thể hoàn thành một cuộc cách mạng trong khoảng 4 ms hoặc khoảng 750.000 chu kỳ cho bộ xử lý 3 GHz . Điều đó thật chậm.

Trình quản lý bộ nhớ ảo là một con bạc. Cá cược rằng bạn không cần tất cả RAM của mình mọi lúc, vì vậy nó sẽ đưa ra phỏng đoán có giáo dục và tung xúc xắc rằng chương trình tài liệu của bạn (đã ở trong nền trong 10 phút cuối khi bạn đọc điều này) không thực sự quan trọng và nó đẩy nó vào ổ cứng.

Nhưng sau đó bạn bấm lại vào tài liệu! Bây giờ VMM phải tải tất cả dữ liệu đó trở lại từ ổ cứng. Tồi tệ hơn, nếu bạn thiếu RAM, giờ đây nó phải đẩy dữ liệu khác (nhiều cờ bạc hơn) vào ổ cứng để giải phóng không gian có thể sử dụng. Linux thích sống ở rìa ở đây. Nó sẽ lấp đầy phần lớn RAM với dữ liệu được sử dụng thường xuyên (tuyệt vời cho các máy chủ có ít quy trình).


1
Vâng, người quản lý bộ nhớ là một con bạc nhưng điều đó rất dễ bị hiểu lầm. Nếu truy cập bộ nhớ thực sự ngẫu nhiên thì trình quản lý bộ nhớ sẽ thường xuyên bị sai và toàn bộ hệ thống sẽ bị hỏng. Nhưng các chương trình có xu hướng thể hiện một địa phương mạnh mẽ của tài liệu tham khảo. Đó là hầu hết các truy cập bộ nhớ có xu hướng được định vị vào một vùng bộ nhớ tương đối nhỏ. Họ di chuyển xung quanh nhưng đủ chậm để hệ thống hoạt động. Các tỷ lệ cược được xếp chồng lên nhau trong sự ủng hộ của các nhà quản lý bộ nhớ và các lỗi nhanh chóng được sửa chữa. Điều này đã được chứng minh qua nhiều thập kỷ kinh nghiệm
LMiller7

Bộ nhớ truy cập ngẫu nhiên trong bộ nhớ truy cập ngẫu nhiên đề cập đến thực tế là bạn có thể truy cập bất kỳ bộ nhớ ngẫu nhiên nào. (Trái ngược với việc phải chờ dữ liệu chuyển qua bên dưới các đầu đọc như trong ổ cứng hoặc băng, sau đó truy cập dữ liệu một cách tuần tự.).
Phil

0

Câu trả lời đập mạnh khá nhiều đinh nó. Nếu bạn có thể, bạn có thể giảm thiểu việc này xảy ra nhanh như thế nào bằng cách giảm độ nhanh (hệ thống sẽ cho phép sử dụng bao nhiêu ram trước khi chuyển mọi thứ sang không gian). Tôi muốn đặt các hệ thống tránh trao đổi cho đến khi ram đạt 99% cho các ứng dụng máy chủ vì mặc định có nghĩa là tôi sẽ cần mã hóa mọi thứ để chỉ sử dụng 80% ram để tận dụng bộ nhớ đệm mà không bị phạt vì đẩy hệ thống vào không gian hoán đổi.

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.