[dpdk-dev] [PATCH v2 1/1] fbarray: get fbarrays from containerized secondary
Yasufumi Ogawa
yasufum.o at gmail.com
Tue Jul 9 12:22:13 CEST 2019
Hi Anatoly,
On 2019/07/05 17:53, Burakov, Anatoly wrote:
> On 16-Apr-19 4:43 AM, ogawa.yasufumi at lab.ntt.co.jp wrote:
>> From: Yasufumi Ogawa <ogawa.yasufumi at lab.ntt.co.jp>
>>
>> In secondary_msl_create_walk(), it creates a file for fbarrays with its
>> PID for reserving unique name among secondary processes. However, it
>> does not work if secondary is run as app container because each of
>> containerized secondary has PID 1. To reserve unique name, use hostname
>> instead of PID if the value is 1.
>>
>> Cc: stable at dpdk.org
>>
>> Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi at lab.ntt.co.jp>
>> ---
>
> I'm not too well versed in containers - is this hostname 1) always set,
> and 2) always unique?
For docker, 1) hostname is always set. 2) The hostname is decided as
short form of container ID, so it might not be unique even though very
low possibility.
I found that we can get whole container ID in `/proc/self/cgroup` as
discussed [1]. I think using hostname is reasonable way without running
many secondary processes. However, it might be better to use 64 digits
full container ID instead of 12 digits short ID if ensure uniqueness
strongly. What do yo think?
[1]
https://forums.docker.com/t/get-a-containers-full-id-from-inside-of-itself/37237
>
> <snip>
>
>> + if (getpid() == 1) {
>> + FILE *hn_fp;
>> + hn_fp = fopen("/etc/hostname", "r");
>> + if (hn_fp == NULL) {
>> + RTE_LOG(ERR, EAL,
>> + "Cannot open '/etc/hostname' for secondary\n");
>> + return -1;
>> + }
>> +
>> + /* with docker, /etc/hostname just has one entry of hostname */
>> + if (fscanf(hn_fp, "%s", proc_id) == EOF)
>> + return -1;
>
> Wouldn't an error in fscanf() leak the file handle? I think you need to
> fclose() before checking the result.
I would like to fix it.
Regards,
Yasufumi
>
>> + fclose(hn_fp);
>> + } else
>> + sprintf(proc_id, "%d", (int)getpid());
>> +
>> + snprintf(name, RTE_FBARRAY_NAME_LEN, "%s_%s",
>> + primary_msl->memseg_arr.name, proc_id);
>> ret = rte_fbarray_init(&local_msl->memseg_arr, name,
>> primary_msl->memseg_arr.len,
>>
>
>
More information about the dev
mailing list