Skip to contentSkip to conversation

uml: move TMP default from /tmp to /dev/shm.

PATCH In review Rob Landley 4 participants 8 messages Nov 28, 2005 – Nov 29, 2005 User-mode Linux (UML)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 uml: move TMP default from /tmp to /dev/shm.

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.

arch/um/os-Linux/mem.c 2005-11-28 09:33:21.158395976 -0600 renamed from arch/um-old/os-Linux/mem.c 2005-11-23 02:35:49.000000000 -0600 +24 -1
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
@@ -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);
+}
arch/um/os-Linux/start_up.c 2005-11-28 09:41:04.051025600 -0600 renamed from arch/um-old/os-Linux/start_up.c 2005-11-23 02:35:49.000000000 -0600 +1 -23
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
@@ -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)
 {
Signature · 13 lines
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
#1 lore raw
Quoted 5 lines · Rob Landley

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.

This looks sort of OK, but what's with the whitespace mangling?

Jeff

-------------------------------------------------------
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 [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

#2 lore raw
Quoted 8 lines · Jeff Dike
Quoted 5 lines · Rob Landley

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.

This looks sort of OK, but what's with the whitespace mangling?

I sent a second copy that hopefully is less mangled. Did it make it through ok?

Kmail is a "helpful" mail client. It's possible to get it to send out unmangled patches, assuming you remember to set the moon phase and get the chicken entrails in the right position. (I sometimes miss a step.)

Quoted 1 line

Jeff

Rob

Signature · 13 lines
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
#3 lore raw
Quoted 2 lines · Rob Landley

I sent a second copy that hopefully is less mangled. Did it make it through ok?

By eye, both looked the same.

Quoted 3 lines

Kmail is a "helpful" mail client. It's possible to get it to send out unmangled patches, assuming you remember to set the moon phase and get the chicken entrails in the right position. (I sometimes miss a step.)

Why not cc yourself if you're not sure?

Jeff

-------------------------------------------------------
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 [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

#4 lore raw
Quoted 5 lines · Jeff Dike
Quoted 2 lines · Rob Landley

I sent a second copy that hopefully is less mangled. Did it make it through ok?

By eye, both looked the same.

Not entirely, the first not only munged the whitespace, it also word-wrapped the diff lines..

The second only munged the whitespace.

Sending patches as attachments is generally safer than inline when using GUI mail programs.

Regards
Henrik

-------------------------------------------------------
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 [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

#5 lore raw
Quoted 7 lines · Henrik Nordstrom
Quoted 5 lines · Jeff Dike
Quoted 2 lines · Rob Landley

I sent a second copy that hopefully is less mangled. Did it make it through ok?

By eye, both looked the same.

Quoted 7 lines

Not entirely, the first not only munged the whitespace, it also word-wrapped the diff lines..

The second only munged the whitespace.

Sending patches as attachments is generally safer than inline when using GUI mail programs.

Inline is linux-kernel policy, but here the darn thing is as an attachment. (No, I seem to have no control whatsoever over the type of the attachment. I have checkboxes for "compress, encrypt, and sign" though, in case I can't figure out how to do that to the actual file...)

I need to find a real mail client, it seems.

Rob

arch/um/os-Linux/mem.c renamed from arch/um-old/os-Linux/mem.c +24 -1
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
@@ -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);
+}
arch/um/os-Linux/start_up.c renamed from arch/um-old/os-Linux/start_up.c +1 -23
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
@@ -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)
 {
#6 lore raw
Quoted 5 lines · Rob Landley
Quoted 2 lines · Henrik Nordstrom
Quoted 1 line · Jeff Dike

On Mon, Nov 28, 2005 at 11:52:15AM -0600, Rob Landley wrote:

Inline is linux-kernel policy, but here the darn thing is as an attachment.

They explicitly accept plain-text attachments when inline doesn't work. However, here we are *much* liberal, since we apply anyhow patches by hand, and plain-text attachment works as well when feeding the patch to patch on stdin, even if you feed it the whole mail. IIRC.

Quoted 4 lines

(No, I seem to have no control whatsoever over the type of the attachment.

I have checkboxes for "compress, encrypt, and sign" though, in case I can't figure out how to do that to the actual file...)

Don't look at the mime type...

Right-click -> "properties" -> "encoding" (I guess) -> choose "7bit" or "8bit" over "base64". Btw, kmail never tried to send a patch as base64, it always chose 7bit, as in your patch.

Quoted 1 line

I need to find a real mail client, it seems.

Signature · 20 lines
Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!".
Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade

		
___________________________________ 
Yahoo! Messenger: chiamate gratuite in tutto il mondo 
http://it.messenger.yahoo.com



-------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
#7 lore raw
In reply to Jeff Dike
Quoted 5 lines · Jeff Dike
Quoted 3 lines

Kmail is a "helpful" mail client. It's possible to get it to send out unmangled patches, assuming you remember to set the moon phase and get the chicken entrails in the right position. (I sometimes miss a step.)

Why not cc yourself if you're not sure?

Because it seems to depend on things like whether or not I've adjusted my mail filters since the last reboot, and current moon phase, and that only tells me whether or not it worked after the fact of sending it?

Quoted 1 line

Jeff

I think what broke it this time was turning on the .signature. That seems to convert tabs to spaces throughout the entire message. Nice and orthogonal. (Just like integrating kmail in and kontact was. No unwanted behavior changes there...)

Sorry, I'll try sending mail with patches from the darn command line in future...

Rob

Signature · 13 lines
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel