From: Eric Dumazet <dada1@cosmosbay.com>
To: Albert Cahalan <acahalan@gmail.com>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
Davide Libenzi <davidel@xmailserver.org>
Subject: Re: JIT emulator needs
Date: Fri, 08 Jun 2007 09:09:18 +0200 [thread overview]
Message-ID: <4669009E.3000702@cosmosbay.com> (raw)
In-Reply-To: <787b0d920706072335v10d6025cwe1437194b6c60d84@mail.gmail.com>
Albert Cahalan a écrit :
> Right now, Linux isn't all that friendly to JIT emulators.
> Here are the problems and suggestions to improve the situation.
>
> There is an SE Linux execmem restriction that enforces W^X.
> Assuming you don't wish to just disable SE Linux, there are
> two ugly ways around the problem. You can mmap a file twice,
> or you can abuse SysV shared memory. The mmap method requires
> that you know of a filesystem mounted rw,exec where you can
> write a very large temporary file. This arbitrary filesystem,
> rather than swap space, will be the backing store. The SysV
> shared memory method requires an undocumented flag and is
> subject to some annoying size limits. Both methods create
> objects that will fail to be deleted if the program dies
> before marking the objects for deletion.
>
> Processors often have annoying limits on the immediate values
> in instructions. An x86 or x86_64 JIT can go a bit faster if
> all allocations are kept to the low 2 GB of address space.
> There are also reasons for a 32bit-to-x86_64 JIT to chose
> a nearly arbitrary 2 GB region that lies above 4 GB.
> Other archs have other limits, such as 32 MB or 256 MB.
>
> Sometimes it is very helpful to have the read/write mapping
> be a fixed offset from the read/exec mapping. A power of 2
> can be especially desirable.
>
> Emulators often need a cheap way to change page permissions.
> One VMA per page is no good. Besides taking up space and making
> many things generally slower, having one VMA per page causes
> a huge performance loss for snapshot roll-back operations.
> Just tearing down all those VMAs takes a good while.
>
> Additions to better support JIT emulators:
>
> a. sysctl to set IPC_RMID by default
Not very good, this will break some apps.
> b. shmget() flag to set IPC_RMID by default
This is better :)
> c. open() flag to unlink a file before returning the fd
Well, I assume you would like fd = open("/path/somefile", O_RDWR | O_CREAT |
O_UNLINK, 0644)
(ie allocate a file handle but no name ?)
Quite difficult to implement this atomically with current vfs, maybe a new
syscall would be better. (Linus will kill me for that :) )
(We dont need to insert "somefile" in one directory, then unlink it, we only
need to allocate an unnamed inode to get some backing store)
This is a generalization of anonymous inodes ( fs/anon_inodes.c )
next prev parent reply other threads:[~2007-06-08 7:09 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-08 6:35 JIT emulator needs Albert Cahalan
2007-06-08 7:09 ` Eric Dumazet [this message]
2007-06-09 4:12 ` Albert Cahalan
2007-06-08 11:10 ` Alan Cox
2007-06-08 16:35 ` Nicholas Miell
2007-06-09 5:17 ` Albert Cahalan
2007-06-09 20:00 ` H. Peter Anvin
2007-06-19 15:08 ` William Lee Irwin III
2007-06-20 3:16 ` Albert Cahalan
2007-06-20 16:01 ` William Lee Irwin III
2007-06-20 16:37 ` H. Peter Anvin
2007-06-20 17:54 ` William Lee Irwin III
2007-06-20 18:23 ` H. Peter Anvin
2007-06-20 18:25 ` Albert Cahalan
2007-06-20 18:51 ` H. Peter Anvin
2007-06-21 3:21 ` Albert Cahalan
2007-06-21 3:32 ` H. Peter Anvin
2007-06-21 7:38 ` Albert Cahalan
2007-06-20 18:43 ` Albert Cahalan
2007-06-23 3:52 ` Kyle Moffett
2007-06-24 4:14 ` William Lee Irwin III
2007-06-21 17:44 ` Arjan van de Ven
2007-06-22 5:56 ` Albert Cahalan
2007-06-22 13:43 ` Arjan van de Ven
2007-06-22 14:32 ` Albert Cahalan
2007-06-22 14:42 ` Arjan van de Ven
2007-06-23 2:30 ` Albert Cahalan
[not found] <8tGiE-2Hv-1@gated-at.bofh.it>
[not found] ` <8xNvm-2Tw-29@gated-at.bofh.it>
[not found] ` <8xYTM-3So-13@gated-at.bofh.it>
2007-06-21 11:08 ` Bodo Eggert
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=4669009E.3000702@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=acahalan@gmail.com \
--cc=davidel@xmailserver.org \
--cc=linux-kernel@vger.kernel.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 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.