Tôi đã kích hoạt trang lớn trong suốt trong quy trình sử dụng jemalloc để cấp phát bộ nhớ, theo các bước sau:
- đặt trạng thái trang lớn trong suốt thành "madvice":
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled;
echo madvise > /sys/kernel/mm/transparent_hugepage/defrag;
2.đặt jemalloc luôn sử dụng thp
export MALLOC_CONF="thp:always,metadata_thp:always,dirty_decay_ms:-1";
Do chương trình chỉ sử dụng jemalloc để phân bổ bộ nhớ nên kết quả mong đợi là kích thước của bộ nhớ được sử dụng hoàn toàn (RSS) bằng với kích thước của các trang lớn được phân bổ. Nhưng nó khác rất nhiều, vì các mục "AnonHugePages" và "Rss" hiển thị bên dưới:
# cat /proc/<pid>/smaps |awk 'NF==3 {dict[$1]+=$2} END{for(key in dict) print key" "dict[key]}'
Đã khóa: 4
Shared_Clean: 18732
MUPPageSize: 8776
Kích thước trang hạt nhân: 8776
Ps: 150242778
Hoán đổi: 0
ShmemPmdMapped: 0
Shared_Dirty: 0
Kích thước: 258068324
Riêng tư_Hugetlb: 0
Riêng tư_Bẩn: 150234008
Lười miễn phí: 0
Riêng tư_Dọn dẹp: 124
Tham khảo: 147993656
VmFlags: 0
AnonHugeTrang: 76193792
RS: 150252864
Hoán đổiPss: 0
Shared_Hugetlb: 0
Ẩn danh: 150232456
Tôi biết phân bổ bộ nhớ bình thường (trang 4k) sẽ xảy ra nếu không có đủ trang lớn trong hệ điều hành, thêm một số vào mục "thp_fault_fallback" trong "/proc/vmstat". Nhưng giá trị nhỏ như đoạn mã dưới đây cho thấy, có nghĩa là không có quá nhiều phân bổ trang không lớn xảy ra:
# grep thp_fault_fallback /proc/vmstat
thp_fault_fallback 2982
Vì vậy, Tại sao khoảng cách giữa kích thước của RSS và THP? Mong một số manh mối và lời khuyên.