Đây là một nhận xét dài hơn là một câu trả lời. Có thể nó sẽ kích thích các đề xuất khác. Ý tưởng cơ bản là dự trữ và phân bổ bộ nhớ sao cho sysbench sau đó phải sử dụng một vùng bộ nhớ khác cho bộ đệm khối bộ nhớ của nó để quan sát xem hiệu suất có giống nhau trên tất cả bộ nhớ hay không.
Hệ thống thử nghiệm chỉ có 32G bộ nhớ trên các DIMM 4X8G.
Đầu tiên, chỉ cần chạy sysbench bình thường, nhưng tăng thời lượng kiểm tra đủ để có thời gian thu thập một số thông tin trong khi nó thực thi:
doug@s19:~/c$ sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time=60 run
CẢNH BÁO: tùy chọn --test không được dùng nữa. Bạn có thể chuyển tên tập lệnh hoặc đường dẫn trên dòng lệnh mà không cần bất kỳ tùy chọn nào.
sysbench 1.0.18 (sử dụng hệ thống LuaJIT 2.1.0-beta3)
Chạy thử nghiệm với các tùy chọn sau:
Số chủ đề: 1
Đang khởi tạo trình tạo số ngẫu nhiên từ thời điểm hiện tại
Chạy kiểm tra tốc độ bộ nhớ với các tùy chọn sau:
kích thước khối: 4194304KiB
tổng kích thước: 524288MiB
hoạt động: viết
phạm vi: toàn cầu
Đang khởi tạo chuỗi công nhân...
Chủ đề bắt đầu!
Tổng số hoạt động: 128 ( 3,05 mỗi giây)
524288,00 MiB được truyền (12509,51 MiB/giây)
Thống kê chung:
tổng thời gian: 41,9101 giây
tổng số sự kiện: 128
Độ trễ (ms):
tối thiểu: 327,22
trung bình: 327,42
tối đa: 328,09
Phân vị thứ 95: 325,98
tổng: 41909,72
Chủ đề công bằng:
sự kiện (avg/stddev): 128.0000/0.00
thời gian thực hiện (avg/stddev): 41.9097/0.00
Và trong 41 giây mà bài kiểm tra đã thực hiện và trong một thiết bị đầu cuối khác, tôi đã làm điều này:
doug@s19:~$ ps aux | grep sysbench
doug 10489 92,2 12,8 4227496 4204436 điểm/1 Sl+ 09:48 0:03 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time =60 lần chạy
doug 10492 0.0 0.0 9040 732 điểm/2 S+ 09:48 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 10489 | grep anon | grep "4195"
00007f25cbb5a000 4195456K rw--- [ anon ]
Tôi đã làm toàn bộ chu kỳ một vài lần:
00007fa4bd7b4000 4195456K rw--- [ anon ]
00007f32c9878000 4195456K rw--- [ anon ]
00007f4837211000 4195456K rw--- [ anon ]
điều này cho thấy chúng tôi thực sự không biết bộ nhớ nào được sử dụng hoặc ánh xạ trở lại DIMM. Hãy tiếp tục nào.
CHỈNH SỬA: những điều trên có thể được thực hiện lặp lại, bằng cách tắt Ngẫu nhiên bố cục không gian địa chỉ (ASLR):
Sudo sysctl kernel.randomize_va_space=0
Bây giờ, hãy dự trữ một số đoạn bộ nhớ để buộc bộ đệm sysbench được phân bổ ở nơi khác. Ai đó có thể có ý tưởng hay hơn, nhưng tôi đã viết một chương trình:
doug@s19:~/c$ cat Reservem.c
/*************************************************** ******************************
*
* Reservem.c 2021.07.20 Smythies
* phân bổ một đoạn bộ nhớ trong một thời gian.
* sử dụng hiện tại là buộc một chương trình khác sử dụng một khu vực khác
* của bộ nhớ.
* xem thêm: https://askubuntu.com/questions/1352756/ram-has-become-very-slow-low-write-speed-and-high-latency
* xem slao testm.c mà từ đó mã này bắt đầu.
*
*************************************************** ******************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
ký tự *fptr;
tôi dài, k;
/* Điều chỉnh cho phù hợp với yêu cầu sử dụng */
tôi = 8589934592;
if(( fptr = (char *)malloc(i)) == NULL){
printf("reservem: cấp phát bộ nhớ không thành công, Đang thoát...\n");
thoát(-1);
}
trong khi (( fptr == NULL) && (i > 0));
for(k = 0; k < i; k++){ /* để bộ nhớ thực sự được cấp phát chứ không chỉ dành riêng */
fptr[k] = (char) (k & 255);
} /* kết thúc */
printf("reservem: dành riêng và cấp phát bộ nhớ. đang ngủ...\n");
ngủ(180); /* để có thể thực hiện các kiểm tra và quan sát khác. Điều chỉnh theo yêu cầu. */
miễn phí(fptr);
printf("reservem: bộ nhớ đã được giải phóng. Xong và thoát...\n");
trả lại (0);
} /* kết thúc chương trình */
Biên soạn nó:
doug@s19:~/c$ cc Reservem.c -o Reservem
sau đó chạy nó và sau đó thực hiện lại các bước trước đó trong khi khối bộ nhớ được dành riêng và cấp phát. Nhận:
doug@s19:~$ ps aux | grep sysbench
doug 11324 93,8 12,8 4227496 4204340 điểm/1 Sl+ 13:58 0:09 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time =60 lần chạy
doug 11327 0.0 0.0 9040 664 điểm/2 S+ 13:59 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 11324 | grep anon | grep "4195"
00007fc5f2df8000 4195456K rw--- [ anon ]
Và đối với bộ nhớ dành riêng:
doug@s19:~$ ps aux | dự trữ grep
doug 11314 55.0 25.6 8391108 8389584 điểm/0 S+ 13:57 0:11 ./reservem
doug 11318 0.0 0.0 9040 740 điểm/2 S+ 13:57 0:00 grep --color=autoservem
doug@s19:~$ pmap 11314 | grep anon | grep "8388612K"
00007f11a6bfc000 8388612K rw--- [ anon ]
Và:
524288,00 MiB được truyền (12499,79 MiB/giây)
Tương tự cho đặt trước và cấp phát 8G lần 2 và lần 3:
doug@s19:~$ ps aux | dự trữ grep
doug 11335 85.0 25.6 8391108 8389704 điểm/0 S 14:07 0:11 ./reservem
doug 11336 92.0 25.6 8391108 8389672 điểm/0 S 14:07 0:11 ./reservem
doug 11340 0.0 0.0 9040 736 điểm/2 S+ 14:08 0:00 grep --color=autoservem
doug@s19:~$ pmap 11335 | grep anon | grep "8388612K"
00007fae2ce3f000 8388612K rw--- [ anon ]
doug@s19:~$ pmap 11336 | grep anon | grep "8388612K"
00007f20cb627000 8388612K rw--- [ anon ]
doug@s19:~$ ps aux | grep sysbench
doug 11347 96,6 12,8 4227496 4204468 điểm/1 Sl+ 14:08 0:12 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time =60 lần chạy
doug 11350 0.0 0.0 9040 740 điểm/2 S+ 14:08 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 11347 | grep anon | grep "4195"
00007f37dbe3c000 4195456K rw--- [ anon ]
và:
524288,00 MiB được truyền (12521,74 MiB/giây)
3X:
doug@s19:~$ ps aux | dự trữ grep
doug 11388 100 21.0 8391108 6889064 điểm/0 R 14:12 0:09 ./reservem
doug 11389 103 19.2 8391108 6292368 điểm/0 R 14:12 0:08 ./reservem
doug 11390 100 16.3 8391108 5334328 điểm/0 R 14:12 0:07 ./reservem
doug 11392 0.0 0.0 9040 724 điểm/2 S+ 14:12 0:00 grep --color=autoservem
doug@s19:~$ pmap 11388 | grep anon | grep "8388612K"
00007f2b83d2d000 8388612K rw--- [ anon ]
doug@s19:~$ pmap 11389 | grep anon | grep "8388612K"
00007f2921e0c000 8388612K rw--- [ anon ]
doug@s19:~$ pmap 11390 | grep anon | grep "8388612K"
00007f2a23f2b000 8388612K rw--- [ anon ]
doug@s19:~$ ps aux | grep sysbench
doug 11402 107 12.8 4227496 4204420 điểm/1 Sl+ 14:12 0:07 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time =60 lần chạy
doug 11405 0.0 0.0 9040 672 điểm/2 S+ 14:12 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 11402 | grep anon | grep "4195"
00007fe64b54b000 4195456K rw--- [ anon ]
và:
524288,00 MiB được truyền (12504,34 MiB/giây)
Để tham khảo, hiệu suất trên hệ thống này phù hợp với kích thước khối bộ nhớ:
Kích thước khối: hiệu suất (MiB/giây):
256 2750.99
512 4937.70
1K 8216.82
2K 12290,93
4K 16334,92
8K 19498.37
16K 21663,68
32K 22514.94
64K 23372,45
128K 23815.14
256K 23967.98
512K 24126.43
1 tháng 24226,70
2 tháng 24279,93
4T 24310.19
8T 23632.07
16 tháng 20622.04
32T 16149.71
64M 14206.06
128M 13303.15
256M 12853.12
512M 12720,34
1G 12584,68
2G12538.66
4G12502.66
8G 12490,63
16G 12482,25