powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Скорость записи в ОЗУ
24 сообщений из 24, страница 1 из 1
Скорость записи в ОЗУ
    #34148266
Troj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю лабу по ОС, приключилась необходимость измерить "седнее время доступа по записи в оперативную память" (Unix, С/С++). Не совсем понимаю, как это сделать. Попробовать выделить блок память, исползуя malloc, засечь время и в цикле записать в него какой-нибудь мусор, а лучне каким-нибудь memset-ом? Но для того, чтобы измереть более-менее точно время, надо выделить довольно большой блок. Где вероятность, что его не выгрузят на винч? Я конечно, не селен в этом, пока, но мне кажется, что это вполне возможно. Что еще хуже, надо в Винде определить среднее время свопинга страниц во вторичную память (жесткий диск), с веселым размером страницы в 2, 4 и 8 Кб (странный размер, не правда ли). Здесь вообще непонятно. Ведь я не допущен к процессу свопинга. Этим, вроде, занимается ОСь, когда ей надо. Может кто может помочь справиться с этими страшними (для начинающего) проблемами?
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34148326
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО лаба имеет исключительно познавательное назначение. Не думаю, что твои результаты приблизятся цифрам, которые показывают промышленные тесты оборудования.

В некоторых частных случаях, ты можешь получать и скорость работы кеша второго уровня, и среднюю скорость доступа к ОЗУ, и среднюю скорость доступа к виртуалке. Всё зависит от того, как реализовать. А чтобы реализовывать правильно, надо хотя-бы получить системную информацию о машине.
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34148385
Troj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получение системной информации - это явно не предполагалось в этой работе. Мне кажется, что все гараздо проще. пробовал что-то типа:

p=(char *)malloc((size_t)MNOGO);
t1=time(NULL);
for(int i=0; i<100; i++)
setmem(p+i, 0xFF, MNOGO-1-i);
t2=time(NULL);

Итого получил 133 МБайт/сек, иногда 400МБайт/сек, если без цикла. Мне кажется, что 400- вранье, поскольку погрешность измерения времени (~2 сек), возникшая на крях промежутка, сопоставима с самим промежутком.
Странная вещь, от изменения предела изменения i после практически ничего не меняется. Пробовал и чем инициализировать делать рандомным, и изменения начального адреса делать рандоьным, чтобы обмануть оптимизацию. Нифага. Больше 3 секунд не удалось заставить пахать.
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34148395
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте пожалуйтса табличку

MNOGOtime8K16K32Kи.т.д. до размера оперативки
Интересно взглянуть.
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34148410
Progs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот класс, он построен на Win API может пригодится:

class TCountTimeProgram{
public:
TCountTimeProgram( void ){
QueryPerformanceFrequency( &lpFrequency );
Start();
};
void Start( void ){
QueryPerformanceCounter( &lpPerformanceCount );
};
__int64 Now( void ) const{
LARGE_INTEGER lpNow;
QueryPerformanceCounter( &lpNow );
return ((( lpNow.QuadPart - lpPerformanceCount.QuadPart ) * 1000 ) / lpFrequency.QuadPart );
};
private:
LARGE_INTEGER lpFrequency;
LARGE_INTEGER lpPerformanceCount;
};

а потом, пишешь:

TCountTimeProgram *CTP = new TCountTimeProgram();
// код у которого нунжна вычеслить время
for(int i=0; i<100; i++)
setmem(p+i, 0xFF, MNOGO-1-i);

__int64 t = CTP->Now(); // Возвращает время в милисикундах
delete CTP;
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34148829
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Troj( Unix , С/С++).
ProgsВот класс, он построен на Win API может пригодится:

хм...
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34148944
Troj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Trojв Винде
alex_k хм...
хм хм
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34148975
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrojСтранная вещь, от изменения предела изменения i после практически ничего не меняется. Пробовал и чем инициализировать делать рандомным, и изменения начального адреса делать рандоьным, чтобы обмануть оптимизацию. Нифага. Больше 3 секунд не удалось заставить пахать.

Заинтересовала твоя задача, так что даже написал тебе тест. Прогони его, и посмотри, будут ли появлятся странности

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>

int main () {
    
    void *mem = malloc( 4 * 1024 * 1024 );

    for (int j= 0  ; j< 4  ; j++) {
	timeval tvStart;
	timeval tvEnd;
	long int dTime;
	long int bytes;
	
	gettimeofday(&tvStart, NULL);
	for (int i= 0  ; i< 400  ; i++)
	    memset(mem, 0xff,  1024 * 1024 *(j+ 1 ));
	gettimeofday(&tvEnd, NULL);
	
	dTime=(tvEnd.tv_sec  - tvStart.tv_sec)* 1000 +
	      (tvEnd.tv_usec - tvStart.tv_usec)/ 1000 ;
	bytes= 1024 * 1024 *(j+ 1 )*  400 ;
	
	printf("delta Time  = %ldms\n", dTime);
	printf("Speed = %ldMB/s\n", bytes/ 1000 /dTime);
    }

    return  0 ;
}

...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34148978
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня, на тестовом компе, стабильно - 177, 154, 152, 152 MB/s.
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34149126
Troj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkhЗаинтересовала твоя задача, так что даже написал тебе тест. Прогони его, и посмотри, будут ли появлятся странности

Сейчас проверяю. О результатах напишу.

(Windows:)
Хочу все-таки определить вермя свопинга.
Идея следующая: время свопинга должна быть суммой времени, необходимого для записи информации на винч, и некоторой константы, зависящей от системы, соответствующей вренени, потраченному на определение, куда записать, изменения во всяких таблицах и т.д.

Реализация:
Определил в скорость записи на жесткий диск. Алгоритм похож на определение скоростьи записи в ОЗУ в Unix. Но вот как выяснить эту самую контстанту. На мой взгляд, здесь уже надо как-то работать с реальным свопингом ОС и, решив систему двух уравнений, получить константу. Тогда, сложив константу со временем, необходимым для записи 2,4 и 8 кб на винч (скорость уже знаю), я получу искомую таблицу.

Проблема:
Как измерить время реального свопинга? Не важно, какого размера страницы, главное, чтобы можно было узнать время свопигна для страниц двух разных размеров, чтобы можно было решить систему.
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34149210
Troj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delta Time = 123ms
Speed = 3410MB/s
delta Time = 336ms
Speed = 2496MB/s
delta Time = 572ms
Speed = 2199MB/s
delta Time = 855ms
Speed = 1962MB/s
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34149244
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trojdelta Time = 123ms
Speed = 3410MB/s
delta Time = 336ms
Speed = 2496MB/s
delta Time = 572ms
Speed = 2199MB/s
delta Time = 855ms
Speed = 1962MB/s

Быстро пишет, может быть польшая погрешность. Увеличь буфер раз в 16 или 32. И разница более заметна.
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34149578
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем его вообще узнавать ? Берешь окрываешь комп, смотришь название микросхемы памяти и ищешь ее в справочнике.
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34150148
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh, а какой смысл в разные участки буфера писать?
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34150337
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoAkh, а какой смысл в разные участки буфера писать?

В каком месте?
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34150395
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024*1024*( j+1 )
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34150446
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo1024*1024*( j+1 )

Это размер записываемого блока.

Смысл: посмотреть как скорость записи он изменяется от размера блока. Отсюда можно попытаться сделать какой-то вывод. Какой, честно говоря не знаю, раз время растет.
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34151048
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh maXmo1024*1024*( j+1 )

Это размер записываемого блока.

Смысл: посмотреть как скорость записи он изменяется от размера блока. Отсюда можно попытаться сделать какой-то вывод. Какой, честно говоря не знаю, раз время растет.

Это можно использовать для оценки скорости работы системной шины в попугаях.
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34151138
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Это можно использовать для оценки скорости работы системной шины в попугаях.

Какой вариант будет правельным?
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34151366
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh onstat-Это можно использовать для оценки скорости работы системной шины в попугаях.

Какой вариант будет правельным?

Однозначного ответа здесь нет,
нужно сравнивать количество , площадь крыльев и вес попугаев
а также амплитуду и частоту взмахов и соизмерить с обьемом пространства
где все это происходит :).
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34151397
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Однозначного ответа здесь нет,
нужно сравнивать количество , площадь крыльев и вес попугаев
а также амплитуду и частоту взмахов и соизмерить с обьемом пространства
где все это происходит :).

Наиболее простой и адекватной будет оценка в условиях наиболее приближенным к задаче, для которой и проводится анализ.
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34151430
Troj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все круто! Сдал! Вариант с константой прокатил.
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34152334
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrojВсе круто! Сдал! Вариант с константой прокатил.

А свап как делал?
...
Рейтинг: 0 / 0
Скорость записи в ОЗУ
    #34154818
Troj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стратегия была примерно следующей:
1) Определил скорость записи на жесткий диск.
а) замерил вермя выполнения цикла, кучу раз писавшего на винч файл
размером N байт;
б) замерил вермя выполнения аналогичного цикла, кучу раз писавшего на винч файл
размером 2N байт;
в) решил систему уравнений и получил время записи N байт на винч;
г) поделил и поулчил скорость.
2) Оценил время свопинга 4 килобайтной страницы (вроде как в винде такая страница):
а) указал маленькое рабочее множество процесса с помощью SetProcessWorkingSetSize(...);
б) выделил большой кусок памяти;
в) засек время;
г) заполнял его фигней много раз;
д) определил время, потраченное на запись фигни;
е) поделил на что надо и получил приближенное время свопинга страницы, если все шло как
задумано и ОСь что-то выгружала, естественно, получено грубое приближение.
3) Вычислил время свопинга для страниц 2 и 8 кб:
a) вычил из полученной оценки времени свопинга 4 кб страницы время, необходимое для записи
4 кб данных на диск (полудено из скорости записи). Получена константа (точнее, некое
значение мало изменяющейся функции) равная времени, необходммому на внесение изменений
во всяких системных таблицах, позиционирование головки диска и др.;
б) прибавил к времени записи 2 и 8 кб данных (вычислено из скорости) полученную
константу и получил ответ (для 4 кб ответ был готов экспериментально).
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Скорость записи в ОЗУ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]