I copied your comment to the issue thread.

Maybe it is best to hold the conversation there as to leave a better trace.

> On 13 Oct 2021, at 13:29, Henrik Sperre Johansen 
> <henrik.s.johan...@veloxit.no> wrote:
> 
> Seens it used to be in the «old» PharoVM before the reconcilliation:
> https://forum.world.st/external-semaphores-again-tp4712934p4713396.html
> 
> Maybe it’s still possible to find it in the git history of the current 
> pharovm repository?
> 
> Cheers,
> Henry
> 
> On Wednesday, October 13, 2021, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> Hi Henry,
> 
> Thanks for your reply.
> 
> I created an issue: https://github.com/pharo-project/pharo/issues/10156
> 
> Can we still find the file 'sqExternalSemaphores.c' from the old emails ?
> 
> Sven
> 
> > On 12 Oct 2021, at 19:20, Henrik Sperre Johansen 
> > <henrik.s.johan...@veloxit.no> wrote:
> > 
> > I believe Igor Stasenko made changes so signals could no longer get lost, 
> > but I’m not sure it ever got integrated in Cog…
> > 
> > https://forum.world.st/Issue-5965-in-pharo-Can-t-allocate-semaphores-VirtualMachine-maxExternalSemaphores-aSize-Not-enough--tp4631607p4632388.html
> > 
> > Maybe worth revisiting/reviewing?
> > If it works, the limitation would be gone, and the image warnings could be 
> > removed with no ill side-effects.
> > 
> > Cheers,
> > Henry
> > 
> >> On 12 Oct 2021, at 18:55, Henrik Sperre Johansen 
> >> <henrik.s.johan...@veloxit.no> wrote:
> >> 
> >> Hi Sven - you’re correct the main intent was to make it clear one should 
> >> not really be setting this from the image during runtime - and make it as 
> >> obvious as possible when it had.
> >> 
> >> The way I remember it, the Error was only raised if the image is in 
> >> development mode - so a developer running into this, would have the limit 
> >> raised, but also get a debugger (which is hard to ignore) explaining the 
> >> issue, while in runtime mode, the SystemNotification would get handled by 
> >> logging so it would at least be possible to spot that it had happened.
> >> 
> >> If there’s a less confusing way to achieve that it would be a good thing, 
> >> but I’m not sure removing all warnings would be the best way, as the 
> >> related i/o problems would be nearly impossible to determine the root 
> >> cause of.
> >> 
> >> Why forked? No idea/can’t remember…
> >> 
> >> Cheers,
> >> Henry
> >> 
> >>> On 12 Oct 2021, at 16:01, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> >>> 
> >>> Hi,
> >>> 
> >>> The ExternalSemaphoreTable is an important resource since it holds 3 
> >>> Semaphores per Socket (network connection). The size of 
> >>> ExternalSemaphoreTable determines how many such resources can be used 
> >>> concurrently.
> >>> 
> >>> VM parameter 49 holds this limit, it is accessed by 
> >>> VirtualMachine>>#maxExternalSemaphores. The default for Pharo 9 seems to 
> >>> be 256 currently.
> >>> 
> >>> There is a method VirtualMachine>>#maxExternalSemaphoresSilently: that 
> >>> can be used to set this limit higher. This seems to work.
> >>> 
> >>> Now, there are some limitations here: the number must be a power of 2, 
> >>> higher that the one set before and lower than 64K. BTW the number of file 
> >>> descriptors for files and sockets is also limited by the OS for its 
> >>> processes.
> >>> 
> >>> Also, while growing the table, the Semaphores become unavailable to the 
> >>> VM for a very short period of time, so they could miss signals, leading 
> >>> to IO issues.
> >>> 
> >>> For this reason, it seems that the design goal was to not allow this to 
> >>> grow during normal use, only during startup or upfront configuration.
> >>> 
> >>> Now comes the weird thing: the implementation/code of 
> >>> VirtualMachine>>#maxExternalSemaphores:
> >>> 
> >>> This is the method called when the current table is too small and when it 
> >>> wants to grow larger than the current 
> >>> VirtualMachine>>#maxExternalSemaphores.
> >>> 
> >>> The implementation calls #maxExternalSemaphoresSilently: in a forked 
> >>> thread, after signalling a SystemNotification with a full explanation. 
> >>> But why should this be forked in the first place ?
> >>> 
> >>> Then in the main thread, it signals an error ! Presumably because the 
> >>> design goals mentioned before.
> >>> 
> >>> These two actions are in conflict.
> >>> 
> >>> All this is probably the result of well meant evolution and refactoring, 
> >>> but it is quite confusing.
> >>> 
> >>> My first idea would be: let the caller raise the error and don't try 
> >>> raising the limit, remove the current implementation and replace it by 
> >>> what is now #maxExternalSemaphoresSilently:
> >>> 
> >>> What do you think ?
> >>> 
> >>> Sven
> >>> 
> >>> 
> >>> 
> >>> 

Reply via email to