Bill Fischofer(Bill-Fischofer-Linaro) replied on github web page:

@@ -212,6 +214,55 @@ void shmem_test_basic(void)
        CU_ASSERT(0 == odp_shm_free(shm));
+ * maximum size reservation
+ */
+static void shmem_test_max_reserve(void)
+       odp_shm_capability_t capa;
+       odp_shm_t shm;
+       uint64_t size, align;
+       uint8_t *data;
+       uint64_t i;
+       memset(&capa, 0, sizeof(odp_shm_capability_t));
+       CU_ASSERT_FATAL(odp_shm_capability(&capa) == 0);
+       CU_ASSERT(capa.max_blocks > 0);
+       size  = capa.max_size;
+       align = capa.max_align;
+       /* Assuming that system has at least MAX_MEMORY_USED bytes available */
+       if (capa.max_size == 0 || capa.max_size > MAX_MEMORY_USED)
+               size = MAX_MEMORY_USED;

If the implementation doesn't have a specific predefined upper limit then it 
should return `capa.max_size == 0`. If it says it has a non-zero upper limit 
then if it's unable to provide that limit that's a failure. Otherwise what's 
the point of having a specified limit?

> Petri Savolainen(psavol) wrote:
> I'll add comment about zero value. Although, I already changed documentation 
> to require param_init() call and say that don't change values that you are 
> not going to use (init sets it to zero).

>> Petri Savolainen(psavol) wrote:
>> OK

>>> Petri Savolainen(psavol) wrote:
>>> Very large align could result very large allocation and thus again system 
>>> run out of memory (e.g. 1TB align => >1TB alloc).
>>> OK. I'll change align max to be a power of two. 

>>>> Petri Savolainen(psavol) wrote:
>>>> Since actual amount of available memory typically depends on system load. 
>>>> SHM implementation may not have a limit (max_size==0), or limit may be due 
>>>> to address space (e.g. 40bit == 1TB). System might not have always the max 
>>>> amount (e.g. 1TB) available. I limit validation test to assume that at 
>>>> least 100MB should be always available.

>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>> @muvarov `odp_shm_capability()` already tells the application the largest 
>>>>> contiguous size it can reserve (`max_size`) and the maximum number of 
>>>>> reserves it can do (`max_blocks`). This is just hinting to the 
>>>>> implementation the total size of all reserves the application will do.

>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>> An additional `printf()` giving a bit more detail (i.e., `i` value) 
>>>>>> would be useful here.

>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>> Shouldn't `MEGA` be a power of 2 for alignment purposes? I.e., 1024 x 
>>>>>>> 1024 rather than 1000 x 1000? And if the implementation supports an 
>>>>>>> even higher `max_align` why not test that as well?

>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>> Why do you want to limit the size in a test that named 
>>>>>>>> `shmem_test_max_reserve()`? If `capa.max_size == 0` then you have to 
>>>>>>>> pick a specific target, but if it's non-zero why wouldn't you want to 
>>>>>>>> try to reserve that much to see if the limit is true?

>>>>>>>>> muvarov wrote
>>>>>>>>> 0 - means not specified. And what about continuous of memory chunks? 
>>>>>>>>> Requesting  one big continues shared memory chunk is not general 
>>>>>>>>> solution.
updated_at 2018-02-02 12:43:25

Reply via email to