* [9front] iounit: bump it across the board
@ 2022-06-09 3:47 ori
2022-06-09 4:42 ` noam
0 siblings, 1 reply; 8+ messages in thread
From: ori @ 2022-06-09 3:47 UTC (permalink / raw)
To: 9front
DO NOT RUN THIS UNTIL YOU HAVE APPLIED THE CWFS PATCH. CWFS WILL HANG
UP ON YOU WITHOUT THE PATCH FROM THE EMAIL TITLED
cwfs: fix iounit negotiation
This patch bumps up the iounit in the kernel to 32k, and
introduces the IOUNIT constant to take advantage of it.
This also changes some of userspace to increase buffer
sizes, so that we can take advantage of the larger reads.
Things to double check for:
- libthread programs have limited stack sizes,
and increasing the size of the buffer may
blow the stack in some of these programs.
- I may have misunderstood how buffer sizes
are used, and may have increased constants
that I shouldn't have.
- General bugs and typos.
- Bugs that changing the io unit tickles.
Note that when mounting 9p over TLS, the iounit will be
restricted to the iounit of the underlying transport,
in this case 16k. That may get addressed in a separate
patch.
diff 73cfaf9d694f927adf89c44e0cc7ad25df15bbdf uncommitted
--- a/sys/include/ape/bio.h
+++ b/sys/include/ape/bio.h
@@ -14,7 +14,7 @@
enum
{
- Bsize = 8*1024,
+ Bsize = 32*1024,
Bungetsize = UTFmax+1, /* space for ungetc */
Bmagic = 0x314159,
Beof = -1,
--- 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
@@ -567,6 +567,7 @@
#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 */
+#define IOUNIT 32768U /* reasonable buffer size */
#define MORDER 0x0003 /* mask for bits defining order of mounting */
#define MREPL 0x0000 /* mount replaces object */
--- a/sys/src/9/port/devmnt.c
+++ b/sys/src/9/port/devmnt.c
@@ -16,7 +16,7 @@
* connection.
*/
-#define MAXRPC (IOHDRSZ+8192)
+#define MAXRPC (IOHDRSZ+32*1024)
struct Mntrpc
{
@@ -146,7 +146,7 @@
f.tag = NOTAG;
f.msize = msize;
f.version = v;
- msg = malloc(8192+IOHDRSZ);
+ msg = malloc(MAXRPC);
if(msg == nil)
exhausted("version memory");
if(waserror()){
@@ -153,7 +153,7 @@
free(msg);
nexterror();
}
- k = convS2M(&f, msg, 8192+IOHDRSZ);
+ k = convS2M(&f, msg, MAXRPC);
if(k == 0)
error("bad fversion conversion on send");
@@ -171,8 +171,8 @@
}
/* message sent; receive and decode reply */
- for(k = 0; k < BIT32SZ || (k < GBIT32(msg) && k < 8192+IOHDRSZ); k += l){
- l = devtab[c->type]->read(c, msg+k, 8192+IOHDRSZ-k, c->offset);
+ for(k = 0; k < BIT32SZ || (k < GBIT32(msg) && k < MAXRPC); k += l){
+ l = devtab[c->type]->read(c, msg+k, MAXRPC-k, c->offset);
if(l <= 0)
error("EOF receiving fversion reply");
lock(c);
--- a/sys/src/cmd/1a/a.h
+++ b/sys/src/cmd/1a/a.h
@@ -15,7 +15,6 @@
#define MAXALIGN 7
#define FPCHIP 1
#define NSYMB 500
-#define BUFSIZ 8192
#define HISTSZ 20
#define NINCLUDE 10
#define NHUNK 10000
@@ -52,7 +51,7 @@
struct Io
{
Io* link;
- char b[BUFSIZ];
+ char b[IOUNIT];
char* p;
short c;
short f;
--- a/sys/src/cmd/1l/l.h
+++ b/sys/src/cmd/1l/l.h
@@ -114,7 +114,6 @@
NHUNK = 100000,
MINSIZ = 4,
STRINGSZ = 200,
- MAXIO = 8192,
MAXHIST = 20, /* limit of path elements for history symbols */
A6OFFSET = 32766,
};
@@ -123,8 +122,8 @@
{
struct
{
- char obuf[MAXIO]; /* output buffer */
- uchar ibuf[MAXIO]; /* input buffer */
+ char obuf[IOUNIT]; /* output buffer */
+ uchar ibuf[IOUNIT]; /* input buffer */
} u;
char dbuf[1];
} buf;
--- a/sys/src/cmd/1l/obj.c
+++ b/sys/src/cmd/1l/obj.c
@@ -657,7 +657,7 @@
n = stop - good;
memmove(buf, good, stop - good);
stop = buf + n;
- n = MAXIO - n;
+ n = IOUNIT - n;
if(n > max)
n = max;
n = read(f, stop, n);
--- a/sys/src/cmd/2a/a.h
+++ b/sys/src/cmd/2a/a.h
@@ -15,7 +15,6 @@
#define MAXALIGN 7
#define FPCHIP 1
#define NSYMB 500
-#define BUFSIZ 8192
#define HISTSZ 20
#define NINCLUDE 10
#define NHUNK 10000
@@ -52,7 +51,7 @@
struct Io
{
Io* link;
- char b[BUFSIZ];
+ char b[IOUNIT];
char* p;
short c;
short f;
--- a/sys/src/cmd/2l/l.h
+++ b/sys/src/cmd/2l/l.h
@@ -116,7 +116,6 @@
NHUNK = 100000,
MINSIZ = 4,
STRINGSZ = 200,
- MAXIO = 8192,
MAXHIST = 20, /* limit of path elements for history symbols */
A6OFFSET = 32766
};
@@ -125,8 +124,8 @@
{
struct
{
- char obuf[MAXIO]; /* output buffer */
- uchar ibuf[MAXIO]; /* input buffer */
+ char obuf[IOUNIT]; /* output buffer */
+ uchar ibuf[IOUNIT]; /* input buffer */
} u;
char dbuf[1];
} buf;
--- a/sys/src/cmd/2l/obj.c
+++ b/sys/src/cmd/2l/obj.c
@@ -672,7 +672,7 @@
n = stop - good;
memmove(buf, good, stop - good);
stop = buf + n;
- n = MAXIO - n;
+ n = IOUNIT - n;
if(n > max)
n = max;
n = read(f, stop, n);
--- a/sys/src/cmd/5l/l.h
+++ b/sys/src/cmd/5l/l.h
@@ -197,7 +197,6 @@
NHUNK = 100000,
MINSIZ = 64,
NENT = 100,
- MAXIO = 8192,
MAXHIST = 20, /* limit of path elements for history symbols */
Roffset = 22, /* no. bits for offset in relocation address */
@@ -208,8 +207,8 @@
{
struct
{
- uchar obuf[MAXIO]; /* output buffer */
- uchar ibuf[MAXIO]; /* input buffer */
+ uchar obuf[IOUNIT]; /* output buffer */
+ uchar ibuf[IOUNIT]; /* input buffer */
} u;
char dbuf[1];
} buf;
--- a/sys/src/cmd/5l/obj.c
+++ b/sys/src/cmd/5l/obj.c
@@ -682,7 +682,7 @@
n = stop - good;
memmove(buf, good, stop - good);
stop = buf + n;
- n = MAXIO - n;
+ n = IOUNIT - n;
if(n > max)
n = max;
n = read(f, stop, n);
--- a/sys/src/cmd/6a/a.h
+++ b/sys/src/cmd/6a/a.h
@@ -14,7 +14,6 @@
#define MAXALIGN 7
#define FPCHIP 1
#define NSYMB 500
-#define BUFSIZ 8192
#define HISTSZ 20
#define NINCLUDE 10
#define NHUNK 10000
@@ -51,7 +50,7 @@
struct Io
{
Io* link;
- char b[BUFSIZ];
+ char b[IOUNIT];
char* p;
short c;
short f;
--- a/sys/src/cmd/6l/l.h
+++ b/sys/src/cmd/6l/l.h
@@ -118,7 +118,6 @@
MINSIZ = 8,
STRINGSZ = 200,
MINLC = 1,
- MAXIO = 8192,
MAXHIST = 20, /* limit of path elements for history symbols */
Yxxx = 0,
@@ -225,8 +224,8 @@
{
struct
{
- char obuf[MAXIO]; /* output buffer */
- uchar ibuf[MAXIO]; /* input buffer */
+ char obuf[IOUNIT]; /* output buffer */
+ uchar ibuf[IOUNIT]; /* input buffer */
} u;
char dbuf[1];
} buf;
--- a/sys/src/cmd/6l/obj.c
+++ b/sys/src/cmd/6l/obj.c
@@ -728,7 +728,7 @@
n = stop - good;
memmove(buf, good, stop - good);
stop = buf + n;
- n = MAXIO - n;
+ n = IOUNIT - n;
if(n > max)
n = max;
n = read(f, stop, n);
--- a/sys/src/cmd/7a/a.h
+++ b/sys/src/cmd/7a/a.h
@@ -17,7 +17,6 @@
#define MAXALIGN 7
#define FPCHIP 1
#define NSYMB 8192
-#define BUFSIZ 8192
#define HISTSZ 20
#define NINCLUDE 10
#define NHUNK 10000
@@ -48,7 +47,7 @@
struct Io
{
Io* link;
- char b[BUFSIZ];
+ char b[IOUNIT];
char* p;
short c;
short f;
--- a/sys/src/cmd/7l/l.h
+++ b/sys/src/cmd/7l/l.h
@@ -238,7 +238,6 @@
STRINGSZ = 200,
NHASH = 10007,
NHUNK = 100000,
- MAXIO = 8192,
MAXHIST = 20, /* limit of path elements for history symbols */
};
@@ -246,8 +245,8 @@
{
struct
{
- uchar obuf[MAXIO]; /* output buffer */
- uchar ibuf[MAXIO]; /* input buffer */
+ uchar obuf[IOUNIT]; /* output buffer */
+ uchar ibuf[IOUNIT]; /* input buffer */
} u;
char dbuf[1];
} buf;
--- a/sys/src/cmd/7l/obj.c
+++ b/sys/src/cmd/7l/obj.c
@@ -575,7 +575,7 @@
n = stop - good;
memmove(buf, good, stop - good);
stop = buf + n;
- n = MAXIO - n;
+ n = IOUNIT - n;
if(n > max)
n = max;
n = read(f, stop, n);
--- a/sys/src/cmd/8a/a.h
+++ b/sys/src/cmd/8a/a.h
@@ -14,7 +14,6 @@
#define MAXALIGN 7
#define FPCHIP 1
#define NSYMB 500
-#define BUFSIZ 8192
#define HISTSZ 20
#define NINCLUDE 10
#define NHUNK 10000
@@ -51,7 +50,7 @@
struct Io
{
Io* link;
- char b[BUFSIZ];
+ char b[IOUNIT];
char* p;
short c;
short f;
--- a/sys/src/cmd/8l/l.h
+++ b/sys/src/cmd/8l/l.h
@@ -110,7 +110,6 @@
MINSIZ = 4,
STRINGSZ = 200,
MINLC = 1,
- MAXIO = 8192,
MAXHIST = 20, /* limit of path elements for history symbols */
Yxxx = 0,
@@ -199,8 +198,8 @@
{
struct
{
- char obuf[MAXIO]; /* output buffer */
- uchar ibuf[MAXIO]; /* input buffer */
+ char obuf[IOUNIT]; /* output buffer */
+ uchar ibuf[IOUNIT]; /* input buffer */
} u;
char dbuf[1];
} buf;
--- a/sys/src/cmd/8l/obj.c
+++ b/sys/src/cmd/8l/obj.c
@@ -716,7 +716,7 @@
n = stop - good;
memmove(buf, good, stop - good);
stop = buf + n;
- n = MAXIO - n;
+ n = IOUNIT - n;
if(n > max)
n = max;
n = read(f, stop, n);
--- a/sys/src/cmd/ar.c
+++ b/sys/src/cmd/ar.c
@@ -1087,7 +1087,7 @@
{
Armember *bp;
int i;
- char buf[8192];
+ char buf[IOUNIT];
if (ap->paged) { /* copy from disk */
seek(ap->fd, 0, 0);
--- a/sys/src/cmd/audio/mp3enc/mpglib_interface.c
+++ b/sys/src/cmd/audio/mp3enc/mpglib_interface.c
@@ -47,7 +47,7 @@
{ 0, 384, 1152, 1152 }, /* MPEG-1 */
{ 0, 384, 1152, 576 } /* MPEG-2(.5) */
};
- static char out [8192];
+ static char out [IOUNIT];
signed short int* p = (signed short int*) out;
int processed_bytes;
int processed_samples; // processed samples per channel
--- a/sys/src/cmd/aux/consolefs.c
+++ b/sys/src/cmd/aux/consolefs.c
@@ -162,7 +162,7 @@
char *consoledb = "/lib/ndb/consoledb";
char *mntpt = "/mnt/consoles";
-int messagesize = 8192+IOHDRSZ;
+int messagesize = IOUNIT+IOHDRSZ;
void
fatal(char *fmt, ...)
@@ -760,8 +760,8 @@
return;
}
messagesize = r->f.msize;
- if(messagesize > 8192+IOHDRSZ)
- messagesize = 8192+IOHDRSZ;
+ if(messagesize > IOUNIT+IOHDRSZ)
+ messagesize = IOUNIT+IOHDRSZ;
r->f.msize = messagesize;
if(strncmp(r->f.version, "9P", 2) != 0)
r->f.version = "unknown";
--- a/sys/src/cmd/bzip2/bunzip2.c
+++ b/sys/src/cmd/bzip2/bunzip2.c
@@ -125,8 +125,8 @@
bunzip(int ofd, char *ofile, Biobuf *bin)
{
int e, n, done, onemore;
- char buf[8192];
- char obuf[8192];
+ char buf[IOUNIT];
+ char obuf[IOUNIT];
Biobuf bout;
bz_stream strm;
--- a/sys/src/cmd/bzip2/bzip2.c
+++ b/sys/src/cmd/bzip2/bzip2.c
@@ -132,8 +132,8 @@
bzip(char *file, long mtime, int ifd, Biobuf *bout)
{
int e, n, done, onemore;
- char buf[8192];
- char obuf[8192];
+ char buf[IOUNIT];
+ char obuf[IOUNIT];
Biobuf bin;
bz_stream strm;
--- 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/cc/cc.h
+++ b/sys/src/cmd/cc/cc.h
@@ -19,7 +19,6 @@
typedef struct Bits Bits;
#define NHUNK 50000L
-#define BUFSIZ 8192
#define NSYMB 1500
#define NHASH 1024
#define STRINGSZ 200
@@ -149,7 +148,7 @@
{
Io* link;
char* p;
- char b[BUFSIZ];
+ char b[IOUNIT];
short c;
short f;
};
--- a/sys/src/cmd/cc/lex.c
+++ b/sys/src/cmd/cc/lex.c
@@ -1310,7 +1310,7 @@
return EOF;
if(i->f < 0)
goto pop;
- fi.c = read(i->f, i->b, BUFSIZ) - 1;
+ fi.c = read(i->f, i->b, IOUNIT) - 1;
if(fi.c < 0) {
close(i->f);
linehist(0, 0);
--- a/sys/src/cmd/cc/lexbody
+++ b/sys/src/cmd/cc/lexbody
@@ -558,7 +558,7 @@
return EOF;
if(i->f < 0)
goto pop;
- fi.c = read(i->f, i->b, BUFSIZ) - 1;
+ fi.c = read(i->f, i->b, IOUNIT) - 1;
if(fi.c < 0) {
close(i->f);
linehist(0, 0);
--- a/sys/src/cmd/cfs/cfs.c
+++ b/sys/src/cmd/cfs/cfs.c
@@ -49,12 +49,11 @@
char statbuf[2048];
int statlen;
-#define MAXFDATA 8192 /* i/o size for read/write */
-int messagesize = MAXFDATA+IOHDRSZ;
+int messagesize = IOUNIT+IOHDRSZ;
-uchar datasnd[MAXFDATA + IOHDRSZ];
-uchar datarcv[MAXFDATA + IOHDRSZ];
+uchar datasnd[IOUNIT + IOHDRSZ];
+uchar datarcv[IOUNIT + IOHDRSZ];
Qid rootqid;
Qid ctlqid = {0x5555555555555555LL, 0, 0};
@@ -495,7 +494,7 @@
long n;
vlong off, first;
char *cp;
- char data[MAXFDATA];
+ char data[IOUNIT];
Ibuf *b;
off = c.thdr.offset;
@@ -607,7 +606,7 @@
rwrite(Mfile *mf)
{
Ibuf *b;
- char buf[MAXFDATA];
+ char buf[IOUNIT];
if(statson && ctltest(mf)){
sendreply("read only");
--- 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/derp.c
+++ b/sys/src/cmd/derp.c
@@ -43,14 +43,10 @@
return v;
}
-enum {
- BUFSIZE = 8*1024,
-};
-
int
cmpfile(char *a, char *b)
{
- static uchar buf1[BUFSIZE], buf2[BUFSIZE];
+ static uchar buf1[IOUNIT], buf2[IOUNIT];
int r, n, m, fd1, fd2;
if((fd1 = open(a, OREAD)) < 0)
--- a/sys/src/cmd/diff/main.c
+++ b/sys/src/cmd/diff/main.c
@@ -81,7 +81,7 @@
{
int fd, i;
char *p;
- char buf[8192];
+ char buf[IOUNIT];
atnotify(catch, 1);
p = mktemp(tmp[whichtmp++]);
--- a/sys/src/cmd/disk/9660/write.c
+++ b/sys/src/cmd/disk/9660/write.c
@@ -75,7 +75,7 @@
writefiles(Dump *d, Cdimg *cd, Direc *direc)
{
int i;
- uchar buf[8192], digest[MD5dlen];
+ uchar buf[IOUNIT], digest[MD5dlen];
ulong length, n, start;
Biobuf *b;
DigestState *s;
--- a/sys/src/cmd/disk/format.c
+++ b/sys/src/cmd/disk/format.c
@@ -397,11 +397,11 @@
{
long m, tot;
- /* write 8k at a time, to be nice to the disk subsystem */
+ /* write IOUNIT at a time, to be nice to the disk subsystem */
for(tot=0; tot<n; tot+=m){
m = n - tot;
- if(m > 8192)
- m = 8192;
+ if(m > IOUNIT)
+ m = IOUNIT;
if(write(fd, (uchar*)buf+tot, m) != m)
break;
}
--- a/sys/src/cmd/dossrv/dosfs.h
+++ b/sys/src/cmd/dossrv/dosfs.h
@@ -1,7 +1,7 @@
enum
{
- Maxfdata = 8192,
- Maxiosize = IOHDRSZ+Maxfdata,
+ Maxfdata = IOUNIT,
+ Maxiosize = IOHDRSZ+IOUNIT,
};
extern Fcall *req;
--- 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/fcp.c
+++ b/sys/src/cmd/fcp.c
@@ -1,6 +1,5 @@
#include <u.h>
#include <libc.h>
-#define DEFB (8*1024)
#define Nwork 8
int buflen;
@@ -134,7 +133,7 @@
buflen = iounit(fdf);
if(buflen <= 0)
- buflen = DEFB;
+ buflen = IOUNIT;
if(copy1(fdf, fdt, from, to)==0 && (xflag || gflag || uflag)){
nulldir(&dirt);
--- a/sys/src/cmd/ip/ftpfs/ftpfs.h
+++ b/sys/src/cmd/ip/ftpfs/ftpfs.h
@@ -107,6 +107,6 @@
#define TIMEOUT 5*60
#define DMSYML 0x10000000
-#define MAXFDATA 8192
+#define MAXFDATA IOUNIT
extern char net[]; /* network for connections */
--- a/sys/src/cmd/ip/hproxy.c
+++ b/sys/src/cmd/ip/hproxy.c
@@ -1,8 +1,12 @@
#include <u.h>
#include <libc.h>
-enum { bufsize = 8*1024 };
-char buf[bufsize+1], addr[128], *proto, *host, *port, *path;
+char buf[IOUNIT+1];
+char addr[128];
+char *proto;
+char *host;
+char *port;
+char *path;
void
main(void)
@@ -13,9 +17,9 @@
/* read all the headers */
n = 0;
do {
- if(n >= bufsize)
+ if(n >= IOUNIT)
return;
- if((r = read(0, buf+n, bufsize-n)) <= 0)
+ if((r = read(0, buf+n, IOUNIT-n)) <= 0)
return;
n += r;
buf[n] = 0;
--- a/sys/src/cmd/ka/a.h
+++ b/sys/src/cmd/ka/a.h
@@ -12,7 +12,6 @@
#define MAXALIGN 7
#define FPCHIP 1
#define NSYMB 500
-#define BUFSIZ 8192
#define HISTSZ 20
#define NINCLUDE 10
#define NHUNK 10000
@@ -43,7 +42,7 @@
struct Io
{
Io* link;
- char b[BUFSIZ];
+ char b[IOUNIT];
char* p;
short c;
short f;
--- a/sys/src/cmd/kbmap.c
+++ b/sys/src/cmd/kbmap.c
@@ -137,7 +137,7 @@
writemap(char *file)
{
int i, fd, ofd;
- char buf[8192];
+ char buf[IOUNIT];
if((fd = open(file, OREAD)) < 0){
fprint(2, "cannot open %s: %r", file);
--- a/sys/src/cmd/kl/l.h
+++ b/sys/src/cmd/kl/l.h
@@ -96,7 +96,6 @@
FPCHIP = 1,
BIG = 4096-8,
STRINGSZ = 200,
- MAXIO = 8192,
MAXHIST = 20, /* limit of path elements for history symbols */
DATBLK = 1024,
NHASH = 10007,
@@ -178,8 +177,8 @@
{
struct
{
- uchar obuf[MAXIO]; /* output buffer */
- uchar ibuf[MAXIO]; /* input buffer */
+ uchar obuf[IOUNIT]; /* output buffer */
+ uchar ibuf[IOUNIT]; /* input buffer */
} u;
char dbuf[1];
} buf;
--- a/sys/src/cmd/kl/obj.c
+++ b/sys/src/cmd/kl/obj.c
@@ -587,7 +587,7 @@
n = stop - good;
memmove(buf, good, stop - good);
stop = buf + n;
- n = MAXIO - n;
+ n = IOUNIT - n;
if(n > max)
n = max;
n = read(f, stop, n);
--- a/sys/src/cmd/lens.c
+++ b/sys/src/cmd/lens.c
@@ -217,7 +217,7 @@
int x, y, xx, yy, dd, i;
int dx, dy;
int xoff, yoff;
- uchar out[8192];
+ uchar out[IOUNIT];
uchar sp[4];
dx = (Dx(tmp->r)+mag-1)/mag;
--- 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/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/page.c
+++ b/sys/src/cmd/page.c
@@ -55,7 +55,7 @@
enum {
NPROC = 8,
- NBUF = 8*1024,
+ NBUF = IOUNIT,
NPATH = 1024,
};
--- a/sys/src/cmd/paqfs/paqfs.c
+++ b/sys/src/cmd/paqfs/paqfs.c
@@ -62,7 +62,7 @@
Fcall rhdr, thdr;
int blocksize;
int cachesize = 20;
-int mesgsize = 8*1024 + IOHDRSZ;
+int mesgsize = IOUNIT + IOHDRSZ;
Paq *root, *rootfile;
Block *cache;
ulong cacheage;
--- a/sys/src/cmd/pump.c
+++ b/sys/src/cmd/pump.c
@@ -37,7 +37,7 @@
char *file;
kilo = 5000;
- obsize = ibsize = 8*1024;
+ obsize = ibsize = IOUNIT;
dsize = 0;
fo = 1;
--- a/sys/src/cmd/qa/a.h
+++ b/sys/src/cmd/qa/a.h
@@ -12,7 +12,6 @@
#define MAXALIGN 7
#define FPCHIP 1
#define NSYMB 8192
-#define BUFSIZ 8192
#define HISTSZ 20
#define NINCLUDE 10
#define NHUNK 10000
@@ -43,7 +42,7 @@
struct Io
{
Io* link;
- char b[BUFSIZ];
+ char b[IOUNIT];
char* p;
short c;
short f;
--- a/sys/src/cmd/ql/l.h
+++ b/sys/src/cmd/ql/l.h
@@ -93,7 +93,6 @@
FPCHIP = 1,
BIG = 32768-8,
STRINGSZ = 200,
- MAXIO = 8192,
MAXHIST = 20, /* limit of path elements for history symbols */
DATBLK = 1024,
NHASH = 10007,
@@ -171,8 +170,8 @@
{
struct
{
- uchar obuf[MAXIO]; /* output buffer */
- uchar ibuf[MAXIO]; /* input buffer */
+ uchar obuf[IOUNIT]; /* output buffer */
+ uchar ibuf[IOUNIT]; /* input buffer */
} u;
char dbuf[1];
} buf;
--- a/sys/src/cmd/ql/obj.c
+++ b/sys/src/cmd/ql/obj.c
@@ -670,7 +670,7 @@
n = stop - good;
memmove(buf, good, stop - good);
stop = buf + n;
- n = MAXIO - n;
+ n = IOUNIT - n;
if(n > max)
n = max;
n = read(f, stop, n);
--- a/sys/src/cmd/qr.c
+++ b/sys/src/cmd/qr.c
@@ -699,7 +699,7 @@
void
main(int argc, char **argv)
{
- uchar buf[8192];
+ uchar buf[IOUNIT];
int rc;
int ver, lev, mode, s;
char *c;
--- a/sys/src/cmd/ratrace.c
+++ b/sys/src/cmd/ratrace.c
@@ -14,7 +14,7 @@
typedef struct Msg Msg;
struct Msg {
int pid;
- char buf[8*1024];
+ char buf[IOUNIT];
};
typedef struct Reader Reader;
--- a/sys/src/cmd/rc/io.c
+++ b/sys/src/cmd/rc/io.c
@@ -3,10 +3,6 @@
#include "io.h"
#include "fns.h"
-enum {
- NBUF = 8192,
-};
-
void
vpfmt(io *f, char *fmt, va_list ap)
{
@@ -247,7 +243,7 @@
io*
openiofd(int fd)
{
- return newio(emalloc(NBUF), 0, fd);
+ return newio(emalloc(IOUNIT), 0, fd);
}
/*
@@ -279,7 +275,7 @@
dotrap();
}
f->bufp = f->buf;
- f->ebuf = f->buf+NBUF;
+ f->ebuf = f->buf+IOUNIT;
}
}
@@ -294,7 +290,7 @@
emptyiobuf(io *f)
{
int n;
- if(f->fd<0 || (n = Read(f->fd, f->buf, NBUF))<=0) return EOF;
+ if(f->fd<0 || (n = Read(f->fd, f->buf, IOUNIT))<=0) return EOF;
f->bufp = f->buf;
f->ebuf = f->buf + n;
return *f->bufp++;
--- a/sys/src/cmd/read.c
+++ b/sys/src/cmd/read.c
@@ -56,7 +56,7 @@
void
chars(int fd, char *file)
{
- char buf[8*1024];
+ char buf[IOUNIT];
vlong m;
int n;
--- 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/sum.c
+++ b/sys/src/cmd/sum.c
@@ -45,7 +45,7 @@
int n;
ulong sum;
uvlong fsize;
- char buf[8*1024];
+ char buf[IOUNIT];
if(file){
if((fd = open(file, OREAD)) < 0){
--- a/sys/src/cmd/tee.c
+++ b/sys/src/cmd/tee.c
@@ -12,7 +12,7 @@
int uflag;
int aflag;
-char in[8192];
+char in[IOUNIT];
int intignore(void*, char*);
--- a/sys/src/cmd/touchfs.c
+++ b/sys/src/cmd/touchfs.c
@@ -5,7 +5,7 @@
void
Bpass(Biobuf *bin, Biobuf *bout, int n)
{
- char buf[8192];
+ char buf[IOUNIT];
int m;
while(n > 0) {
--- a/sys/src/cmd/upas/Mail/mail.h
+++ b/sys/src/cmd/upas/Mail/mail.h
@@ -6,7 +6,7 @@
enum {
Stack = 64*1024,
- Bufsz = 8192,
+ Bufsz = IOUNIT,
Eventsz = 256*UTFmax,
Subjlen = 56,
};
--- a/sys/src/cmd/upas/common/folder.c
+++ b/sys/src/cmd/upas/common/folder.c
@@ -338,10 +338,10 @@
char *buf;
int n, m;
- buf = malloc(8192);
+ buf = malloc(IOUNIT);
for(;;){
m = 0;
- n = Bread(in, buf, 8192);
+ n = Bread(in, buf, IOUNIT);
if(n <= 0)
break;
m = Bwrite(out, buf, n);
--- a/sys/src/cmd/va/a.h
+++ b/sys/src/cmd/va/a.h
@@ -12,7 +12,6 @@
#define MAXALIGN 7
#define FPCHIP 1
#define NSYMB 8192
-#define BUFSIZ 8192
#define HISTSZ 20
#define NINCLUDE 10
#define NHUNK 10000
@@ -43,7 +42,7 @@
struct Io
{
Io* link;
- char b[BUFSIZ];
+ char b[IOUNIT];
char* p;
short c;
short f;
--- a/sys/src/cmd/vl/l.h
+++ b/sys/src/cmd/vl/l.h
@@ -163,7 +163,6 @@
NHUNK = 100000,
MINSIZ = 64,
NENT = 100,
- MAXIO = 8192,
MAXHIST = 20, /* limit of path elements for history symbols */
};
@@ -171,8 +170,8 @@
{
struct
{
- uchar obuf[MAXIO]; /* output buffer */
- uchar ibuf[MAXIO]; /* input buffer */
+ uchar obuf[IOUNIT]; /* output buffer */
+ uchar ibuf[IOUNIT]; /* input buffer */
} u;
char dbuf[1];
} buf;
--- a/sys/src/cmd/vl/obj.c
+++ b/sys/src/cmd/vl/obj.c
@@ -637,7 +637,7 @@
n = stop - good;
memmove(buf, good, stop - good);
stop = buf + n;
- n = MAXIO - n;
+ n = IOUNIT - n;
if(n > max)
n = max;
n = read(f, stop, n);
--- a/sys/src/cmd/vnc/devdraw.c
+++ b/sys/src/cmd/vnc/devdraw.c
@@ -36,7 +36,7 @@
#define NHASH (1<<5)
#define HASHMASK (NHASH-1)
-#define IOUNIT (64*1024)
+#define MAXBUF (64*1024)
typedef struct Client Client;
typedef struct Draw Draw;
@@ -1023,7 +1023,7 @@
if(c->qid.type & QTDIR){
c = devopen(c, omode, 0, 0, drawgen);
- c->iounit = IOUNIT;
+ c->iounit = MAXBUF;
}
dlock();
@@ -1080,7 +1080,7 @@
c->mode = openmode(omode);
c->flag |= COPEN;
c->offset = 0;
- c->iounit = IOUNIT;
+ c->iounit = MAXBUF;
return c;
}
--- a/sys/src/cmd/vnc/exportfs.c
+++ b/sys/src/cmd/vnc/exportfs.c
@@ -12,8 +12,7 @@
enum
{
Nfidhash = 32,
- Maxfdata = 8192,
- Maxrpc = IOHDRSZ + Maxfdata,
+ Maxrpc = IOHDRSZ + IOUNIT,
};
struct Export
--- a/sys/src/cmd/wc.c
+++ b/sys/src/cmd/wc.c
@@ -8,7 +8,6 @@
*/
#include <u.h>
#include <libc.h>
-#define NBUF (8*1024)
uvlong nline, tnline; int pline;
uvlong nword, tnword; int pword;
uvlong nrune, tnrune; int prune;
@@ -292,7 +291,7 @@
count(int f, char *name)
{
int n;
- uchar buf[NBUF];
+ uchar buf[IOUNIT];
uchar *bufp, *ebuf;
uchar *state = statesp;
@@ -303,7 +302,7 @@
nchar = 0;
for(;;){
- n=read(f, buf, NBUF);
+ n=read(f, buf, sizeof(buf));
if(n<=0)
break;
nchar+=n;
--- a/sys/src/cmd/webfs/http.c
+++ b/sys/src/cmd/webfs/http.c
@@ -28,7 +28,7 @@
int tunnel;
int len;
char addr[128];
- char buf[8192+2];
+ char buf[IOUNIT+UTFmax];
};
struct Hpool
@@ -549,7 +549,7 @@
http(char *m, Url *u, Key *shdr, Buq *qbody, Buq *qpost)
{
int i, l, n, try, pid, fd, cfd, needlength, chunked, retry, nobody, badauth;
- char *s, *x, buf[8192+2], status[256], method[16], *host;
+ char *s, *x, buf[IOUNIT+UTFmax], status[256], method[16], *host;
vlong length, offset;
Url ru, tu, *nu;
Key *k, *rhdr;
--- a/sys/src/games/midi.c
+++ b/sys/src/games/midi.c
@@ -16,7 +16,7 @@
int fd, ofd, div, tempo = 500000, ntrack;
uvlong T;
int freq[128];
-uchar out[8192], *outp = out;
+uchar out[IOUNIT], *outp = out;
void *
emallocz(int size)
--- a/sys/src/games/wadfs.c
+++ b/sys/src/games/wadfs.c
@@ -11,7 +11,7 @@
Nhdr = Nsig+4+4,
Ndict = 4+4+8,
Nname = 8,
- Nbuf = 8192,
+ Nbuf = IOUNIT,
Maxsz = 0x7fffffff - Nhdr
};
--- a/sys/src/lib9p/srv.c
+++ b/sys/src/lib9p/srv.c
@@ -830,7 +830,7 @@
if(srv->rpool == nil)
srv->rpool = allocreqpool(srv->destroyreq);
if(srv->msize == 0)
- srv->msize = 8192+IOHDRSZ;
+ srv->msize = IOUNIT+IOHDRSZ;
changemsize(srv, srv->msize);
--- a/sys/src/libdisk/proto.c
+++ b/sys/src/libdisk/proto.c
@@ -6,11 +6,6 @@
#include <disk.h>
#include <regexp.h>
-enum {
- LEN = 8*1024,
- HUNKS = 128,
-};
-
typedef struct File File;
struct File{
char *new;
--- a/sys/src/libdraw/openfont.c
+++ b/sys/src/libdraw/openfont.c
@@ -5,18 +5,17 @@
static char*
readfile(char *name)
{
- enum { HUNK = 8*1024, };
int f, n, r;
char *s, *p;
n = 0;
r = -1;
- if((s = malloc(HUNK)) != nil){
+ if((s = malloc(IOUNIT)) != nil){
if((f = open(name, OREAD|OCEXEC)) >= 0){
- while((r = read(f, s+n, HUNK)) > 0){
+ while((r = read(f, s+n, IOUNIT)) > 0){
n += r;
r = -1;
- if((p = realloc(s, n+HUNK)) == nil)
+ if((p = realloc(s, n+IOUNIT)) == nil)
break;
s = p;
}
--- a/sys/src/libdraw/readimage.c
+++ b/sys/src/libdraw/readimage.c
@@ -30,7 +30,7 @@
if(d != nil)
chunk = d->bufsize - 32; /* a little room for header */
else
- chunk = 8192;
+ chunk = IOUNIT;
/*
* distinguish new channel descriptor from old ldepth.
--- a/sys/src/libflate/deflate.c
+++ b/sys/src/libflate/deflate.c
@@ -50,7 +50,7 @@
* internal lz paramaters
*/
DeflateOut = 4096, /* output buffer size */
- BlockSize = 8192, /* attempted input read quanta */
+ BlockSize = IOUNIT, /* attempted input read quanta */
DeflateBlock = DeflateMaxBlock & ~(BlockSize - 1),
MinMatchMaxOff = 4096, /* max profitable offset for small match;
* assumes 8 bits for len, 5+10 for offset
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [9front] iounit: bump it across the board
2022-06-09 3:47 [9front] iounit: bump it across the board ori
@ 2022-06-09 4:42 ` noam
2022-06-09 13:36 ` ori
0 siblings, 1 reply; 8+ messages in thread
From: noam @ 2022-06-09 4:42 UTC (permalink / raw)
To: 9front
Quoth ori@eigenstate.org:
> This patch bumps up the iounit in the kernel to 32k, and
> introduces the IOUNIT constant to take advantage of it.
Any reason I shouldn't bump it to 1M or something locally?
(in the kernel and, in userspace, in non-libthread applications)
- Noam Preil
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [9front] iounit: bump it across the board
2022-06-09 4:42 ` noam
@ 2022-06-09 13:36 ` ori
2022-06-09 13:40 ` ori
0 siblings, 1 reply; 8+ messages in thread
From: ori @ 2022-06-09 13:36 UTC (permalink / raw)
To: 9front
Quoth noam@pixelhero.dev:
> Quoth ori@eigenstate.org:
> > This patch bumps up the iounit in the kernel to 32k, and
> > introduces the IOUNIT constant to take advantage of it.
>
> Any reason I shouldn't bump it to 1M or something locally?
> (in the kernel and, in userspace, in non-libthread applications)
>
> - Noam Preil
>
Try it out, but keep in mind that on a slower connection,
you have to wait for the entire iounit to get sent before
you can send the next request -- so, eg, tethering over
wifi means that your file IO needs to go through fully
before your next mouse message can get sent.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [9front] iounit: bump it across the board
2022-06-09 13:36 ` ori
@ 2022-06-09 13:40 ` ori
2022-06-09 14:10 ` hiro
2022-06-09 15:08 ` noam
0 siblings, 2 replies; 8+ messages in thread
From: ori @ 2022-06-09 13:40 UTC (permalink / raw)
To: 9front
Quoth ori@eigenstate.org:
> Quoth noam@pixelhero.dev:
> > Quoth ori@eigenstate.org:
> > > This patch bumps up the iounit in the kernel to 32k, and
> > > introduces the IOUNIT constant to take advantage of it.
> >
> > Any reason I shouldn't bump it to 1M or something locally?
> > (in the kernel and, in userspace, in non-libthread applications)
> >
> > - Noam Preil
> >
>
> Try it out, but keep in mind that on a slower connection,
> you have to wait for the entire iounit to get sent before
> you can send the next request -- so, eg, tethering over
> wifi means that your file IO needs to go through fully
> before your next mouse message can get sent.
>
phrased poorly -- but, if your mouse and file system share
a 9p channel (ie, exportfs), then large messages will block
all other communication.
the other reason is that you can have a lot of in flight
9p buffers at once; up to 64k per connection. Most of the
time there will be fewer, but not always. But even a few
hundred 1 meg buffers is a lot of memory on smaller modern
systems.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [9front] iounit: bump it across the board
2022-06-09 13:40 ` ori
@ 2022-06-09 14:10 ` hiro
2022-06-09 15:08 ` noam
1 sibling, 0 replies; 8+ messages in thread
From: hiro @ 2022-06-09 14:10 UTC (permalink / raw)
To: 9front
even if they don't share a 9p channel they can block other
communication, if we end up bandwidth limited.
normally up to limits of the tcp fairness mechanism.
On 6/9/22, ori@eigenstate.org <ori@eigenstate.org> wrote:
> Quoth ori@eigenstate.org:
>> Quoth noam@pixelhero.dev:
>> > Quoth ori@eigenstate.org:
>> > > This patch bumps up the iounit in the kernel to 32k, and
>> > > introduces the IOUNIT constant to take advantage of it.
>> >
>> > Any reason I shouldn't bump it to 1M or something locally?
>> > (in the kernel and, in userspace, in non-libthread applications)
>> >
>> > - Noam Preil
>> >
>>
>> Try it out, but keep in mind that on a slower connection,
>> you have to wait for the entire iounit to get sent before
>> you can send the next request -- so, eg, tethering over
>> wifi means that your file IO needs to go through fully
>> before your next mouse message can get sent.
>>
>
> phrased poorly -- but, if your mouse and file system share
> a 9p channel (ie, exportfs), then large messages will block
> all other communication.
>
> the other reason is that you can have a lot of in flight
> 9p buffers at once; up to 64k per connection. Most of the
> time there will be fewer, but not always. But even a few
> hundred 1 meg buffers is a lot of memory on smaller modern
> systems.
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [9front] iounit: bump it across the board
2022-06-09 13:40 ` ori
2022-06-09 14:10 ` hiro
@ 2022-06-09 15:08 ` noam
2022-06-09 16:31 ` ori
1 sibling, 1 reply; 8+ messages in thread
From: noam @ 2022-06-09 15:08 UTC (permalink / raw)
To: 9front
Quoth ori@eigenstate.org:
> Quoth ori@eigenstate.org:
> the other reason is that you can have a lot of in flight
> 9p buffers at once; up to 64k per connection. Most of the
> time there will be fewer, but not always. But even a few
> hundred 1 meg buffers is a lot of memory on smaller modern
> systems.
Are those buffers static? If they're dynamically allocated, I
doubt it'd be an issue; I'm thinking of a use case where e.g.
file systems use large iounit but drivers use a small one.
That seems best of both worlds: minimal consumption where more
isn't needed, higher resource usage where it's beneficial and
cheap.
- Noam Preil
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [9front] iounit: bump it across the board
2022-06-09 15:08 ` noam
@ 2022-06-09 16:31 ` ori
2022-07-03 0:41 ` ori
0 siblings, 1 reply; 8+ messages in thread
From: ori @ 2022-06-09 16:31 UTC (permalink / raw)
To: 9front
Quoth noam@pixelhero.dev:
>
> Are those buffers static? If they're dynamically allocated, I
> doubt it'd be an issue; I'm thinking of a use case where e.g.
> file systems use large iounit but drivers use a small one.
>
> That seems best of both worlds: minimal consumption where more
> isn't needed, higher resource usage where it's beneficial and
> cheap.
Try it out and report back -- tuning this easily is why I added
the constant to libc.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [9front] iounit: bump it across the board
2022-06-09 16:31 ` ori
@ 2022-07-03 0:41 ` ori
0 siblings, 0 replies; 8+ messages in thread
From: ori @ 2022-07-03 0:41 UTC (permalink / raw)
To: 9front
Quoth ori@eigenstate.org:
> Quoth noam@pixelhero.dev:
> >
> > Are those buffers static? If they're dynamically allocated, I
> > doubt it'd be an issue; I'm thinking of a use case where e.g.
> > file systems use large iounit but drivers use a small one.
> >
> > That seems best of both worlds: minimal consumption where more
> > isn't needed, higher resource usage where it's beneficial and
> > cheap.
>
> Try it out and report back -- tuning this easily is why I added
> the constant to libc.
>
anyone give this a shot yet?
(not going to commit until it's been good and tested for a few
people)
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-07-03 0:42 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-09 3:47 [9front] iounit: bump it across the board ori
2022-06-09 4:42 ` noam
2022-06-09 13:36 ` ori
2022-06-09 13:40 ` ori
2022-06-09 14:10 ` hiro
2022-06-09 15:08 ` noam
2022-06-09 16:31 ` ori
2022-07-03 0:41 ` ori
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).