Кое от тези обаждания е средно по-бързо? Чувал съм, че mmap
е по-бърз за по-малки разпределения, но не съм чувал сравнение на нито едно от двете. Всякаква информация за производителността за тях би била добра.
mmap срещу sbrk, сравнение на производителността
Отговори (1)
Трябва да маркирате това с конкретно изпълнение (като linux
), тъй като отговорът със сигурност варира в зависимост от изпълнението. Засега ще приема Linux, тъй като е най-популярният.
С това казано, brk
на теория е по-оптимизиран и на практика работи с около 10% по-бързо на моята машина. Разпределяйки една страница, това са моментите, които получавам:
brk
: мин. 2550 цикъла, типично 2650 цикълаmmap
: мин. 2700 цикъла, типично 2800 цикъла
Спомням си, че чух нещо от рода на brk
, че може да пропусне заключването на mmap
семафора, което би обяснило несъответствието.
Забележка: Актуализирах тези времена, след като коригирах моя тест, за да направя фиктивни повиквания преди отчитането на времето, за да се уверя, че целият код ще бъде в кеша.
person
R.. GitHub STOP HELPING ICE
schedule
01.04.2011
Колкото и да е странно за мен mmap всъщност работеше по-бързо от sbrk, но отново с sbrk беше възможно да се запази паметта непрекъсната.
- person Jesus Ramos; 04.04.2011
Може би
sbrk
на вашата система извършва някакво заключване или отчитане на потребителско пространство или дори извиква brk
syscall два пъти. (веднъж, за да получите стария brk
и отново, за да настроите новия...?) Ако внедрявате malloc
, не бих разчитал на sbrk
на системната библиотека, а направете сами системното извикване brk
.
- person R.. GitHub STOP HELPING ICE; 04.04.2011
В крайна сметка използвах mmap като основен начин за вземане на памет от системата и използване на sbrk като резервно копие, в случай че получа MAP_FAILED, може да опитам да използвам извикването brk вместо това, за да видя каква ще бъде производителността на това.
- person Jesus Ramos; 04.04.2011
sbrk
(или още по-лошоbrk
) в програма, която може да извикаmalloc
. И тъй като всяка стандартна библиотечна функция може да извикаmalloc
, това означава, че не можете да използвате стандартната библиотека, точка. - person R.. GitHub STOP HELPING ICE   schedule 01.04.2011