From: "Gonzalez Monroy, Sergio" <sergio.gonzalez.monroy@intel.com>
To: Jay Rolette <rolette@infiniteio.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [PATCH] replaced O(n^2) sort in sort_by_physaddr() with qsort() from standard library
Date: Wed, 9 Sep 2015 11:35:57 +0100 [thread overview]
Message-ID: <55F00B8D.9010704@intel.com> (raw)
In-Reply-To: <1418823077-9129-1-git-send-email-rolette@infiniteio.com>
Following conversation in
http://dpdk.org/ml/archives/dev/2015-September/023230.html :
On 17/12/2014 13:31, rolette at infiniteio.com (Jay Rolette) wrote:
> Signed-off-by: Jay Rolette <rolette at infiniteio.com>
> ---
Update commit title/description, maybe something like:
eal/linux: use qsort for sorting hugepages
Replace O(n^2) sort in sort_by_physaddr() with qsort() from standard
library
> lib/librte_eal/linuxapp/eal/eal_memory.c | 59 +++++++++++---------------------
> 1 file changed, 20 insertions(+), 39 deletions(-)
>
> diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c
> index bae2507..3656515 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_memory.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
> @@ -670,6 +670,25 @@ error:
> return -1;
> }
>
> +static int
> +cmp_physaddr(const void *a, const void *b)
> +{
> +#ifndef RTE_ARCH_PPC_64
> + const struct hugepage_file *p1 = (const struct hugepage_file *)a;
> + const struct hugepage_file *p2 = (const struct hugepage_file *)b;
> +#else
> + // PowerPC needs memory sorted in reverse order from x86
> + const struct hugepage_file *p1 = (const struct hugepage_file *)b;
> + const struct hugepage_file *p2 = (const struct hugepage_file *)a;
> +#endif
> + if (p1->physaddr < p2->physaddr)
> + return -1;
> + else if (p1->physaddr > p2->physaddr)
> + return 1;
> + else
> + return 0;
> +}
> +
There were a couple of comments from Thomas about the comments style and
#ifdef:
- Comment style should be modified as per
http://dpdk.org/doc/guides/contributing/coding_style.html#c-comment-style
- Regarding the #ifdef, I agree with Jay that it is the current approach
in the file.
> /*
> * Sort the hugepg_tbl by physical address (lower addresses first on x86,
> * higher address first on powerpc). We use a slow algorithm, but we won't
> @@ -678,45 +697,7 @@ error:
> static int
> sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
> {
> - unsigned i, j;
> - int compare_idx;
> - uint64_t compare_addr;
> - struct hugepage_file tmp;
> -
> - for (i = 0; i < hpi->num_pages[0]; i++) {
> - compare_addr = 0;
> - compare_idx = -1;
> -
> - /*
> - * browse all entries starting at 'i', and find the
> - * entry with the smallest addr
> - */
> - for (j=i; j< hpi->num_pages[0]; j++) {
> -
> - if (compare_addr == 0 ||
> -#ifdef RTE_ARCH_PPC_64
> - hugepg_tbl[j].physaddr > compare_addr) {
> -#else
> - hugepg_tbl[j].physaddr < compare_addr) {
> -#endif
> - compare_addr = hugepg_tbl[j].physaddr;
> - compare_idx = j;
> - }
> - }
> -
> - /* should not happen */
> - if (compare_idx == -1) {
> - RTE_LOG(ERR, EAL, "%s(): error in physaddr sorting\n", __func__);
> - return -1;
> - }
> -
> - /* swap the 2 entries in the table */
> - memcpy(&tmp, &hugepg_tbl[compare_idx],
> - sizeof(struct hugepage_file));
> - memcpy(&hugepg_tbl[compare_idx], &hugepg_tbl[i],
> - sizeof(struct hugepage_file));
> - memcpy(&hugepg_tbl[i], &tmp, sizeof(struct hugepage_file));
> - }
> + qsort(hugepg_tbl, hpi->num_pages[0], sizeof(struct hugepage_file), cmp_physaddr);
> return 0;
> }
Why not just remove sort_by_physaddr() and call qsort() directly?
Sergio
next prev parent reply other threads:[~2015-09-09 10:36 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-17 13:31 [PATCH] replaced O(n^2) sort in sort_by_physaddr() with qsort() from standard library Jay Rolette
[not found] ` <1418823077-9129-1-git-send-email-rolette-bIuJOMs36aleGPcbtGPokg@public.gmane.org>
2014-12-17 14:27 ` Thomas Monjalon
2014-12-17 15:07 ` Jay Rolette
[not found] ` <CADNuJVpObspy7zW6D4Aww8LZNezgP8twrYp_Hej5ZFD1+L0ZKQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-17 15:27 ` Bruce Richardson
2015-09-09 10:35 ` Gonzalez Monroy, Sergio [this message]
2015-09-10 11:49 ` Jay Rolette
-- strict thread matches above, loose matches on Subject: below --
2014-12-11 16:05 Jay Rolette
[not found] ` <CADNuJVo6=MuC5pJV4ew8Rr1Mu=PwUUsB=QwgKaRDcCZO6VBfhg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-15 9:05 ` Wodkowski, PawelX
[not found] ` <F6F2A6264E145F47A18AB6DF8E87425D12B79E1A-kPTMFJFq+rFP9JyJpTNKArfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-12-15 13:17 ` Jay Rolette
[not found] ` <CADNuJVqMqbS43ektC0wKnXxx_hy902uj1pigdXZoaOnRnb2pQw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-15 13:20 ` Wodkowski, PawelX
[not found] ` <F6F2A6264E145F47A18AB6DF8E87425D12B79F22-kPTMFJFq+rFP9JyJpTNKArfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-12-15 14:29 ` Jay Rolette
[not found] ` <CADNuJVr3oaAYRuWD29N1j=ZW4TMX_X83K_mxanfR7gOq7mhW9w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-15 14:55 ` Richardson, Bruce
2014-12-15 14:24 ` Ananyev, Konstantin
2014-12-16 18:39 ` Ananyev, Konstantin
[not found] ` <2601191342CEEE43887BDE71AB977258213C1357-kPTMFJFq+rEu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-12-16 19:18 ` Jay Rolette
[not found] ` <CADNuJVrfiX=wSp5HzU0ZTKP5owi=PN-GM39a9YY8v0-9sH84-A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-16 19:20 ` Jay Rolette
[not found] ` <CADNuJVoJOjbYfh4KQKhOfpj+oK88zHDHfHBjRCfzKoQpjgDnbQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-17 11:00 ` Ananyev, Konstantin
2014-12-17 13:08 ` Qiu, Michael
[not found] ` <533710CFB86FA344BFBF2D6802E60286CA0963-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-12-17 13:35 ` Jay Rolette
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=55F00B8D.9010704@intel.com \
--to=sergio.gonzalez.monroy@intel.com \
--cc=dev@dpdk.org \
--cc=rolette@infiniteio.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.