|
|
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Делаю лабу по ОС, приключилась необходимость измерить "седнее время доступа по записи в оперативную память" (Unix, С/С++). Не совсем понимаю, как это сделать. Попробовать выделить блок память, исползуя malloc, засечь время и в цикле записать в него какой-нибудь мусор, а лучне каким-нибудь memset-ом? Но для того, чтобы измереть более-менее точно время, надо выделить довольно большой блок. Где вероятность, что его не выгрузят на винч? Я конечно, не селен в этом, пока, но мне кажется, что это вполне возможно. Что еще хуже, надо в Винде определить среднее время свопинга страниц во вторичную память (жесткий диск), с веселым размером страницы в 2, 4 и 8 Кб (странный размер, не правда ли). Здесь вообще непонятно. Ведь я не допущен к процессу свопинга. Этим, вроде, занимается ОСь, когда ей надо. Может кто может помочь справиться с этими страшними (для начинающего) проблемами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 20:17 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
ИМХО лаба имеет исключительно познавательное назначение. Не думаю, что твои результаты приблизятся цифрам, которые показывают промышленные тесты оборудования. В некоторых частных случаях, ты можешь получать и скорость работы кеша второго уровня, и среднюю скорость доступа к ОЗУ, и среднюю скорость доступа к виртуалке. Всё зависит от того, как реализовать. А чтобы реализовывать правильно, надо хотя-бы получить системную информацию о машине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 21:01 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Получение системной информации - это явно не предполагалось в этой работе. Мне кажется, что все гараздо проще. пробовал что-то типа: 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 секунд не удалось заставить пахать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 21:47 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Сделайте пожалуйтса табличку MNOGOtime8K16K32Kи.т.д. до размера оперативки Интересно взглянуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 21:57 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Вот класс, он построен на 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 22:07 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Troj( Unix , С/С++). ProgsВот класс, он построен на Win API может пригодится: хм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 09:06 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Trojв Винде alex_k хм... хм хм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 09:52 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 10:01 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
У меня, на тестовом компе, стабильно - 177, 154, 152, 152 MB/s. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 10:02 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
AkhЗаинтересовала твоя задача, так что даже написал тебе тест. Прогони его, и посмотри, будут ли появлятся странности Сейчас проверяю. О результатах напишу. (Windows:) Хочу все-таки определить вермя свопинга. Идея следующая: время свопинга должна быть суммой времени, необходимого для записи информации на винч, и некоторой константы, зависящей от системы, соответствующей вренени, потраченному на определение, куда записать, изменения во всяких таблицах и т.д. Реализация: Определил в скорость записи на жесткий диск. Алгоритм похож на определение скоростьи записи в ОЗУ в Unix. Но вот как выяснить эту самую контстанту. На мой взгляд, здесь уже надо как-то работать с реальным свопингом ОС и, решив систему двух уравнений, получить константу. Тогда, сложив константу со временем, необходимым для записи 2,4 и 8 кб на винч (скорость уже знаю), я получу искомую таблицу. Проблема: Как измерить время реального свопинга? Не важно, какого размера страницы, главное, чтобы можно было узнать время свопигна для страниц двух разных размеров, чтобы можно было решить систему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 10:36 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
delta Time = 123ms Speed = 3410MB/s delta Time = 336ms Speed = 2496MB/s delta Time = 572ms Speed = 2199MB/s delta Time = 855ms Speed = 1962MB/s ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 10:54 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
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. И разница более заметна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 11:04 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Зачем его вообще узнавать ? Берешь окрываешь комп, смотришь название микросхемы памяти и ищешь ее в справочнике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 11:58 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Akh, а какой смысл в разные участки буфера писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 13:49 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
maXmoAkh, а какой смысл в разные участки буфера писать? В каком месте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 14:22 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
1024*1024*( j+1 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 14:33 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
maXmo1024*1024*( j+1 ) Это размер записываемого блока. Смысл: посмотреть как скорость записи он изменяется от размера блока. Отсюда можно попытаться сделать какой-то вывод. Какой, честно говоря не знаю, раз время растет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 14:46 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Akh maXmo1024*1024*( j+1 ) Это размер записываемого блока. Смысл: посмотреть как скорость записи он изменяется от размера блока. Отсюда можно попытаться сделать какой-то вывод. Какой, честно говоря не знаю, раз время растет. Это можно использовать для оценки скорости работы системной шины в попугаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 17:04 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
onstat-Это можно использовать для оценки скорости работы системной шины в попугаях. Какой вариант будет правельным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 17:22 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Akh onstat-Это можно использовать для оценки скорости работы системной шины в попугаях. Какой вариант будет правельным? Однозначного ответа здесь нет, нужно сравнивать количество , площадь крыльев и вес попугаев а также амплитуду и частоту взмахов и соизмерить с обьемом пространства где все это происходит :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 18:14 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
onstat-Однозначного ответа здесь нет, нужно сравнивать количество , площадь крыльев и вес попугаев а также амплитуду и частоту взмахов и соизмерить с обьемом пространства где все это происходит :). Наиболее простой и адекватной будет оценка в условиях наиболее приближенным к задаче, для которой и проводится анализ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 18:25 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Все круто! Сдал! Вариант с константой прокатил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 18:37 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
TrojВсе круто! Сдал! Вариант с константой прокатил. А свап как делал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2006, 09:48 |
|
||
|
Скорость записи в ОЗУ
|
|||
|---|---|---|---|
|
#18+
Стратегия была примерно следующей: 1) Определил скорость записи на жесткий диск. а) замерил вермя выполнения цикла, кучу раз писавшего на винч файл размером N байт; б) замерил вермя выполнения аналогичного цикла, кучу раз писавшего на винч файл размером 2N байт; в) решил систему уравнений и получил время записи N байт на винч; г) поделил и поулчил скорость. 2) Оценил время свопинга 4 килобайтной страницы (вроде как в винде такая страница): а) указал маленькое рабочее множество процесса с помощью SetProcessWorkingSetSize(...); б) выделил большой кусок памяти; в) засек время; г) заполнял его фигней много раз; д) определил время, потраченное на запись фигни; е) поделил на что надо и получил приближенное время свопинга страницы, если все шло как задумано и ОСь что-то выгружала, естественно, получено грубое приближение. 3) Вычислил время свопинга для страниц 2 и 8 кб: a) вычил из полученной оценки времени свопинга 4 кб страницы время, необходимое для записи 4 кб данных на диск (полудено из скорости записи). Получена константа (точнее, некое значение мало изменяющейся функции) равная времени, необходммому на внесение изменений во всяких системных таблицах, позиционирование головки диска и др.; б) прибавил к времени записи 2 и 8 кб данных (вычислено из скорости) полученную константу и получил ответ (для 4 кб ответ был готов экспериментально). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2006, 19:59 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34151430&tid=2029964]: |
0ms |
get settings: |
9ms |
get forum list: |
24ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 274ms |
| total: | 461ms |

| 0 / 0 |
