Это скорее длинный комментарий, чем ответ. Может быть, это будет стимулировать другие предложения. Основная идея состоит в том, чтобы зарезервировать и выделить память таким образом, чтобы sysbench затем использовал другую область памяти для своего буфера блока памяти, чтобы наблюдать, одинакова ли производительность по всей памяти.
Тестовая система имеет только 32 ГБ памяти на модулях DIMM 4X8G.
Во-первых, просто запустите sysbench в обычном режиме, но увеличьте продолжительность теста, чтобы время могло получить некоторую информацию во время его выполнения:
doug@s19:~/c$ sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time=60 run
ВНИМАНИЕ: опция --test устарела. Вы можете передать имя сценария или путь в командной строке без каких-либо параметров.
sysbench 1.0.18 (с использованием системы LuaJIT 2.1.0-beta3)
Запуск теста со следующими параметрами:
Количество потоков: 1
Инициализация генератора случайных чисел с текущего времени
Запуск теста скорости памяти со следующими параметрами:
размер блока: 4194304 КБ
общий размер: 524288МиБ
операция: запись
область: глобальная
Инициализация рабочих потоков...
Темы запущены!
Всего операций: 128 (3,05 в секунду)
524288,00 МБ передано (12509,51 МБ/с)
Общая статистика:
общее время: 41,9101 с
общее количество событий: 128
Задержка (мс):
мин: 327,22
среднее: 327,42
макс: 328,09
95-й процентиль: 325,98
сумма: 41909,72
Справедливость тем:
события (среднее/стандартное отклонение): 128.0000/0.00
время выполнения (среднее/стандартное отклонение): 41,9097/0,00
И в течение 41 секунды, которые потребовалось для выполнения теста, и в другом терминале я сделал это:
doug@s19:~$ ps aux | системный бенч grep
doug 10489 92,2 12,8 4227496 4204436 pts/1 Sl+ 09:48 0:03 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time =60 пробега
doug 10492 0.0 0.0 9040 732 pts/2 S+ 09:48 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 10489 | grep анон | группа "4195"
00007f25cbb5a000 4195456K rw--- [ анон ]
Я проделал весь цикл несколько раз:
00007fa4bd7b4000 4195456K rw--- [ анон ]
00007f32c9878000 4195456K rw--- [анонимно]
00007f4837211000 4195456K rw--- [анонимно]
что показывает, что мы действительно не знаем, какая память используется или обратное сопоставление с DIMM. Как-нибудь продолжим.
РЕДАКТИРОВАТЬ: вышеизложенное можно сделать повторяемым, отключив рандомизацию макета адресного пространства (ASLR):
ядро sudo sysctl.randomize_va_space = 0
Теперь зарезервируйте часть памяти, чтобы принудительно выделить буфер sysbench в другом месте. У кого-то может быть идея получше, но я написал программу:
doug@s19:~/c$ кот зарезервировал m.c
/********************************************************* *******************************
*
*reservem.c 2021.07.20 Смитис
* выделить кусок памяти на время.
* текущее использование - заставить другую программу использовать другую область
* памяти.
* см. также: https://askubuntu.com/questions/1352756/ram-has-become-very-slow-low-write-speed-and-high-latency
* см. slao testm.c, с которого начался этот код.
*
******************************************************* ****************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
интервал основной () {
символ *fptr;
длинный я, к;
/* При необходимости отрегулируйте в соответствии с требованиями использования */
я = 8589934592;
если(( fptr = (char *)malloc(i)) == NULL){
printf("reservem: ошибка выделения памяти, выход...\n");
выход(-1);
}
в то время как (( fptr == NULL) && (i > 0));
for(k = 0; k < i; k++){ /* чтобы память действительно выделялась, а не просто резервировалась */
fptr[k] = (char) (k & 255);
} /* конец для */
printf("reservem: память зарезервирована и выделена. сейчас спит...\n");
сон(180); /* чтобы можно было провести другие тесты и наблюдения. Отрегулируйте по мере необходимости. */
бесплатно (фптр);
printf("reservem: память освобождена. Готово, выход...\n");
возврат (0);
} /* конец программы */
Скомпилировал это:
doug@s19:~/c$ ccreservem.c -oreservem
затем запустил его, а затем переделал предыдущие шаги, пока блок памяти был зарезервирован и выделен. Получающий:
doug@s19:~$ ps aux | системный бенч grep
doug 11324 93,8 12,8 4227496 4204340 pts/1 Sl+ 13:58 0:09 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time =60 пробега
doug 11327 0.0 0.0 9040 664 pts/2 S+ 13:59 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 11324 | grep анон | группа "4195"
00007fc5f2df8000 4195456K rw--- [ анон ]
И для зарезервированной памяти:
doug@s19:~$ ps aux | grep резерв
Дуг 11314 55,0 25,6 8391108 8389584 оч/0 П+ 13:57 0:11 ./резерв
doug 11318 0.0 0.0 9040 740 pts/2 S+ 13:57 0:00 grep --color=auto backupm
doug@s19:~$ pmap 11314 | grep анон | grep "8388612K"
00007f11a6bfc000 8388612K rw--- [анонимно]
И:
524288,00 МБ передано (12499,79 МБ/с)
Аналогично для резервирования и выделения 2-х и 3-х 8G:
doug@s19:~$ ps aux | grep резерв
Дуг 11335 85.0 25.6 8391108 8389704 оч/0 С 14:07 0:11 ./резерв
Дуг 11336 92.0 25.6 8391108 8389672 оч/0 С 14:07 0:11 ./резерв
doug 11340 0.0 0.0 9040 736 pts/2 S+ 14:08 0:00 grep --color=autoreservem
doug@s19:~$ pmap 11335 | grep анон | grep "8388612K"
00007fae2ce3f000 8388612K rw--- [анонимно]
doug@s19:~$ pmap 11336 | grep анон | grep "8388612K"
00007f20cb627000 8388612K rw--- [анонимно]
doug@s19:~$ ps aux | системный бенч grep
doug 11347 96,6 12,8 4227496 4204468 pts/1 Sl+ 14:08 0:12 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time =60 пробега
doug 11350 0.0 0.0 9040 740 pts/2 S+ 14:08 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 11347 | grep анон | группа "4195"
00007f37dbe3c000 4195456K rw--- [анонимно]
и:
524288,00 МБ передано (12521,74 МБ/с)
3X:
doug@s19:~$ ps aux | grep резерв
Дуг 11388 100 21.0 8391108 6889064 оч/0 П 14:12 0:09 ./резерв
Дуг 11389 103 19,2 8391108 6292368 оч/0 П 14:12 0:08 ./резерв
Дуг 11390 100 16,3 8391108 5334328 оч/0 П 14:12 0:07 ./резерв
doug 11392 0.0 0.0 9040 724 pts/2 S+ 14:12 0:00 grep --color=autoreservem
doug@s19:~$ pmap 11388 | grep анон | grep "8388612K"
00007f2b83d2d000 8388612K rw--- [ анон ]
doug@s19:~$ pmap 11389 | grep анон | grep "8388612K"
00007f2921e0c000 8388612K rw--- [анонимно]
doug@s19:~$ pmap 11390 | grep анон | grep "8388612K"
00007f2a23f2b000 8388612K rw--- [ анон ]
doug@s19:~$ ps aux | системный бенч grep
doug 11402 107 12,8 4227496 4204420 pts/1 Sl+ 14:12 0:07 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time =60 пробега
doug 11405 0.0 0.0 9040 672 pts/2 S+ 14:12 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 11402 | grep анон | группа "4195"
00007fe64b54b000 4195456K rw--- [ анон ]
и:
524288,00 МБ передано (12504,34 МБ/с)
Для справки, производительность в этой системе зависит от размера блока памяти:
Размер блока: производительность (МиБ/сек):
256 2750,99
512 4937,70
1К 8216.82
2К 12290,93
4К 16334,92
8К 19498,37
16К 21663,68
32К 22514,94
64К 23372,45
128К 23815,14
256К 23967,98
512К 24126.43
1М 24226.70
2М 24279,93
4М 24310.19
8М 23632.07
16М 20622.04
32М 16149,71
64М 14206.06
128М 13303.15
256М 12853,12
512М 12720,34
1G 12584,68
2G 12538,66
4G 12502,66
8G 12490,63
16Г 12482,25