OberonCore https://forum.oberoncore.ru/ |
|
#012 Linux Kernel: механизм выделения памяти https://forum.oberoncore.ru/viewtopic.php?f=134&t=6490 |
Страница 1 из 1 |
Автор: | Евгений Темиргалеев [ Воскресенье, 24 Ноябрь, 2019 22:40 ] |
Заголовок сообщения: | #012 Linux Kernel: механизм выделения памяти |
По каким критериям выбирался адрес 65536, почему тут не 0? Значение 0 означает, что система сама подбирает начальный адрес, так вызывается HeapAlloc в AllocModMem. Ненулевое значение означает просьбу выделить страницы с указанного адреса при возможности, при этом предыдущая разметка на этих страницах отменяется (https://www.gnu.org/software/libc/manua ... 002fO.html). Код: PROCEDURE AllocHeapMem (size: INTEGER; VAR c: Cluster);
... IF size < N THEN adr := HeapAlloc(65536, N, prot) END; IF adr = 0 THEN adr := HeapAlloc(65536, size, prot); ... PROCEDURE HeapAlloc (adr: Libc.PtrVoid; size: INTEGER; prot: SET): Libc.PtrVoid; VAR x: Libc.PtrVoid; BEGIN x := Libc.mmap(adr, size, prot, Libc.MAP_PRIVATE + Libc.MAP_ANON, zerofd, 0); IF x = Libc.MAP_FAILED THEN x := Libc.NULL ELSE ASSERT(size MOD 4 = 0, 100); Erase(x, size DIV 4) END; RETURN x END HeapAlloc; |
Автор: | Alexander Shiryaev [ Понедельник, 25 Ноябрь, 2019 00:42 ] |
Заголовок сообщения: | Re: Linux Kernel: механизм выделения памяти |
Если указать 0, то BlackBox может не работать. ОС тогда выделяет память с адресами >= 80000000H (т. е. с отрацательными значениями INTEGER), и BlackBox наверное почему-то с такими адресами работает неправильно. Можно запустить какой-нибудь тест на работу сборщика мусора, например, и проверить. Поведение одинаковое и в Linux, и в OpenBSD. Windows начинает выдавать память с адресами >0 |
Автор: | Alexander Shiryaev [ Понедельник, 25 Ноябрь, 2019 00:50 ] |
Заголовок сообщения: | Re: Linux Kernel: механизм выделения памяти |
В AllocModMem 0, потому что с теми областями проблем нет, они могут быть любыми адресами. |
Автор: | Евгений Темиргалеев [ Четверг, 28 Ноябрь, 2019 11:59 ] |
Заголовок сообщения: | Re: Linux Kernel: механизм выделения памяти |
Вопрос подтормаживания пока сняли увеличением размера кластера с 256 кБ до 32 МБ. |
Автор: | Alexander Shiryaev [ Пятница, 29 Ноябрь, 2019 17:04 ] |
Заголовок сообщения: | Re: Linux Kernel: механизм выделения памяти |
Иван уже недавно увеличивал N в AllocHeapMem в ядре для Linux в 4 раза (с 65536 до 65536 * 4) |
Автор: | Иван Денисов [ Суббота, 30 Ноябрь, 2019 06:06 ] |
Заголовок сообщения: | Re: Linux Kernel: механизм выделения памяти |
32 Мб — это прямо жестко. Но для десктопного приложений, где память не жалко, вполне нормальное решение. Мы не стали делать больше 256 кб, чтобы сохранить "вау-эффект", когда ББ показывает при запуске, что потребляет меньше МБ памяти. Также для серверных приложений, которые запускаться баллансировщиком могут в больших количествах, не стоит 32 Мб делать... |
Автор: | Alexander Shiryaev [ Суббота, 30 Ноябрь, 2019 11:50 ] |
Заголовок сообщения: | Re: Linux Kernel: механизм выделения памяти |
Иван Денисов писал(а): ...Но для десктопного приложений, где память не жалко, вполне нормальное решение... Вложение:
|
Автор: | Иван Денисов [ Суббота, 30 Ноябрь, 2019 13:03 ] |
Заголовок сообщения: | Re: Linux Kernel: механизм выделения памяти |
Вот 700 кб, это отлично. Так что пусть люди под свою задачу увеличивают. 256кб по-умолчанию — вполне нормально. |
Автор: | Борис Рюмшин [ Суббота, 30 Ноябрь, 2019 18:12 ] |
Заголовок сообщения: | Re: Linux Kernel: механизм выделения памяти |
Иван Денисов писал(а): Вот 700 кб, это отлично. Так что пусть люди под свою задачу увеличивают. 256кб по-умолчанию — вполне нормально. Ну вот и увеличили. Либо надо более гибкий механизм выделения предусматривать в дальнейшем, либо одно из двух. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |