Vô hiệu hóa phân mảnh THP và THP trên phiên bản CentOS 7 EC2


9

Tôi muốn tắt trong suốt_hugepage (THP) trên phiên bản CentOS 7 EC2, được bật theo mặc định:

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

Cài đặt này có thể được thay đổi bằng tay:

# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

... nhưng những thay đổi bị mất sau khi khởi động lại.

Tôi đã cố gắng đưa echo never [...]hướng dẫn vào tệp rc.localcloud.cfgtệp của mình nhưng không được.

Tôi cũng đã cố nối thêm cài đặt transparent_hugepage=nevervào dòng kernel /etc/grub.conf(như đã giải thích ở đó ), nhưng nó không hoạt động tốt hơn.

Vậy ... làm cách nào tôi có thể vô hiệu hóa THP trên CentOS 7 chạy trên phiên bản AWS EC2?

chỉnh sửa: thay đổi tiêu đề ... Tôi cần phải tắt phân mảnh THP THP


Vì lợi ích, tôi có thể hỏi tại sao bạn muốn tắt THP không?
Cameron Kerr


Sau khi khởi động lại, instasnce của bạn sẽ không hoạt động nếu bạn "chắp thêm trong suốt_hugepage = không bao giờ vào dòng kernel của /etc/grub.conf" và sẽ cần xóa dòng này khỏi tệp grub. Đối với mục đích này, chúng tôi có thể đính kèm thể hiện hiện tại vào một thể hiện mới và gắn kết phân vùng vào thư mục
Artem.Borysov

Câu trả lời:


14

Giải pháp được điều chỉnh , như được chỉ ra bởi @ michael-hampton. Phần khó khăn là plugin vm chỉ có thể cấu hình /sys/kernel/mm/transparent_hugepage/enabledcài đặt.

Để vô hiệu hóa /sys/kernel/mm/transparent_hugepage/defragcài đặt, tôi phải tạo một tập lệnh được gọi bởi hồ sơ khi bắt đầu.

Cuối cùng, giải pháp hoàn chỉnh là:

Bước 1 : Tạo thư mục để giữ hồ sơ tùy chỉnh:

mkdir /etc/tuned/custom

Bước 2 : Tạo hồ sơ /etc/tuned/custom/tuned.conf:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

[script]
script=script.sh

Lưu ý rằng hồ sơ này kế thừa từ khách ảo , đó là hồ sơ hoạt động của tôi, thực sự trông phù hợp với máy chủ ảo hóa (EC2). Bạn có thể xem hồ sơ hoạt động của bạn với lệnh tuned-adm active. Nếu bạn tò mò, bạn có thể kiểm tra nội dung của các cấu hình được xác định trước trong/usr/lib/tuned/

Bước 3 : Tạo tập lệnh /etc/tuned/custom/script.sh:

#!/bin/sh

. /usr/lib/tuned/functions

start() {
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    return 0
}

stop() {
    return 0
}

process $@

Làm cho nó thực thi:

sudo chmod 755 /etc/tuned/custom/script.sh

Bước 4 : Kích hoạt hồ sơ mới:

tuned-adm profile custom

Bây giờ bạn sẽ nhận được:

# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

Nó sẽ tồn tại sau khi khởi động lại.


Chúng tôi thấy rằng điều này đã làm việc trên AWS Redhat 7.4 VM. Cảm ơn!
Jon Sampson

2

Ngoài việc thiết lập dòng lệnh grub, bạn cũng cần cấu hình điều chỉnh. Nhưng không sử dụng các hướng dẫn mà bạn đã liên kết, vì chúng có quá nhiều lỗi, sẽ mất nửa ngày chỉ để giải thích tất cả.

Tạo một hồ sơ điều chỉnh tùy chỉnh (mà tôi sẽ gọi custom), sau đó đặt hồ sơ. Bạn sẽ căn cứ vào một hồ sơ hiện có, chẳng hạn như virtual-guestnếu bạn đang chạy trong một máy ảo (tất nhiên là EC2) hoặc throughput-performancenếu bạn đang ở trên một máy vật lý.

Tạo thư mục để giữ hồ sơ tùy chỉnh:

mkdir /etc/tuned/custom

Tạo hồ sơ tùy chỉnh /etc/tuned/custom/tuned.conf, ví dụ:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

Bây giờ thiết lập hồ sơ:

tuned-adm profile custom

Những chỉ dẫn đầy lỗi? Sẽ mất nửa ngày để giải thích? Đó là những gì tôi đang cố gắng để hiểu.
vcarel 04/05/2015

Tôi không hiểu câu trả lời của bạn. Tại sao tôi phải cấu hình grub sử dụng điều chỉnh hoàn toàn?
vcarel 04/05/2015

1
Bởi vì nó được bật theo mặc định trong cấu hình kernel theo mặc định trong cấu hình được điều chỉnh. Bạn cần thay đổi cả hai để nó hoàn toàn hiệu quả.
Michael Hampton

1
Cấu hình điều chỉnh có vẻ đủ ... Tôi không phải thay đổi cấu hình grub. BTW, có một cài đặt điều chỉnh nào khác để tắt phân mảnh THP không?
vcarel

@vcarel Không cần thiết vì những cái ôm trong suốt đã bị vô hiệu hóa!
Michael Hampton

1

Cũng thử cái này

nano /etc/init.d/disable-transparent-hugepages

#!/bin/sh
### BEGIN INIT INFO
# Provides:          disable-transparent-hugepages
# Required-Start:    $local_fs
# Required-Stop:
# X-Start-Before:    mongod mongodb-mms-automation-agent
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description:       Disable Linux transparent huge pages, to improve
#                    database performance.
### END INIT INFO

case $1 in
  start)
    if [ -d /sys/kernel/mm/transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/transparent_hugepage
    elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/redhat_transparent_hugepage
    else
      return 0
    fi

    echo 'never' > ${thp_path}/enabled
    echo 'never' > ${thp_path}/defrag

    unset thp_path
    ;;
esac

sudo chmod 755 /etc/init.d/disable-transparent-hugepages

sudo chkconfig --add vô hiệu hóa trong suốt


0

Bạn có thể chỉnh sửa tệp /etc/rc.local và thêm lệnh sau vào tệp đó:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

và chạy chmod +x /etc/rc.d/rc.localđể đảm bảo script sẽ được thực thi trong khi khởi động. đã thử nghiệm trên Amazon Linux 2.


-2

EDIT: trả lời ở trên là sai , bởi vì các nút trang lớn trong suốt bị thiếu từ sysctl tại thời điểm này. Xin lỗi vì sự ồn ào.


Bạn có thể đặt các giá trị mong muốn vào /etc/sysctl.conf.

Từ trang man sysctl.conf (5):

Định dạng tệp SYSCTL.CONF (5) SYSCTL.CONF (5)

TÊN
       sysctl.conf - tập tin cấu hình / tải trước sysctl

SỰ MIÊU TẢ
       sysctl.conf là một tệp đơn giản chứa các giá trị sysctl được đọc và thiết lập bởi sysctl. Cú pháp đơn giản như sau:

              # bình luận
              ; bình luận

              mã thông báo = giá trị

       Lưu ý rằng các dòng trống bị bỏ qua và khoảng trắng trước và sau mã thông báo hoặc giá trị bị bỏ qua, mặc dù một giá trị có thể chứa khoảng trắng bên trong. Các dòng bắt đầu bằng # hoặc; Được cân nhắc
       ý kiến ​​và bỏ qua.

THÍ DỤ
              # mẫu sysctl.conf
              #
                kernel.domainname = example.com
              ; cái này có một khoảng trắng sẽ được ghi vào sysctl!
                kernel.modprobe = / sbin / mod thăm dò

1
Điều này không thể được cấu hình bằng sysctl.
Michael Hampton

Tại sao? Tôi thường chỉnh / sys / knowbs bằng sysctl.conf ... Tôi đang thiếu gì ở đây? EDIT: đừng bận tâm, tôi đã tìm thấy nó trên tài liệu của RHEL. Cảm ơn đã chỉ cho tôi điều đó;)
shodanshok
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.