Unix Technical Forum

SEO

vBulletin Search Engine Optimization


Go Back   Unix Technical Forum > Unix Operating Systems > OpenBSD > mailing.openbsd.tech

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 05-07-2008, 10:14 AM
Janne Johansson
 
Posts: n/a
Default pwd_mkdb(8) and db cachesizes.

Current behaviour of pwd_mkdb(8) in regards to how much ram to use for
DB cache is (if I understand it correctly) to use 2M cache, up to the
point where the input filesize is larger than 100k. If it is above 100k,
it uses "filesize * 20" bytes, but only upto 12M, and from there it
sticks to 12M regardless of how large the master.passwd file is.

For my insanely large passwd's, this costs me real time, since the DB
will trade memory usage for speed. I proposed a while ago to just remove
the 12M ceiling but the responses were along the "think of them poor
small machines", so here is another patch that goes:

1. Use 2M by default
2. If file is >100k, check how much physmem there is
3. If physmem is below 64M, cap at 12M ram usage
4. Otherwise use input filesize * 20 bytes.

This halves the time on my 108k users master.passwd when run on MFS, I
know it makes even more difference on machines with slow disks.
Using /usr/bin/time -l on it shows the block output operations to lessen
quite a bit if you get the correct cache size set.

In case my current mailer mangles the diff, it is available here for
laughs:
http://people.su.se/~jj/obsd/pwd_mkdb.c.diff

Index: pwd_mkdb.c
================================================== =================
RCS file: /usr/cvs//src/usr.sbin/pwd_mkdb/pwd_mkdb.c,v
retrieving revision 1.39
diff -u -r1.39 pwd_mkdb.c
--- pwd_mkdb.c 17 Mar 2008 20:30:16 -0000 1.39
+++ pwd_mkdb.c 5 May 2008 08:44:06 -0000
@@ -47,6 +47,7 @@

#include <sys/param.h>
#include <sys/stat.h>
+#include <sys/sysctl.h>

#include <db.h>
#include <err.h>
@@ -190,8 +191,23 @@
error(pname);

/* Tweak openinfo values for large passwd files. */
- if (st.st_size > (off_t)100*1024)
- openinfo.cachesize = MIN(st.st_size * 20, (off_t)12*1024*1024);
+ if (st.st_size > (off_t)100*1024) {
+ int mib[2];
+ size_t len;
+ int64_t physmem64;
+ mib[0]=CTL_HW;
+ mib[1]=HW_PHYSMEM64;
+
+ len=sizeof(physmem64);
+ if (sysctl(mib, 2, &physmem64, &len, NULL, 0) == -1)
+ err(1, "Failed sysctl");
+ if (physmem64 >= 64*1024*1024) {
+ openinfo.cachesize = st.st_size * 20;
+ } else {
+ openinfo.cachesize =
+ MIN(st.st_size * 20, (off_t)12*1024*1024);
+ }
+ }
if (st.st_size / 128 > openinfo.nelem)
openinfo.nelem = st.st_size / 128;

/ jj@

[demime 1.01d removed an attachment of type application/pgp-signature which had a name of signature.asc]

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT. The time now is 04:48 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145