Size: a a a

2021 February 21

EP

Egor Pugin in dlang.ru
Евгений
Я отключил гвард пейдж, потому что на моей системе стоит лимит, который мне было лень повышать.
что за лимит?
источник

OB

Oleg B in dlang.ru
Egor Pugin
это рассказ, а не доказательство, дальше желающие сами подумают, сделают выводы
твоя история с файберами — история непонимания применения
я подумал и сделал вывод
источник

OB

Oleg B in dlang.ru
это не замена потоков
источник

OB

Oleg B in dlang.ru
всё зависит от задачи
источник

Е

Евгений in dlang.ru
Egor Pugin
что за лимит?
Максимальное количество mmap-нутых регионов.
$ sysctl vm.max_map_count
vm.max_map_count = 65530
источник

EP

Egor Pugin in dlang.ru
Евгений
Максимальное количество mmap-нутых регионов.
$ sysctl vm.max_map_count
vm.max_map_count = 65530
хорошо, а гвард пейдж чем мешает? или тут происходит уже реальное выделение 4мб?
источник

Е

Евгений in dlang.ru
Oleg B
это не замена потоков
Более того, файберы и потоки - друзья навек :)
Несколько потоков, каждый вертит кучку файберов.
источник

Е

Евгений in dlang.ru
Egor Pugin
хорошо, а гвард пейдж чем мешает? или тут происходит уже реальное выделение 4мб?
Ну так он через mmap создается. По крайней мере на линупсах. Не знаю как в windows.
источник

EP

Egor Pugin in dlang.ru
Евгений
Ну так он через mmap создается. По крайней мере на линупсах. Не знаю как в windows.
я не очень тут пока понимаю, что mmap привносит?
источник

Е

Евгений in dlang.ru
Вот, даже в доках есть инфа на эту тему:
Beware that using this will increase the number of mmaped regions on platforms using mmap so an OS-imposed limit may be hit.
источник

Е

Евгений in dlang.ru
Egor Pugin
я не очень тут пока понимаю, что mmap привносит?
Каждый файбер создает защищенный mmap-регион. Их общее количество ограничено системой.
источник

EP

Egor Pugin in dlang.ru
Евгений
Каждый файбер создает защищенный mmap-регион. Их общее количество ограничено системой.
а без гвард пейджа этого нет?
источник

Е

Евгений in dlang.ru
Egor Pugin
а без гвард пейджа этого нет?
так точно.
источник

Е

Евгений in dlang.ru
Повторюсь. Это в линупсе. В винде не знаю.
источник

Е

Евгений in dlang.ru
И это специфика именно дешных файберов.
источник

EP

Egor Pugin in dlang.ru
Евгений
так точно.
а почему тогда пример работает? Создаются пустые бесстековые фиберы? Если туда добавить 1 вызов, чтобы стек начал использоваться? (и проверить, что оптимизация этот вызов не удаляет)
источник

Е

Евгений in dlang.ru
Egor Pugin
а почему тогда пример работает? Создаются пустые бесстековые фиберы? Если туда добавить 1 вызов, чтобы стек начал использоваться? (и проверить, что оптимизация этот вызов не удаляет)
Какой пример? В моем примере размер области защиты равен 0.
источник

Е

Евгений in dlang.ru
new Fiber(&worker, stackSize, 0);
последний параметр
источник

EP

Egor Pugin in dlang.ru
Евгений
Какой пример? В моем примере размер области защиты равен 0.
а мы защищённый mmap регион будем читать или писать, нас с SIGSEGV выбьет?
источник

Е

Евгений in dlang.ru
Вот тут вызывается mprotect() если размер защитной страницы больше нуля:
https://github.com/dlang/druntime/blob/v2.095.0/src/core/thread/fiber.d#L1014
источник