All of lore.kernel.org
 help / color / mirror / Atom feed
* [uml-devel] [PATCH] uml: move TMP default from /tmp to /dev/shm.
@ 2005-11-28 16:29 Rob Landley
  2005-11-28 18:36 ` Jeff Dike
  0 siblings, 1 reply; 9+ messages in thread
From: Rob Landley @ 2005-11-28 16:29 UTC (permalink / raw)
  To: user-mode-linux-devel, Blaisorblade, Jeff Dike

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.
---
Let's try that again with wordrap off...


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

^ permalink raw reply	[flat|nested] 9+ messages in thread
* [uml-devel] [PATCH] uml: move TMP default from /tmp to /dev/shm.
@ 2005-11-28 15:58 Rob Landley
  0 siblings, 0 replies; 9+ messages in thread
From: Rob Landley @ 2005-11-28 15:58 UTC (permalink / raw)
  To: user-mode-linux-devel, Blaisorblade, Jeff Dike

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2005-11-29 16:54 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
  -- strict thread matches above, loose matches on Subject: below --
2005-11-28 15:58 Rob Landley

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.