shithub: riscv

Download patch

ref: b72abe8762978bd6162a104e75985628891c3872
parent: 311e5280279f8d56983df2abae50d545a24ff290
author: Ori Bernstein <ori@eigenstate.org>
date: Wed Aug 9 00:17:00 EDT 2023

cmd: use increased iounit

add IOUNIT to libc, and replace hard-coded 8k buffers
throughout userspace; this increases the speed for
reading the framebuffer by a factor of at least 3x,
as well as increasing fs performance by a similar
amount, at least on synthetic benchmarks.

--- a/sys/include/ape/lib9.h
+++ b/sys/include/ape/lib9.h
@@ -7,6 +7,8 @@
 
 #include <u.h>		/* ick; need Rune defined below */
 
+#define IOUNIT	32768U	/* default buffer size for 9p io */
+
 #define	MORDER	0x0003	/* mask for bits defining order of mounting */
 #define	MREPL	0x0000	/* mount replaces object */
 #define	MBEFORE	0x0001	/* mount goes before others in union directory */
--- a/sys/include/bio.h
+++ b/sys/include/bio.h
@@ -6,7 +6,7 @@
 
 enum
 {
-	Bsize		= 8*1024,
+	Bsize		= IOUNIT,
 	Bungetsize	= UTFmax+1,	/* space for ungetc */
 	Bmagic		= 0x314159,
 	Beof		= -1,
--- a/sys/include/libc.h
+++ b/sys/include/libc.h
@@ -576,6 +576,7 @@
  * system calls
  *
  */
+#define IOUNIT	32768U	/* default buffer size for 9p io */
 #define	STATMAX	65535U	/* max length of machine-independent stat structure */
 #define	DIRMAX	(sizeof(Dir)+STATMAX)	/* max length of Dir structure */
 #define	ERRMAX	128	/* max length of error string */
--- a/sys/src/cmd/1a/a.h
+++ b/sys/src/cmd/1a/a.h
@@ -15,7 +15,7 @@
 #define	MAXALIGN	7
 #define	FPCHIP		1
 #define	NSYMB		500
-#define	BUFSIZ		8192
+#define	BUFSIZ		IOUNIT
 #define	HISTSZ		20
 #define	NINCLUDE	10
 #define	NHUNK		10000
--- a/sys/src/cmd/1l/l.h
+++ b/sys/src/cmd/1l/l.h
@@ -114,7 +114,7 @@
 	NHUNK		= 100000,
 	MINSIZ		= 4,
 	STRINGSZ	= 200,
-	MAXIO		= 8192,
+	MAXIO		= IOUNIT,
 	MAXHIST		= 20,				/* limit of path elements for history symbols */
 	A6OFFSET 	= 32766,
 };
--- a/sys/src/cmd/2a/a.h
+++ b/sys/src/cmd/2a/a.h
@@ -15,7 +15,7 @@
 #define	MAXALIGN	7
 #define	FPCHIP		1
 #define	NSYMB		500
-#define	BUFSIZ		8192
+#define	BUFSIZ		IOUNIT
 #define	HISTSZ		20
 #define	NINCLUDE	10
 #define	NHUNK		10000
--- a/sys/src/cmd/2l/l.h
+++ b/sys/src/cmd/2l/l.h
@@ -116,7 +116,7 @@
 	NHUNK		= 100000,
 	MINSIZ		= 4,
 	STRINGSZ	= 200,
-	MAXIO		= 8192,
+	MAXIO		= IOUNIT,
 	MAXHIST		= 20,				/* limit of path elements for history symbols */
 	A6OFFSET 	= 32766
 };
--- a/sys/src/cmd/5a/a.h
+++ b/sys/src/cmd/5a/a.h
@@ -12,7 +12,7 @@
 #define	MAXALIGN	7
 #define	FPCHIP		1
 #define	NSYMB		8192
-#define	BUFSIZ		8192
+#define	BUFSIZ		IOUNIT
 #define	HISTSZ		20
 #define	NINCLUDE	10
 #define	NHUNK		10000
--- a/sys/src/cmd/5l/l.h
+++ b/sys/src/cmd/5l/l.h
@@ -197,7 +197,7 @@
 	NHUNK		= 100000,
 	MINSIZ		= 64,
 	NENT		= 100,
-	MAXIO		= 8192,
+	MAXIO		= IOUNIT,
 	MAXHIST		= 20,	/* limit of path elements for history symbols */
 
 	Roffset	= 22,		/* no. bits for offset in relocation address */
--- a/sys/src/cmd/6l/l.h
+++ b/sys/src/cmd/6l/l.h
@@ -118,7 +118,7 @@
 	MINSIZ		= 8,
 	STRINGSZ	= 200,
 	MINLC		= 1,
-	MAXIO		= 8192,
+	MAXIO		= IOUNIT,
 	MAXHIST		= 20,				/* limit of path elements for history symbols */
 
 	Yxxx		= 0,
--- a/sys/src/cmd/7a/a.h
+++ b/sys/src/cmd/7a/a.h
@@ -17,7 +17,7 @@
 #define	MAXALIGN	7
 #define	FPCHIP		1
 #define	NSYMB		8192
-#define	BUFSIZ		8192
+#define	BUFSIZ		IOUNIT
 #define	HISTSZ		20
 #define	NINCLUDE	10
 #define	NHUNK		10000
--- a/sys/src/cmd/7l/l.h
+++ b/sys/src/cmd/7l/l.h
@@ -238,7 +238,7 @@
 	STRINGSZ	= 200,
 	NHASH		= 10007,
 	NHUNK		= 100000,
-	MAXIO		= 8192,
+	MAXIO		= IOUNIT,
 	MAXHIST		= 20,	/* limit of path elements for history symbols */
 };
 
--- a/sys/src/cmd/8a/a.h
+++ b/sys/src/cmd/8a/a.h
@@ -14,7 +14,7 @@
 #define	MAXALIGN	7
 #define	FPCHIP		1
 #define	NSYMB		500
-#define	BUFSIZ		8192
+#define	BUFSIZ		IOUNIT
 #define	HISTSZ		20
 #define	NINCLUDE	10
 #define	NHUNK		10000
--- a/sys/src/cmd/8l/l.h
+++ b/sys/src/cmd/8l/l.h
@@ -110,7 +110,7 @@
 	MINSIZ		= 4,
 	STRINGSZ	= 200,
 	MINLC		= 1,
-	MAXIO		= 8192,
+	MAXIO		= IOUNIT,
 	MAXHIST		= 20,				/* limit of path elements for history symbols */
 
 	Yxxx		= 0,
--- a/sys/src/cmd/9660srv/main.c
+++ b/sys/src/cmd/9660srv/main.c
@@ -7,7 +7,7 @@
 
 enum
 {
-	Maxfdata	= 8192,
+	Maxfdata	= IOUNIT,
 	Maxiosize	= IOHDRSZ+Maxfdata,
 };
 
--- a/sys/src/cmd/cat.c
+++ b/sys/src/cmd/cat.c
@@ -4,7 +4,7 @@
 void
 cat(int f, char *s)
 {
-	char buf[8192];
+	char buf[IOUNIT];
 	long n;
 
 	while((n=read(f, buf, sizeof buf))>0)
--- a/sys/src/cmd/cp.c
+++ b/sys/src/cmd/cp.c
@@ -1,8 +1,6 @@
 #include <u.h>
 #include <libc.h>
 
-#define	DEFB	(8*1024)
-
 int	buflen;
 int	failed;
 int	gflag;
@@ -125,7 +123,7 @@
 
 	buflen = iounit(fdf);
 	if(buflen <= 0)
-		buflen = DEFB;
+		buflen = IOUNIT;
 
 	if(copy1(fdf, fds < 0 ? fdt : fds, from, to)==0){
 		if(fds >= 0 && write(fds, "", 0) < 0){
--- a/sys/src/cmd/crc32.c
+++ b/sys/src/cmd/crc32.c
@@ -38,7 +38,7 @@
 sum(int fd, char *name)
 {
 	int n;
-	uchar buf[8192];
+	uchar buf[IOUNIT];
 	u32int crc;
 
 	crc = init ^ xor;
--- a/sys/src/cmd/cwfs/portdat.h
+++ b/sys/src/cmd/cwfs/portdat.h
@@ -22,7 +22,7 @@
 
 /* constants that don't affect disk layout */
 enum {
-	MAXDAT		= 8192,		/* max allowable data message */
+	MAXDAT		= IOUNIT,	/* max allowable data message */
 	MB		= 1024*1024,
 };
 
--- a/sys/src/cmd/exportfs/exportfs.c
+++ b/sys/src/cmd/exportfs/exportfs.c
@@ -83,7 +83,7 @@
 	if(messagesize == 0){
 		messagesize = iounit(0);
 		if(messagesize == 0)
-			messagesize = 8192+IOHDRSZ;
+			messagesize = IOUNIT+IOHDRSZ;
 	}
 	fhash = emallocz(sizeof(Fid*)*FHASHSIZE);
 
--- a/sys/src/cmd/ka/a.h
+++ b/sys/src/cmd/ka/a.h
@@ -12,7 +12,7 @@
 #define	MAXALIGN	7
 #define	FPCHIP		1
 #define	NSYMB		500
-#define	BUFSIZ		8192
+#define	BUFSIZ		IOUNIT
 #define	HISTSZ		20
 #define	NINCLUDE	10
 #define	NHUNK		10000
--- a/sys/src/cmd/kl/l.h
+++ b/sys/src/cmd/kl/l.h
@@ -96,7 +96,7 @@
 	FPCHIP		= 1,
 	BIG		= 4096-8,
 	STRINGSZ	= 200,
-	MAXIO		= 8192,
+	MAXIO		= IOUNIT,
 	MAXHIST		= 20,				/* limit of path elements for history symbols */
 	DATBLK		= 1024,
 	NHASH		= 10007,
--- a/sys/src/cmd/lnfs.c
+++ b/sys/src/cmd/lnfs.c
@@ -10,7 +10,7 @@
 {
 	OPERM	= 0x3,		/* mask of all permission types in open mode */
 	Maxsize	= 512*1024*1024,
-	Maxfdata	= 8192,
+	Maxfdata	= IOUNIT,
 	NAMELEN = 28,
 };
 
--- a/sys/src/cmd/md5sum.c
+++ b/sys/src/cmd/md5sum.c
@@ -23,7 +23,7 @@
 sum(int fd, char *name)
 {
 	int n;
-	uchar buf[8192], digest[MD5dlen];
+	uchar buf[IOUNIT], digest[MD5dlen];
 	DigestState *s;
 
 	s = md5(nil, 0, nil, nil);
--- a/sys/src/cmd/mothra/html.h
+++ b/sys/src/cmd/mothra/html.h
@@ -2,7 +2,7 @@
  * Parameters
  */
 #define	NSTACK	100	/* html grammar is not recursive, so 30 or so should do */
-#define	NHBUF	8192	/* Input buffer size */
+#define	NHBUF	IOUNIT	/* Input buffer size */
 #define	NPEEKC	3	/* Maximum lookahead */
 #define	NTOKEN	65536	/* Maximum token length */
 #define	NATTR	512	/* Maximum number of attributes of a tag */
--- a/sys/src/cmd/mv.c
+++ b/sys/src/cmd/mv.c
@@ -167,7 +167,7 @@
 int
 copy1(int fdf, int fdt, char *from, char *to)
 {
-	char buf[8192];
+	char buf[IOUNIT];
 	long n, n1;
 
 	while ((n = read(fdf, buf, sizeof buf)) > 0) {
--- a/sys/src/cmd/os.c
+++ b/sys/src/cmd/os.c
@@ -20,7 +20,7 @@
 
 char *mnt = "/mnt/term/cmd";
 char *dir = nil;
-char buf[8192];
+char buf[IOUNIT];
 int fd[Nfd] = {-1};
 int pid[Npid];
 int nice, foreground = 1;
--- a/sys/src/cmd/qa/a.h
+++ b/sys/src/cmd/qa/a.h
@@ -12,7 +12,7 @@
 #define	MAXALIGN	7
 #define	FPCHIP		1
 #define	NSYMB		8192
-#define	BUFSIZ		8192
+#define	BUFSIZ		IOUNIT
 #define	HISTSZ		20
 #define	NINCLUDE	10
 #define	NHUNK		10000
--- a/sys/src/cmd/ql/l.h
+++ b/sys/src/cmd/ql/l.h
@@ -93,7 +93,7 @@
 	FPCHIP		= 1,
 	BIG		= 32768-8,
 	STRINGSZ	= 200,
-	MAXIO		= 8192,
+	MAXIO		= IOUNIT,
 	MAXHIST		= 20,				/* limit of path elements for history symbols */
 	DATBLK		= 1024,
 	NHASH		= 10007,
--- a/sys/src/cmd/sha1sum.c
+++ b/sys/src/cmd/sha1sum.c
@@ -43,7 +43,7 @@
 sum(int fd, char *name)
 {
 	int n;
-	uchar buf[8192], digest[SHA2_512dlen];
+	uchar buf[IOUNIT], digest[SHA2_512dlen];
 	DigestState *s;
 
 	s = (*shafunc)(nil, 0, nil, nil);
--- a/sys/src/cmd/tee.c
+++ b/sys/src/cmd/tee.c
@@ -11,7 +11,7 @@
 
 int	aflag;
 
-char in[8192];
+char in[IOUNIT];
 
 int	intignore(void*, char*);
 
--- a/sys/src/cmd/va/a.h
+++ b/sys/src/cmd/va/a.h
@@ -12,7 +12,7 @@
 #define	MAXALIGN	7
 #define	FPCHIP		1
 #define	NSYMB		8192
-#define	BUFSIZ		8192
+#define	BUFSIZ		IOUNIT
 #define	HISTSZ		20
 #define	NINCLUDE	10
 #define	NHUNK		10000
--- a/sys/src/cmd/vl/l.h
+++ b/sys/src/cmd/vl/l.h
@@ -163,7 +163,7 @@
 	NHUNK		= 100000,
 	MINSIZ		= 64,
 	NENT		= 100,
-	MAXIO		= 8192,
+	MAXIO		= IOUNIT,
 	MAXHIST		= 20,				/* limit of path elements for history symbols */
 };
 
--- a/sys/src/cmd/vnc/devdraw.c
+++ b/sys/src/cmd/vnc/devdraw.c
@@ -36,7 +36,6 @@
 
 #define	NHASH		(1<<5)
 #define	HASHMASK	(NHASH-1)
-#define	IOUNIT		(64*1024)
 
 typedef struct Client Client;
 typedef struct Draw Draw;