From: Rob Landley <rob@landley.net>
To: user-mode-linux-devel@lists.sourceforge.net,
Blaisorblade <blaisorblade@yahoo.it>,
Jeff Dike <jdike@addtoit.com>
Subject: [uml-devel] [PATCH] uml: move TMP default from /tmp to /dev/shm.
Date: Mon, 28 Nov 2005 09:58:12 -0600 [thread overview]
Message-ID: <200511280958.12932.rob@landley.net> (raw)
Signed-off-by: Rob Landley <rob@landley.net>
UML really wants shared memory semantics form its physical memory map file,
and the place for that is /dev/shm. So move the default, and fix the error
messages to recognize that this value can be overridden.
---
UML calls mmap() to allocate some "physical memory" it shares between
processes. If we're not careful, every page of this memory that gets dirtied
is pointelessly scheduled for writeout, which means an active user mode
instance running a compiler or some such can keep the disk pegged with
unnecessary I/O and slow the rest of the system to a crawl.
Back under 2.4 there was a performance hack that if you deleted a file you had
open and mmaped, dirty pages wouldn't get written out anymore unless they were
evicted due to memory pressure. This hack got yanked sometime during 2.5, and
now you're supposed to use tmpfs if you want file-backed memory you can dirty
without causing unnecessary write I/O.
UML assumed that /tmp would be tmpfs, but this turns out not to be the default
on the systems I checked (Fedora Core 4, Ubuntu, and Gentoo). But all of
these systems _do_ default to having a tmpfs mount on /dev/shm, which makes
sense since tmpfs used to be shmfs. So that's a more logical default location
for UML's physical memory file.
(You can override the default location with the TMPDIR environment variable,
but you can't create a new tmpdir mount without root access, and running UML
should never require that.)
One function is moved to another file, but the only changes are to its
printf()s.
diff -ur linux-2.6.15-rc2/arch/um-old/os-Linux/mem.c
linux-2.6.15-rc2/arch/um/os-Linux/mem.c
--- linux-2.6.15-rc2/arch/um-old/os-Linux/mem.c 2005-11-23 02:35:49.000000000
-0600
+++ linux-2.6.15-rc2/arch/um/os-Linux/mem.c 2005-11-28 09:33:21.158395976
-0600
@@ -34,7 +34,7 @@
break;
}
if((dir == NULL) || (*dir == '\0'))
- dir = "/tmp";
+ dir = "/dev/shm";
tempdir = malloc(strlen(dir) + 2);
if(tempdir == NULL){
@@ -159,3 +159,26 @@
}
return(fd);
}
+
+
+void check_tmpexec(void)
+{
+ void *addr;
+ int err, fd = create_tmp_file(UM_KERN_PAGE_SIZE);
+
+ addr = mmap(NULL, UM_KERN_PAGE_SIZE,
+ PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, fd, 0);
+ printf("Checking PROT_EXEC mmap in %s...",tempdir);
+ fflush(stdout);
+ if(addr == MAP_FAILED){
+ err = errno;
+ perror("failed");
+ if(err == EPERM)
+ printf("%s must be not mounted noexec\n",tempdir);
+ exit(1);
+ }
+ printf("OK\n");
+ munmap(addr, UM_KERN_PAGE_SIZE);
+
+ close(fd);
+}
diff -ur linux-2.6.15-rc2/arch/um-old/os-Linux/start_up.c
linux-2.6.15-rc2/arch/um/os-Linux/start_up.c
--- linux-2.6.15-rc2/arch/um-old/os-Linux/start_up.c 2005-11-23
02:35:49.000000000 -0600
+++ linux-2.6.15-rc2/arch/um/os-Linux/start_up.c 2005-11-28 09:41:04.051025600
-0600
@@ -296,29 +296,7 @@
check_sysemu();
}
-extern int create_tmp_file(unsigned long long len);
-
-static void check_tmpexec(void)
-{
- void *addr;
- int err, fd = create_tmp_file(UM_KERN_PAGE_SIZE);
-
- addr = mmap(NULL, UM_KERN_PAGE_SIZE,
- PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, fd, 0);
- printf("Checking PROT_EXEC mmap in /tmp...");
- fflush(stdout);
- if(addr == MAP_FAILED){
- err = errno;
- perror("failed");
- if(err == EPERM)
- printf("/tmp must be not mounted noexec\n");
- exit(1);
- }
- printf("OK\n");
- munmap(addr, UM_KERN_PAGE_SIZE);
-
- close(fd);
-}
+extern void check_tmpexec(void);
void os_early_checks(void)
{
--
Steve Ballmer: Innovation! Inigo Montoya: You keep using that word.
I do not think it means what you think it means.
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
next reply other threads:[~2005-11-28 15:58 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-28 15:58 Rob Landley [this message]
-- strict thread matches above, loose matches on Subject: below --
2005-11-28 16:29 [uml-devel] [PATCH] uml: move TMP default from /tmp to /dev/shm Rob Landley
2005-11-28 18:36 ` Jeff Dike
2005-11-28 17:52 ` Rob Landley
2005-11-28 20:05 ` Jeff Dike
2005-11-28 19:27 ` Henrik Nordstrom
2005-11-28 21:47 ` Rob Landley
2005-11-29 16:54 ` Blaisorblade
2005-11-28 21:53 ` Rob Landley
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=200511280958.12932.rob@landley.net \
--to=rob@landley.net \
--cc=blaisorblade@yahoo.it \
--cc=jdike@addtoit.com \
--cc=user-mode-linux-devel@lists.sourceforge.net \
/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.