Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 09 Aug 2006 21:08:20 +0800
From:      "Intron" <mag@intron.ac>
To:        Alexander Leidinger <Alexander@Leidinger.net>
Cc:        freebsd-emulation@freebsd.org
Subject:   [Updated on 2006-08-09] Re: My Linux AIO Implementation Calling for Test
Message-ID:  <courier.44D9DE44.00004194@intron.ac>
In-Reply-To: <20060807232055.77a70f8a@Magellan.Leidinger.net>
References:  <1153994127.11460@origin.intron.ac> <20060728093647.GA32168@stud.fit.vutbr.cz> <courier.44CB32FB.0000D8D5@intron.ac> <20060807232055.77a70f8a@Magellan.Leidinger.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Download: http://ftp.intron.ac/tmp/linux_aio-20060809.tar.bz2

Updated files:

-rw-r--r--  1 root  wheel  33841  8  9 20:59 linux_aio.c
-rw-r--r--  1 root  wheel   2891  8  9 16:37 linux_aio.h
-rw-r--r--  1 root  wheel   4199  8  9 19:36 readme.txt
-rw-r--r--  1 root  wheel   1139  8  8 23:36 syscalls.master.diff
-rwxr-xr-x  1 root  wheel  46412  8  9 20:55 testaio
-rw-r--r--  1 root  wheel   3742  8  9 20:59 testaio.c

Alexander Leidinger wrote:

> 
> There are some style problems:
>  - macros do not have to end with a ';'
>  - lines with more than 80 characters (so far they can be changed to
>    continue on the next line or some similar modifications)
>  - between switch/if/while/... and the '(' should be a space
>  - code which isn't used should be disabled with preprocessor
>    directives, not with comments
>  - '}' and '{' should be on the same line as the "else"
>  - maybe more...

I have modified my code as you advised.

> 
> And some code problems:
>  - "Both User Space and Kernel Memory Leaked!" doesn't look very
>    encouraging, what's the reason for this? How often can this occour
>    and when?

Actually I once talked about this problem of memory leak to you and
another German discussant around two months ago. FreeBSD's native aio(4)
is much more powerful than Linux AIO. But there's a limitation in
FreeBSD aio(4): some I/O operation cannot be cancelled after being
started and before completion.

Lines 208-216 in /sys/kern/vfs_aio.c read:

/*
  * Current, there is only two backends: BIO and generic file I/O.
  * socket I/O is served by generic file I/O, this is not a good idea, since
  * disk file I/O and any other types without O_NONBLOCK flag can block daemon
  * threads, if there is no thread to serve socket I/O, the socket I/O will be
  * delayed too long or starved, we should create some threads dedicated to
  * sockets to do non-blocking I/O, same for pipe and fifo, for these I/O
  * systems we really need non-blocking interface, fiddling O_NONBLOCK in file
  * structure is not safe because there is race between userland and aio
  * daemons.
  */

In my code, once these types of AIO requests are submitted to FreeBSD's
native aio(4), I can neither cancel them at once, nor destroy all related
data structures both in user space and in kernel.

So far I don't how to avoid this type of memory leak.
1. Prohibit those types of IO requests?
2. Wait for their completion even for minutes?

On the other hand, if my linux_io_destroy() reports EAGAIN/EWOULDBLOCK
to userland application, some GNU/Linux applications may exit abnormally.
Because Linux io_destroy(2) will not throw the exception EAGAIN or
EWOULDBLOCK.

>  - please use the l_int, l_uint, ... types instead of plain int,
>    unsigned, ... so that it can be used on amd64 too (the linuxolator
>    runs in "32bit mode" there, so a 64bit long will break there)

I have modified my code (including "syscalls.master.diff") as you advised.

> 
> Maybe I will find some more stuff later...
> 
> Bye,
> Alexander.
> 
> -- 
> The wages of sin is death, but so is the salary of virtue, and at least the evil get to go home early on Fridays.
> (Witches Abroad)
> http://www.Leidinger.net  Alexander @ Leidinger.net: PGP ID = B0063FE7
> http://www.FreeBSD.org     netchild @ FreeBSD.org  : PGP ID = 72077137

------------------------------------------------------------------------
                                                From Beijing, China




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?courier.44D9DE44.00004194>