Khi chạy lệnh show module status từ CLI hoặc lệnh cat/proc/meminfo trên mô-đun, đầu ra liệt kê các giá trị cho bộ nhớ High memory và Low memory:
total: used: free: shared: buffers: cached:
Mem: 1049051136 765775872 283275264 0 158441472 376979456
Swap: 1036115968 0 1036115968
MemTotal: 1024464 kB
MemFree: 276636 kB
MemShared: 0 kB
Buffers: 154728 kB
Cached: 368144 kB
...
HighTotal: 131072 kB
HighFree: 3064 kB
LowTotal: 893392 kB
LowFree: 273572 kB
Vậy bạn đã biết High memory và Low memory trong Linux là gì chưa? Cùng Quantrimang.com tìm hiểu qua bài viết sau đây nhé!
High memory và Low memory là gì?
- High memory (vùng nhớ cao) là phần bộ nhớ mà các chương trình user-space có thể xử lý. High memory không tác động vào Low memory.
- Low memory (vùng nhớ thấp) là phần bộ nhớ mà Linux kernel có thể xử lý trực tiếp. Nếu kernel phải truy cập vào High memory, trước tiên kernel phải ánh xạ vào không gian địa chỉ của chính nó.
High memory và Low memory được sử dụng như thế nào?
Trên hệ điều hành Linux 32-bit, CPU có thể xử lý tối đa 4GB bộ nhớ. Bộ nhớ được chia thành Low memory (hay còn gọi là Normal memory), được ánh xạ trực tiếp vào phần không gian địa chỉ của kernel, và High memory, không có ánh xạ kernel trực tiếp. Nói cách khác:
- Bản thân kernel (bao gồm các mô-đun hoạt động của nó, ví dụ các mô-đun Check Point kernel) chỉ có thể sử dụng Low memory.
- Những tiến trình người dùng trên hệ thống (bất kỳ thứ gì không phải là kernel) đều có khả năng sử dụng cả Low và High memory.
Những tình huống có thể xảy ra với High memory và Low memory
Do giới hạn của Low memory, OoM (Out of Memory killer) có thể được gọi ngay cả khi còn rất nhiều bộ nhớ trống. Tình huống này xảy ra khi Low memory cạn kiệt và kernel cần cấp phát thêm bộ nhớ. Tuy nhiên, một tình huống bất thường có thể xảy ra là còn rất nhiều High memory trống nhưng lại hết Low memory. Phổ biến hơn là cả High và Low memory đều gần bằng 0.
High memory thường bắt đầu ở mức trên 896MB. Tuy nhiên, trên Blue Coat X-Series chassis, các giới hạn sẽ khác nhau.
Xin lưu ý rằng trên hệ điều hành 64-bit, vì có quá nhiều không gian địa chỉ bộ nhớ ảo, nên Low memory bằng Total memory (Tổng bộ nhớ). Khi chạy lệnh show module status từ CLI, giá trị High memory và Low memory sẽ không xuất hiện.
Slot 14:
SDRAM 1 Size 1048576(KB)
SDRAM 2 Size 1048576(KB)
SDRAM 3 Size 1048576(KB)
SDRAM 4 Size 1048576(KB)
SDRAM Total Size 4194304(KB)
Reserved Memory 602536(KB)
Total Memory 3591768(KB)
Used Memory 453144(KB)
Free Memory 3138624(KB)
Shared Memory 0(KB)
Buffers Memory 139340(KB)
Cached Memory 187200(KB)
Memory Utilization 3.52%
Khi chạy lệnh cat /proc/meminfo trên mô-đun, HighTotal và HighFree sẽ luôn bằng 0:
# cat /proc/meminfo
MemTotal: 3591768 kB
MemFree: 135968 kB
Buffers: 378312 kB
Cached: 1754432 kB
SwapCached: 68 kB
Active: 965532 kB
Inactive: 2080476 kB
HighTotal: 0 kB
HighFree: 0 kB