On Tue, 21 Jan 2020 03:13:20 +0100, Keyon Jie wrote:
On 2020/1/20 下午8:44, Takashi Iwai wrote:
Currently, the available buffer allocation size for a PCM stream depends on the preallocated size; when a buffer has been preallocated, the max buffer size is set to that size, so that application won't re-allocate too much memory. OTOH, when no preallocation is done, each substream may allocate arbitrary size of buffers as long as snd_pcm_hardware.buffer_bytes_max allows -- which can be quite high, HD-audio sets 1GB there.
It means that the system may consume a high amount of pages for PCM buffers, and they are pinned and never swapped out. This can lead to OOM easily.
For avoiding such a situation, this patch adds the upper limit per card. Each snd_pcm_lib_malloc_pages() and _free_pages() calls are tracked and it will return an error if the total amount of buffers goes over the defined upper limit. The default value is set to 32MB,
Is this typo here? In the patch, "max_alloc_per_card = 32UL * 1024UL * 1024UL * 1024UL", should be 32GB?
Oh yes, it's an obvious typo. Fixed now.
Thanks!
Takashi