Название имхо неудачное, т.к. этому самому And More посвящена бОльшая (и самая интересная) часть статьи, "In memories of SetProcessWorkingSetSize" подошло бы лучше. Почему так и просто освежить память про "что все эти столбцы в TaskManager значат???" — тынц по ссылке, если ещё не.
Статья не затрагивает ничего специфичного для шарпа / CLR, так что слегка неформат. Но поправить легко
.
S>На этот раз — Windows 10 Memory Compression And More от Alois Kraus.
S>Название имхо неудачное, т.к. этому самому And More посвящена бОльшая (и самая интересная) часть статьи, "In memories of SetProcessWorkingSetSize" подошло бы лучше. Почему так и просто освежить память про "что все эти столбцы в TaskManager значат???" — тынц по ссылке, если ещё не.
S>Статья не затрагивает ничего специфичного для шарпа / CLR, так что слегка неформат. Но поправить легко S>Где подвох?
Здравствуйте, Sharov, Вы писали:
S>На вскидку, выделенное
Ага. Осталось самое интересное: что не так с замерами и как сделать боль-менее корректно.
S>А дядька глубоко копает
За то и ценится.
Re[3]: Минутка хардкора-2: Alois Kraus: что с памятью твоей?
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Sharov, Вы писали:
S>>На вскидку, выделенное S>Ага. Осталось самое интересное: что не так с замерами и как сделать боль-менее корректно.
А можно узнать, что именно значит "Ага"? Мне вот выделенное как-раз не странно. Мне странно что 1Гиг выделить быстрее чем 1Мб если измерять во времени на ячейку массива.
Здравствуйте, samius, Вы писали: S>А можно узнать, что именно значит "Ага"? Мне вот выделенное как-раз не странно. S>Мне странно что 1Гиг выделить быстрее чем 1Мб если измерять во времени на ячейку массива.
Дык ничего странного,
спойлер
под капотом — самый обычный VirtualAlloc.
Т.е. физическая память мапится только при непосредственном обращении к странице.
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Sharov, Вы писали:
S>>На вскидку, выделенное S>Ага. Осталось самое интересное: что не так с замерами и как сделать боль-менее корректно.
А что не так с выделенным, кроме того, что непонятно, в чем смысл такой метрики?
В простой модели время аллокации = (накладные расходы менеджера памяти и VirtualAlloc) + (время на коммит страниц) + (время на зануление) = C + mN + lN = C + kN. Если C >> k, то и получится, что чем большим куском выделяем, тем больше "попугаев" намеряем.
В реале, видимо, при больших размерах добавляются еще расходы на своп, отсюда и падение "попугаев" в 3-м тесте.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[5]: Минутка хардкора-2: Alois Kraus: что с памятью твоей?
Здравствуйте, Sinix, Вы писали: S>Здравствуйте, samius, Вы писали: S>Дык ничего странного,
спойлер
S>под капотом — самый обычный VirtualAlloc. S>Т.е. физическая память мапится только при непосредственном обращении к странице.
Именно эта мысль побудила меня запустить пример у себя. При обращении к содержимому (что в начале массива, что в конце) заметных отличий в замере не обнаружил. То ли в середине массива не пробовал, то ли не умею обращаться к содержимому. Не исключаю что оптимизатор мои обращения соптимизячил.
Re[6]: Минутка хардкора-2: Alois Kraus: что с памятью твоей?
S>>Т.е. физическая память мапится только при непосредственном обращении к странице. S>При обращении к содержимому (что в начале массива, что в конце) заметных отличий в замере не обнаружил. S>То ли в середине массива не пробовал.
Ага, оно. Размер страницы — 4кб. По ссылкам расписано лучше
Re[4]: Минутка хардкора-2: Alois Kraus: что с памятью твоей?
L>А что не так с выделенным, кроме того, что непонятно, в чем смысл такой метрики? L>В реале, видимо, при больших размерах добавляются еще расходы на своп, отсюда и падение "попугаев" в 3-м тесте.
Здравствуйте, Sinix, Вы писали:
S>Неа, всё куда проще. Меряется не то и не так. Вот тут подробней.
Куда проще-то? Ты хочешь сказать, что new long[...] вообще память не трогает, а лишь резервируется страницы? В принципе, возможно, с учетом того, что ОС сама страницы зануляет. Правда, тогда уменьшение "попугаев" на 4Gb выглядит странно.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[6]: Минутка хардкора-2: Alois Kraus: что с памятью твоей?
Здравствуйте, Lexey, Вы писали:
L>Куда проще-то? Ты хочешь сказать, что new long[...] вообще память не трогает, а лишь резервируется страницы? В принципе, возможно, с учетом того, что ОС сама страницы зануляет. Правда, тогда уменьшение "попугаев" на 4Gb выглядит странно.
Да ёкылымыны! Я прям не знаю, как ещё подсказку дать Меряется _не_то_ и _не_так_.
MEM_COMMIT
Allocates memory charges (from the overall size of memory and the paging files on disk) for the specified reserved memory pages. The function also guarantees that when the caller later initially accesses the memory, the contents will be zero. Actual physical pages are not allocated unless/until the virtual addresses are actually accessed.
Погрешность измерения + константная стоимость резервирования _одного_ большого блока VA (для кучи последовательных аллокаций всё веселее) и имеем что имеем.
last hint: что, если обратиться к каждой странице?
Re[7]: Минутка хардкора-2: Alois Kraus: что с памятью твоей?
Здравствуйте, Lexey, Вы писали:
L>Мда... То, что меряется "хрен знает что", я еще в первом своем посте написал. Вопрос был только в том, почему в 3-м тесте результат хуже, чем во 2-м.
Ну так ответы читать надо
Погрешность измерения + константная стоимость резервирования _одного_ большого блока VA ... и имеем что имеем.
In my tests, for sizes ranging from 8 MB to 32 MB, the cost for a new[]/delete[] pair averaged about 7.5 μs (microseconds), split into ~5.0 μs for the allocation and ~2.5 μs for the free. For the large allocations I was testing the size of the allocation did not seem to significantly affect the results.
Re[9]: Минутка хардкора-2: Alois Kraus: что с памятью твоей?
Здравствуйте, Sinix, Вы писали:
L>>Мда... То, что меряется "хрен знает что", я еще в первом своем посте написал. Вопрос был только в том, почему в 3-м тесте результат хуже, чем во 2-м. S>Ну так ответы читать надо
С тем же успехом могу сказать, что вопросы читать надо. Я не вижу объяснения этого момента в тех ответах, которые были.
S>
S>Погрешность измерения + константная стоимость резервирования _одного_ большого блока VA ... и имеем что имеем.
3мс у тебя и 11 у samius'а — не дохрена ли для погрешности (если считать, что стоимость резервирования для 1 Gb и 4Gb одинакова)?
S>Ссылку с пруфами давал дважды, вот кусок S>
S>In my tests, for sizes ranging from 8 MB to 32 MB, the cost for a new[]/delete[] pair averaged about 7.5 μs (microseconds), split into ~5.0 μs for the allocation and ~2.5 μs for the free. For the large allocations I was testing the size of the allocation did not seem to significantly affect the results.
Так это как раз противоречит наблюдаемой разнице для 1 и 4 Gb.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[10]: Минутка хардкора-2: Alois Kraus: что с памятью твоей?
Здравствуйте, Lexey, Вы писали: L>С тем же успехом могу сказать, что вопросы читать надо.
Туше L>Я не вижу объяснения этого момента в тех ответах, которые были. L>3мс у тебя и 11 у samius'а — не дохрена ли для погрешности (если считать, что стоимость резервирования для 1 Gb и 4Gb одинакова)?
С учётом стоимости собственно обращений к страницам — разбросом можно смело пренебречь и брать за константу.
Готовые замеры (без учёта стоимости заполнения пула пустых страниц):
Здравствуйте, Lexey, Вы писали:
L>Здравствуйте, Sinix, Вы писали:
S>>С учётом стоимости собственно обращений к страницам — разбросом можно смело пренебречь и брать за константу.
L>ОК. Не понял только, почему у тебя PageSize = 4096 / 2, а не 4096 / sizeof(long).
Можно еще проще -- += Environment.SystemPageSize
Кодом людям нужно помогать!
Re[13]: Минутка хардкора-2: Alois Kraus: что с памятью твоей?