Quản lý RAM trên VM/CT
Quản lý RAM trên VM/CT
Trong bài viết hôm nay chúng ta sẽ tìm hiểu về vSwap, OOM, Overcommit , UBC trong Container và VM của Odin.
Phần 1: Quản lý RAM cho Container
Odin cung cấp khái niệm mới về quản lý và vận hành RAM với Container là vSwap.
vSwap hoạt động như sau:
1. Cấu hình lượng RAM và lượng swap mà Container có thể sử dụng.
2. Khi Container sử dụng vượt quá mức RAM được cấp, sẽ được chuyển qua dùng swap.
3. Khi lượng Swap bị dùng vượt quá giới hạn, lập tức tiến trình OOM sẽ được kích hoạt để kill những process phát sinh quá giới hạn.
4. OOM sẽ kiểm tra tiến trình nào đang dùng quá nhiều.
Khi sử dụng VSwap, chúng ta sẽ cấu hình được cho Container có tối đa bao nhiêu processes và theads có thể tạo ra thông qua tham số numproc, hoặc cấu hình tham số numfile để qui định số lượng tối đa bao nhiêu file được mở bởi tất cả các processes trong container. Chi tiết hơn có thể xem về khái niệm UBC và cách cấu hình tại đây.
Để cấu hình lương RAM và Swap cho Container, dùng tham số PHYSPAGES cho RAM và SWAPPAGES cho swap.
# grep PHYSPAGES /etc/vz/conf/101.conf
PHYSPAGES=”65536:65536″
# grep SWAPPAGES /etc/vz/conf/101.conf
SWAPPAGES=”65536″
Ở phần trên thể hiện cho việc cấu hình lương RAM và swap mà container 101 có thể dùng ( RAM= 256MB và SWap = 256MB )
Cũng có thể cấu hình lượng các thông số RAM và Swap bằng command:
# prlctl set 101 –memsize 1G –swappages 512M
Cấu hình tham số Overcommit
Overcommit là một khái niệm về tính năng cho phép các VM và CT đăng ký nhiều dung lượng bộ nhớ hơn là dung lượng bộ nhớ thật trên host.
OOM lấy các thông tin về tiến trình sử dụng quá nhiều bộ nhớ trong /proc/<pid>/oom_score. Các tiến trình này được lựa chọn từ nhiều yếu tố ảnh hưởng như tổng lượng RAM sử dụng, các hiện tượng sử dụng không tốt ảnh hưởng
đến hệ thống sau dó ghi vào dãy từ 1 đến 1000. Tiến trình nào nằm trong dãy có giá trị cao sẽ bị OOM tắt đi.
Có thể cấu hình OOM trong file /etc/vz/oom-groups.conf. Chi tiết có thể xem tại đây.
Để cấu hình lượng overcommit cho CT, ta dùng lệnh sau
# prlctl set 101 –vm_overcommit 2
Lệnh trên cấu hình cho CT 101 trên lý thuyết có thể có đến 3GB ( tuy tổng dung lượng được cấp phát chỉ có thể là 1G RAM và 512MB Swap ).
(1 GB of RAM + 512 MB of swap) * 2 = 3 GB
Lưu ý: Hiện tại chỉ có thể cấu hình tham số overcommit thông qua command vzctl.
Phần 2 : Quản lý RAM trên VM
Trong phân cấu hình VM ta có 2 giá trị cần được quan tâm đó là Memory, chúng ta sẽ cấu hình thông qua option và –memsize trong command prlctl set.
Cấu hình memory RAM cho VM là MyVM.
# prlctl list -i MyVM | grep memory
memory 512Mb
# prlctl set MyVM –memsize 756
Set the memsize parameter to 756Mb
The VM has been successfully configured.
# prlctl list -i MyVM | grep memory
memory 756Mb
Cấu hình mở rộng về tham số Memory.
Chúng ta có 2 khái niệm giá trị mới về memory cần lưu ý ở đây là
Reserved memory limit : Xác định lượng memory ( vật lý ) mà node giữ lại để dự phòng.
Memory quota : Qui định hạn mức sử dụng memory cho từng VM một cách độc lập. Giá trị này bao gồm sự đảm bảo chính xác các mức limit, độ ưu tiên và khả năng mở rộng của VM.
Reserved memory limit.
Mặc định thì lượng RAM giới hạn mà tổng các VM có thể sử dụng của node chứa chúng được tính như sau:
– Nếu server có ít hơn 3GB RAM, công thức là tổng dung lượng RAM thật nhân với 0.7 để ra được số Reserved memory limit của các VM có thể dùng đồng thời.
– Nếu server có nhiều hơn 3GB RAM, công thức là tổng dung lượng RAM thật trừ đi 1 để ra được số Reserved memory limit của các VM có thể dùng đồng thời.
Để cấu hình option Reserved memory limit, ta dung command prlsrvctl set –mem-limit.
# prlsrvctl set –mem-limit 14336
Cấu hình bằng tay hoặc auto.
# prlsrvctl set –mem-limit auto
Set memory limit: auto
The Server has been successfully configured
Cấu hình Memory Quota
Memory Quota cho phép chúng ta cấu hình lượng RAM mà các VM có thể nhận được. Bao gồm các thông tin như sau:
Guarantee: Lượng RAM đảm bảo mà VM được phép sử dụng. Nếu VM yêu cầu quá nhiều so với mức đảm bảo được cấp bộ nhớ thì sẽ làm cho bộ cấp phát memory lỗi. ( ví dụ là sẽ không còn bộ nhớ trống trên server )
Limit : Lượng RAM tối đa mà các VM có thể dùng, mặc dù trên node còn dư thừa về RAM nhưng nếu đã qui định ở một mức nào đó, thì các VM cũng không lấn qua được hạn mức.
Priority : Độ ưu tiên ( từ 1 đến 100 ) quy định mức độ ưu tiên sử dụng RAM từ host mà VM nhận được so với các VM khác.
Ballooning : Số lượng tối đa về memory mà driver ballooning có thể cấp cho VM khi cần thiết. Driver Ballooning này đựoc tích hợp vào mội VM khi lần đầu khởi tạo, vid dụ khi VM xài hết 2GB RAM được cấp cho, nó sẽ gửi yêu cầu đến driver balloon trong VM để tăng lượng RAM. Balloon driver có thể cấp đến 60% lượng RAM để cho vào VM. Giả sử lượng RAM của VM là 2GB, balloon driver có thể cấp thêm 1.2GB nữa cho memory.
Để cấu hình ta dùng option –memquota trong command prlctl set. Ví dụ cấp cho VM MyVM lượng Guarantee là 512MB, limit đến 2GB, độ ưu tiên ( priotity )là 70, và balloning limit là 50% lượng RAM.
# prlctl set MyVM –memquota 512:2048:70:50
# prlctl list -i MyVM | grep memory_quota
memory_quota min=512Mb max=2048Mb priority=70 maxballoon=50%
Auto –memquota.
# prlctl set MyVM –memquota auto
Chi tiết thêm về các ví dụ cũng như hoàn cảnh sử dụng các tham số trên, mọi người có thể xem tại đây.
Memory hotplug cho VM.
Tính năng này cho phép người quản trị có thể tăng lượng RAM cho VM bất kì lúc nào cho dù VM đang chạy (Đối với VM mặc định khi đang chạy không thể điều chỉnh lượng RAM mà bắt buộc phải reboot sau khi điều chỉnh). Chi tiết các dòng hệ điều hành hỗ trợ vui lòng xem tại đây.
Để kích hoạt tính năng này vui lòng dùng command sau:
# prlctl set MyVM –mem-hotplug on
set mem hotplug: 1
Hoặc tắt tính năng này
# prlctl set MyVM –mem-hotplug off
set mem hotplug: 0
Lưu ý là mặc định các VM khi được tạo sẽ không được mở tính năng này. Sau khi kích hoạt tính năng, bạn có thể điều chỉnh lượng RAM của VM tùy ý mà không cần reboot VM.