DPDK usage discussions
 help / color / mirror / Atom feed
From: Alain Gautherot <alain@edicogenome.com>
To: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
Cc: "users@dpdk.org" <users@dpdk.org>
Subject: Re: [dpdk-users] Using DPDK for contiguous physical memory allocation
Date: Mon, 25 Jan 2016 22:51:01 +0000	[thread overview]
Message-ID: <BY2PR07MB0576FBFD8C466E68EEF8E8BB1C70@BY2PR07MB057.namprd07.prod.outlook.com> (raw)
In-Reply-To: <56A6A138.3040305@intel.com>

Sergio,

Yes, I made that change and am now using the following:
    size_t   i;
    for (i = 1; i <= 200; ++i) {
      size_t  allocsize = (i << 30) / 10U;

      printf("  Allocating %3.1fGB: ", ((float )i)/10.0f);
      fflush(stdout);
      void*  ptr = rte_malloc(NULL, allocsize, 0U);
      if (ptr != NULL) {
        printf("PASS\n");
        rte_free(ptr);
      } else {
        printf("fail\n");
      }
    }
    printf("Done\n");


That seems to be running fine now with DPDK 2.2.0 (was not with 2.0.0).

Thanks,
Alain

-----Original Message-----
From: Sergio Gonzalez Monroy [mailto:sergio.gonzalez.monroy@intel.com] 
Sent: Monday, January 25, 2016 2:27 PM
To: Alain Gautherot <alain@edicogenome.com>
Cc: users@dpdk.org
Subject: Re: [dpdk-users] Using DPDK for contiguous physical memory allocation

Hi Alain,

On 25/01/2016 21:02, Alain Gautherot wrote:
> [resend with enclosed log instead of attachment]
>
> Hello Sergio,
>
> I'm running the following command
>
>   	$ ./build/helloworld -c fff -n 1
>
> And get the attached log (hope it goes through). Using "-n 2" (I'm not sure how many channels) gives the same SIGSEGV error.
>
> Here's the configuration:
>
> $ numactl -H
> 	available: 1 nodes (0)
> 	node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11
> 	node 0 size: 65431 MB
> 	node 0 free: 62040 MB
> 	node distances:
> 	node   0
> 		0:  10
>
> $ cat /proc/meminfo
> 	MemTotal:       65867360 kB
> 	MemFree:        63529276 kB
> 	Buffers:           93996 kB
> 	Cached:           562160 kB
> 	SwapCached:            0 kB
> 	Active:           314816 kB
> 	Inactive:         483752 kB
> 	Active(anon):     144372 kB
> 	Inactive(anon):       28 kB
> 	Active(file):     170444 kB
> 	Inactive(file):   483724 kB
> 	Unevictable:           0 kB
> 	Mlocked:               0 kB
> 	SwapTotal:             0 kB
> 	SwapFree:              0 kB
> 	Dirty:                12 kB
> 	Writeback:             0 kB
> 	AnonPages:        144184 kB
> 	Mapped:            49004 kB
> 	Shmem:               280 kB
> 	Slab:              77572 kB
> 	SReclaimable:      31580 kB
> 	SUnreclaim:        45992 kB
> 	KernelStack:        2904 kB
> 	PageTables:         7744 kB
> 	NFS_Unstable:          0 kB
> 	Bounce:                0 kB
> 	WritebackTmp:          0 kB
> 	CommitLimit:    32421680 kB
> 	Committed_AS:     383316 kB
> 	VmallocTotal:   34359738367 kB
> 	VmallocUsed:      378992 kB
> 	VmallocChunk:   34359352736 kB
> 	HardwareCorrupted:     0 kB
> 	AnonHugePages:     73728 kB
> 	HugePa	ges_Total:     500
> 	HugePages_Free:        9
> 	HugePages_Rsvd:        9
> 	HugePages_Surp:        0
> 	Hugepagesize:       2048 kB
> 	DirectMap4k:        4096 kB
> 	DirectMap2M:     2027520 kB
> 	DirectMap1G:    65011712 kB
>
>
> Log:
> 	EAL: Detected lcore 0 as core 0 on socket 0
> 	EAL: Detected lcore 1 as core 1 on socket 0
> 	EAL: Detected lcore 2 as core 2 on socket 0
> 	EAL: Detected lcore 3 as core 3 on socket 0
> 	EAL: Detected lcore 4 as core 4 on socket 0
> 	EAL: Detected lcore 5 as core 5 on socket 0
> 	EAL: Detected lcore 6 as core 0 on socket 0
> 	EAL: Detected lcore 7 as core 1 on socket 0
> 	EAL: Detected lcore 8 as core 2 on socket 0
> 	EAL: Detected lcore 9 as core 3 on socket 0
> 	EAL: Detected lcore 10 as core 4 on socket 0
> 	EAL: Detected lcore 11 as core 5 on socket 0
> 	EAL: Support maximum 128 logical core(s) by configuration.
> 	EAL: Detected 12 lcore(s)
> 	EAL: Setting up memory...
> 	EAL: Ask a virtual area of 0x200000 bytes
> 	EAL: Virtual area found at 0x7fd26c800000 (size = 0x200000)
> 	EAL: Ask a virtual area of 0x35800000 bytes
> 	EAL: Virtual area found at 0x7fd236e00000 (size = 0x35800000)
> 	EAL: Requesting 429 pages of size 2MB from socket 0
> 	EAL: TSC frequency is ~2400001 KHz
> 	EAL: Master lcore 0 is ready (tid=6cd40880;cpuset=[0])
> 	PMD: ENICPMD trace: rte_enic_pmd_init
> 	EAL: lcore 6 is ready (tid=331f7700;cpuset=[6])
> 	EAL: lcore 5 is ready (tid=33bf8700;cpuset=[5])
> 	EAL: lcore 9 is ready (tid=313f4700;cpuset=[9])
> 	EAL: lcore 11 is ready (tid=2fff2700;cpuset=[11])
> 	EAL: lcore 4 is ready (tid=345f9700;cpuset=[4])
> 	EAL: lcore 8 is ready (tid=31df5700;cpuset=[8])
> 	EAL: lcore 1 is ready (tid=363fc700;cpuset=[1])
> 	EAL: lcore 10 is ready (tid=309f3700;cpuset=[10])
> 	EAL: lcore 3 is ready (tid=34ffa700;cpuset=[3])
> 	EAL: lcore 2 is ready (tid=359fb700;cpuset=[2])
> 	EAL: lcore 7 is ready (tid=327f6700;cpuset=[7])
> 	EAL: PCI device 0000:01:00.0 on NUMA socket 0
> 	EAL:   probe driver: 8086:1521 rte_igb_pmd
> 	EAL:   Not managed by a supported kernel driver, skipped
> 	EAL: PCI device 0000:01:00.1 on NUMA socket 0
> 	EAL:   probe driver: 8086:1521 rte_igb_pmd
> 	EAL:   Not managed by a supported kernel driver, skipped
> 	EAL: PCI device 0000:03:00.0 on NUMA socket 0
> 	EAL:   probe driver: 8086:10fb rte_ixgbe_pmd
> 	EAL:   Not managed by a supported kernel driver, skipped
> 	EAL: PCI device 0000:03:00.1 on NUMA socket 0
> 	EAL:   probe driver: 8086:10fb rte_ixgbe_pmd
> 	EAL:   Not managed by a supported kernel driver, skipped
> 	  Allocating 0.1GB: PASS
> 	  Allocating 0.2GB: PASS
> 	  Allocating 0.3GB: PASS
> 	  Allocating 0.4GB: fail
> 	  Allocating 0.5GB: fail
> 	  Allocating 0.6GB: fail
> 	  Allocating 0.7GB: fail
> 	  Allocating 0.8GB: fail
> 	  Allocating 0.9GB: fail
> 	  Allocating 1.0GB: fail
> 	  Allocating 1.1GB: fail
> 	  Allocating 1.2GB: fail
> 	  Allocating 1.3GB: fail
> 	  Allocating 1.4GB: fail
> 	  Allocating 1.5GB: fail
> 	  Allocating 1.6GB: fail
> 	  Allocating 1.7GB: fail
> 	  Allocating 1.8GB: fail
> 	  Allocating 1.9GB: fail
> 	  Allocating 2.0GB: fail
> 	  Allocating 2.1GB: fail
> 	  Allocating 2.2GB:
>
> Thanks,
> Alain
>
> -----Original Message-----
> From: Sergio Gonzalez Monroy [mailto:sergio.gonzalez.monroy@intel.com]
> Sent: Monday, January 25, 2016 5:50 AM
> To: Alain Gautherot <alain@edicogenome.com>; users@dpdk.org
> Subject: Re: [dpdk-users] Using DPDK for contiguous physical memory 
> allocation
>
> On 23/01/2016 00:20, Alain Gautherot wrote:
>> Hello,
>>
>> I came across DPDK in a thread @ http://stackoverflow.com/questions/4401912/linux-contiguous-physical-memory-from-userspace (bottom reply from mrsmith) and wanted to see if I can use rte_malloc() to allocate large blocks of contiguous physical memory (16GB or even 32GB at some point).
>>
>> The platform I'm working on has an FPGA that shares host memory with the x86_64 cores via a QPI link.
>> The FPGA crunches data directly from host memory and uses physical addresses (mostly a QPI limitation, but it is also dictated by performance considerations and the ability to make the best possible use of multiple memory controllers).
>> The data shared is 16GB or up to 32GB and could be provided as multiple descriptors to the FPGA, but that still means that each descriptor is in the order of several GBytes each.
>> I understand that allocation may fail, but is ok for now, since I'm still in the proof-of-concept stage, trying to rule things out.
>>
>> My sample application attempts to allocate memory by chunks of 100MB like so:
>>
>> int main(int argc, char **argv)
>> {
>>     int ret;
>>
>>     ret = rte_eal_init(argc, argv);
>>     if (ret < 0) {
>>       rte_panic("Cannot init EAL\n");
>>     }
>>
>>     int  i;

I get warning with this code. It warns of undefined behavior because of signed integer overflow.
Could you change the above 'int i' to 'size_t i' and run it again?

Sergio
>>     for (i = 1; i <= 100; ++i) {
>>       size_t  allocsize = i * 100*1000*1000;
>>
>>       printf("  Allocating %3.1fGB: ", ((float )i)/10.0f);
>>       fflush(stdout);
>>       void*  ptr = rte_malloc(NULL, allocsize, 0U);
>>       if (ptr != NULL) {
>>         printf("PASS\n");
>>         rte_free(ptr);
>>       } else {
>>         printf("fail\n");
>>       }
>>     }
>>
>>     printf("Done\n");
>>     return 0;
>> }
>>
>> I get a consistent crash @ the 2.2GB mark:
>> (gdb) r -c f -n 4
>> ...
>> EAL: PCI device 0000:06:00.1 on NUMA socket 0
>> EAL:   probe driver: 8086:1521 rte_igb_pmd
>> EAL:   Not managed by a supported kernel driver, skipped
>>     Allocating 0.1GB: fail
>>     Allocating 0.2GB: fail
>>     ...
>>     Allocating 2.0GB: fail
>>     Allocating 2.1GB: fail
>>     Allocating 2.2GB:
>> Program received signal SIGSEGV, Segmentation fault.
>> 0x00000000004c6770 in malloc_elem_init (elem=0x800070eaa880, heap=0x7ffff7fe561c, mz=0x7ffff7fb2c1c, size=2200000064)
>>       at /home/alaing/INTEL/dpdk-2.0.0/lib/librte_malloc/malloc_elem.c:61
>> 61              elem->heap = heap;
>> Missing separate debuginfos, use: debuginfo-install 
>> glibc-2.12-1.149.el6_6.5.x86_64
>> (gdb) bt
>> ...
>> #0  0x00000000004c6770 in malloc_elem_init (elem=0x800070eaa880, heap=0x7ffff7fe561c, mz=0x7ffff7fb2c1c, size=2200000064)
>>       at 
>> /home/alaing/INTEL/dpdk-2.0.0/lib/librte_malloc/malloc_elem.c:61
>> #1  0x00000000004c694e in split_elem (elem=0x7ffff3e00000, 
>> split_pt=0x800070eaa880) at 
>> /home/alaing/INTEL/dpdk-2.0.0/lib/librte_malloc/malloc_elem.c:121
>> #2  0x00000000004c6bda in malloc_elem_alloc (elem=0x7ffff3e00000, size=18446744071614584320, align=64)
>>       at 
>> /home/alaing/INTEL/dpdk-2.0.0/lib/librte_malloc/malloc_elem.c:223
>> #3  0x00000000004c736e in malloc_heap_alloc (heap=0x7ffff7fe561c, type=0x0, size=18446744071614584320, align=64)
>>       at 
>> /home/alaing/INTEL/dpdk-2.0.0/lib/librte_malloc/malloc_heap.c:167
>> #4  0x00000000004c0aa1 in rte_malloc_socket (type=0x0, size=18446744071614584320, align=0, socket_arg=-1)
>>       at 
>> /home/alaing/INTEL/dpdk-2.0.0/lib/librte_malloc/rte_malloc.c:89
>> #5  0x00000000004c0b5b in rte_malloc (type=0x0, 
>> size=18446744071614584320, align=0) at 
>> /home/alaing/INTEL/dpdk-2.0.0/lib/librte_malloc/rte_malloc.c:115
>> #6  0x000000000041ca6e in main (argc=5, argv=0x7fffffffdd48) at 
>> /home/alaing/INTEL/dpdk-2.0.0/examples/hugephymem/main.c:66
>>
>>
>> Has anybody seen such an issue?
>> Could I be misusing RTE somehow?
>>
> What options are you running your DPDK app with?
>
> Can you also provide the full initialization log and hugepage info?
>
> Sergio
>> Thanks for your time,
>> Alain
>>
>>
>> --
>> Alain Gautherot
>> Edico Genome
>>
> -------------- next part -------------- An embedded and 
> charset-unspecified text was scrubbed...
> Name: dpdk_log.txt
> URL: 
> <http://dpdk.org/ml/archives/users/attachments/20160125/3fa0b05c/attac
> hment.txt>


  reply	other threads:[~2016-01-25 22:51 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-25 21:02 Alain Gautherot
2016-01-25 22:27 ` Sergio Gonzalez Monroy
2016-01-25 22:51   ` Alain Gautherot [this message]
2016-01-25 22:46 ` Alain Gautherot
  -- strict thread matches above, loose matches on Subject: below --
2016-01-23  0:20 Alain Gautherot
2016-01-25 13:50 ` Sergio Gonzalez Monroy
2016-01-25 14:51   ` Freynet, Marc (Nokia - FR)
2016-01-25 20:59   ` Alain Gautherot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BY2PR07MB0576FBFD8C466E68EEF8E8BB1C70@BY2PR07MB057.namprd07.prod.outlook.com \
    --to=alain@edicogenome.com \
    --cc=sergio.gonzalez.monroy@intel.com \
    --cc=users@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).