home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / cnfgls13.zip / CNFGLS13.NOT < prev    next >
Text File  |  1992-12-08  |  33KB  |  607 lines

  1. :hp1.IBMLAN.INI File Parameter Interdependences:ehp1.
  2. .sp
  3. :p.Once you decide you are going to take the plunge and dig into the
  4. IBMLAN.INI file, your first question upon looking at the listing of it
  5. might well be, "Where do I start?"
  6. :p.
  7. Well, there are many choices!  Let's skip down to the maxusers parameter
  8. and begin there.  What goes into this number?  Really, it is fairly easy.
  9. Maxusers is the total number of requesters (DOS and OS/2) that will be
  10. accessing the Server plus, and this is not always clear to everybody,
  11. the number of other Servers it will talk to.  These 'other Servers' may
  12. be just the Domain Controller if you are working with an Additional
  13. Server.  For the Domain Controller itself, it counts all Additional
  14. Servers in the Domain.  It does not count any External Resources Server,
  15. though, since only the Requesters communicate with them.  The Domain
  16. Controller, via its External Resources definitions, tells the Requester
  17. what to send to the External Server to get access to its resources, but
  18. it never talks to the External Server itself.  If you are using DLRINST,
  19. add one (1) to maxusers.
  20. :p.
  21. So, if you want to set up a Domain Controller, and you have 50 users
  22. and 2 Additional Servers, maxusers is 52.  If you are cautious, it is OK
  23. to say 53 or more, but 52 will do the job.
  24. :p.
  25. Now, once you've made that change a whole new world is about to open up
  26. to you.  The world of parameter interdependencies.
  27. :p.A user, by
  28. definition, uses things, and that means you have more work to do.
  29. For instance, before the Server and user can communicate, they must
  30. have a NETBIOS Session established.  Establishing it is automatic, but
  31. defining it isn't!  There are two places you have to define the Session,
  32. the INI file's NET1 line (the x1 parameter) and the Communications
  33. Manager's NETBIOS configuration.  One Session is required in each of
  34. these for each maxuser value.  Easy enough so far, 'eh.
  35. :p.
  36. But, it isn't that simple.  Maxusers counts the number of requesters and
  37. servers, but there are other things that require Sessions.  If a user is
  38. using the Server's keyboard (running applications, doing administrator
  39. functions, whatever), an extra two Sessions are required.  Also, you'll
  40. have to add a Session for the user to access every other Server in the
  41. Domain.  Also, if the Server is running the messenger
  42. service, that will require a Session.  Remember this number.  For our
  43. example, 50 users and two Additional Servers, let's assume the
  44. Administrator will work at the Domain Controller (the machine we are
  45. figuring all this out for.)  So, we'll add 2 Sessions for working
  46. at the Server, and 2 more to access the Additional Servers.  Total
  47. to remember, 52 + 2 + 2 = 56.
  48. There's more, so take a break now if you need to.
  49. :p.
  50. OK, ready?  There are other server services which will
  51. use Sessions, and the number you want to allocate to them is up to you.
  52. Really.  It generally determines how many stations the service can
  53. support at once.  If you are using DLRINST, how many DOS requesters
  54. do you want to install DLR on at a time?  Usually, not many.  The service
  55. is single threaded (see Getting Started, page 3-14.)  It will use some
  56. NETBIOS resources (3 Sessions, 3 Commands, and 2 Names to be exact),
  57. but they don't count on the NET1 statement - only in the NETBIOS
  58. configuration file (a part of the Communications Manager's
  59. configuration.)  If you are using RIPL, there is a (short) time during
  60. the RIPL process when it requires two Sessions.  So, let's pick a
  61. number of stations we will support during this short time, 10.  OK?
  62. Add that to the previously calculated Sessions requirement.
  63. 56 + 1 + 10 = 67.  This number (67 in our example) is the
  64. INI file's NET1 statement's x1 parameter.  Whew!  Don't go over 254,
  65. though.  That's the limit.
  66. :p.
  67. OK, on to the NETBIOS Communications Manager (CM) configuration.
  68. 'Maximum sessions' is where the sessions that are available for ALL
  69. NETBIOS applications (like the server) are defined.
  70. You can use the same number of sessions here as
  71. you did for x1, but our growing company may have other Domains for the
  72. Administrator to administer later on, so let's allow a couple of extra
  73. Sessions here now so we won't have to remember to come back later.
  74. Also, we need to remember to add in the extra NETBIOS Sessions (3)
  75. required by DLRINST.
  76. Make it 72.  Notice, there are no hard and fast rules except that you
  77. must have enough Sessions - extras are allowed!  They aren't free, though
  78. since they take 52 bytes of NETBIOS work area, so don't go hog wild.
  79. We'll have more to say about the NETBIOS work area later.  Lots more.
  80. :p.
  81. So, now you have some users and the users have Sessions and
  82. Communications Manager knows about the Sessions in it's NETBIOS profile.
  83. Are your users ready to log on?  Not quite.  A Session lets two link
  84. stations talk, right?  Well, we haven't defined the link stations yet,
  85. have we?  Easily done, though.  They have to be defined in two places in
  86. the Communications Manager - NETBIOS and 802.2.  The NETBIOS Link
  87. Stations requirement is the same as the INI maxusers value.  This is 52
  88. in our example.  They, too, are cheap -- 50 bytes of NETBIOS work area
  89. each.  The 802.2 configuration can use the same number, but you
  90. might want to add some for SNA or RDS, or ...  To be safe, let's add 4.
  91. Set it to 56 in the 802.2 configuration.
  92. :p.
  93. Continuing on our line of thought, what will our users need next, now
  94. that they can communicate with the server?  Right!  Resources.  Files,
  95. printers, stuff like that.  Well, that will require some other changes
  96. to the INI file to make sure they have access to those resources.
  97. :p.
  98. First, if the users are to access a server resource, it must be shared.
  99. Make sure that you set the maxshares parameter high enough to allow
  100. sharing everything you want users to access.  Sharing a resource requires
  101. one maxshare, no matter how many users access it.  You might count the
  102. applications you intend to share and multiply by three to get a starting
  103. point for this parameter, but you probably want to add some maxshares for
  104. user home directories and printer queues - especially if you have a lot
  105. of them.  In our example, the users will all have home directories, and
  106. server will support 5 printer spool queues.  That is 55 maxshares, and
  107. we'll add 15 to allow for 5 applications (maybe a spreadsheet, a word
  108. processing application, and some graphics work.)  Maxshares, then = 70.
  109. Each increment of maxshares takes 103 bytes of RAM.
  110. The good news is, there are no other parameters you have to change if you
  111. modify maxshares.
  112. :p.
  113. The bad news is that maxshares isn't the only thing you have to set to
  114. allow users to use server resources.  Another thing is maxconnections.
  115. Connections are the server's end of a requester's NET USE.  Each user who
  116. uses a server resource needs a connection for it.  Five users of a
  117. single resource need 5 connections.  Five users of five different
  118. resources will also require five connections.  If every user can use
  119. every shared resource, the maxconnections value is the product of
  120. users times shares.  For our server, that is the case.  Fifty users
  121. times (15 application shares plus 5 print queue shares) = 1000
  122. maxconnections.  We also have to add the users' connections to their
  123. own home directories, so the total is really 1050 maxconnections.
  124. 1024 is the maximum value allowed, though.  Maybe we are a bit high.
  125. Another way to figure these is to allow 6 per user and add some
  126. more for users who are likely to need them.  Windows users might get
  127. 3 more, OS/2 users another 4.  That makes 53*6+50*4=518.  Use that.
  128. You're right, it takes a LOT of maxconnections, but they only require 20
  129. bytes of PC RAM each, so don't worry too much about it.
  130. :p.
  131. OK, now, where are we.  We've got maxusers, sessions, stations,
  132. maxshares and
  133. maxconnections, right?  We still have to look at buffers, commands
  134. and maybe some details in heuristics (just for the fun of it, actually).
  135. Maybe we can even find time to look at 802.2 stuff, too.  Oh, boy!
  136. I can hardly wait.
  137. :p.
  138. Buffers first.  To be able to send or receive data, the server has to
  139. have some, and there are several types.  Reqbufs, bigbufs, pipes
  140. and messages come to mind.  Easiest first, messages are something we
  141. have no control over - they are what they are (datagrams), so we won't
  142. even worry about them.  They are sent on at a time, so only one buffer
  143. needs to be counted for the function.  Next, pipes.  These are generally
  144. used between servers, and by requesters during the logon process).
  145. The only documented rule is that if you have a lot of users loging on
  146. at the same time, you may want more than the default, 3, srvpipes.
  147. What is 'a lot'?  When 'may' you want more pipes?  In the
  148. total absence of rules, we'll just allocate one for every 12 users.
  149. That way, the maximum value, 20, will be used when we get over 240
  150. users.  Until somebody proves that wrong, 3 pipes will be fine for up to
  151. 36 users, and we will want an extra one for 50 users.
  152. We'll use our rule and monitor the servers'
  153. NET ERROR log for any messages that indicate more pipes are needed.
  154. The message, by the way is NET8234E, so you know what to look for.
  155. No messages, no changes.  OK, so it isn't scientific - it works.
  156. Also, note that we never lower the default.  General rule - don't
  157. change them unless you have to.  If it ain't broke, don't fix it.
  158. If you like rules to live by, add "If you don't know what it does,
  159. leave it alone!"
  160. :p.
  161. That takes care of most of the easy stuff.  On to buffers.  In general,
  162. the server will use 'reqbufs' to send records to/from requesters, and
  163. it will use 'bigbufs' for bulk data transfer (that's what we call
  164. things like program loads, COPY operations, and application I/O in 64KB
  165. chunks of data) which are done with raw data protocols.  Rules of thumb
  166. always say things like 'two or three per concurrent user of the
  167. function.'  Real useful, but it is true, that is what is required.
  168. So, we are back to making reasonable estimates (is there NO science to
  169. this tuning stuff?)  Actually, this isn't all that hard - due to some
  170. limits we run into.  First, 'reqbufs' can only take 512KB.  They default
  171. to 4KB each, and that means you have a maximum of 120 of them.  So, we
  172. can allocate 2 per user (for the first 60 users, anyway), and when we
  173. have used up the 512KB, we just stop.  We have to, as a matter of fact.
  174. Makes it simple, huh?  For our 50 users, then, we will define 100
  175. numreqbufs.  Then, we'll add 4 for access to the Additional Servers,
  176. and two more for DLRINST.  Total, 106.
  177. :p.
  178. This limit of 120 'reqbufs' does not mean the server will support only
  179. 60 users.  If you picture the buffers as being used just to send data
  180. to users, they will be in a queue awaiting their turn for transmission
  181. on the LAN.  If there were so few buffers available that one could not be
  182. 'refilled' with data and re-queued for transmission before all the
  183. others in the queue had been sent, the performance of the server would
  184. be degraded.  This would happen because the server would have to wait
  185. while a buffer was being prepared for transmission.  Waiting servers are
  186. not performing.  But, it actually takes much longer to send 119 buffers
  187. of data than is required to refill one, so fewer than two buffers per
  188. user (or even one buffer per user) is permissable.
  189. :p.
  190. Did you ever see the NET ERROR message which says the server ran
  191. out of the resource defined by the numreqbufs parameter?
  192. There is also
  193. a message for numbigbufs, and the server statistics screen tells
  194. you just how many times this happens if you wish to look (look at the
  195. last 2 lines of the screen you get when you enter the NET STATS SRV
  196. command line command.)  Getting these messages is not bad - if you don't
  197. get them hundreds of times per hour.  A well tuned server will have just
  198. enough buffers to do its job.  That means it will run out every once
  199. in a while.  That isn't a problem, it just shows the memory which might
  200. have been put into buffers is used someplace else - maybe in cache or
  201. VDISK.
  202. :p.
  203. Now, numbigbufs.  You can define up to 80 of these.
  204. But, if we think about it, these are 64KB buffers, and
  205. if we define a bunch of them, they can force our server into swapping,
  206. and that is one thing we want to avoid!  Swapping destroys performance.
  207. If we have limited memory, we might decide it
  208. would be better to have disk cache for applications which do heavy
  209. use of randomly accessed shared data on the disk.  These would be
  210. things like data base applications - you'll have to decide what
  211. applications your server users will run and how they access data.
  212. Applications like spreadsheets, word processors and graphics tend
  213. to access data sequentially and/or to not share files, so they tend to
  214. not get great benefit from large disk caches.  In fact, if your
  215. applications do not share data, don't have cache!  After all, having it
  216. means data will have to be loaded into it, that it will have to be
  217. searched when other users do reads,
  218. that there will not be any cache hits,
  219. and that the data will finally be overlaid by newly written data which
  220. will never be used from cache before it, in turn, is overlaid by data
  221. which will never, ...  You see how cache can be a waste of server cycles,
  222. so don't just assume you want a lot of it.  Examine your applications.
  223. :p.
  224. Our applications will be office, graphics and decision support type of
  225. stuff.  Generally, no shared files.  No need for cache for data.
  226. But, we'll have to come back to cache later.
  227. :p.
  228. On with bigbufs.  Let's first understand how they work.
  229. Actually, bigbufs are used in the self-tuning features of the server.
  230. You knew it did that, didn't you?
  231. To review just a bit, these buffers are used in several ways,
  232. but most often they are used when downloading code or doing COPY
  233. functions.  For best performance, you should have a couple of
  234. bigbufs available when a user starts a function which can use raw data
  235. transfers like the examples given earlier.  But, how many is that?
  236. How many do you have to set up per user?  1/2? 2?  Answer always seems
  237. to be, "It depends."  So what are you going to do?  Guess?  That is
  238. what a lot of folks do, or they just allocate a lot of buffers and hope.
  239. Well, the good news is it is hard to go wrong!
  240. :P.
  241. Now, don't flinch, but SRVHEURISTICS is where you go to control this.
  242. In the SRVHEURISTICS, digits 17 and 18 control how
  243. memory is allocated to bigbufs and how long it stays allocated.  The
  244. NUMBIGBUFS parameter defines how much memory you wish to allow the
  245. server to use for bigbufs.  At startup, you will get 3 bigbufs, no
  246. matter how many more than that you might ask for.
  247. As more than these three are needed, they are created.
  248. The NUMBIGBUFS parameter sets a maximum number of permanent
  249. bigbufs that will
  250. be created and used for reading from and writing to the server.
  251. If users require all these bigbufs to be created and STILL need more
  252. to use while writing to the server, it will dynamically create more.
  253. This creation of 'extra', temporary
  254. bigbufs as required is controlled by the srvheuristics digits
  255. mentioned.  They are created as needed, and when they
  256. are no longer needed, they are released.  Since allocating/creating the
  257. buffers takes cycles, you can use digit 17 to cause the server to wait
  258. for a varying period of time before releasing a bigbuf - for best
  259. performance, this would be a longish time so the overhead could be
  260. avoided as much as possible.  A value of 1 will release the bigbuf
  261. one second after it is no longer needed.  This is too low, so the
  262. default, 3 (waits one minute) should be used to keep the bigbuf
  263. around longer so it will be available if another user or function
  264. requires it before you spend the cycles to deallocate and then just
  265. end up having to reallocate it all over again.
  266. :p.
  267. When a buffer is needed and no memory is available, SRVHEURISTICS
  268. digit 18 determines how often the server will try to allocate
  269. a buffer - the longer it waits, the less overhead you waste on a failure.
  270. The new buffers are allocated from available server memory, and if a user
  271. application is using it, the server will wait and retry later when
  272. another user wants a new bigbuf.  Trying often can get you a buffer
  273. sooner, but if the memory is not available, trying too often can slow
  274. down the system.  The default, 3, waits one minute between tries.  If,
  275. during one of these waits, an already created bigbuf becomes available,
  276. it will be used and a new one will not be created.  Note that this just
  277. keeps the server from retrying too often - the user will not wait.
  278. Instead, the user function will continue as soon as the server finds
  279. no memory is available for temporary bigbuffs.  The only difference
  280. is that the user function will use the smaller reqbufs to get data
  281. to the server.  This is a bit slower and causes more work for the
  282. server, but better that than having the user wait!
  283. :p.
  284. So, the server 'tunes itself' for the number of numbigbufs it has.  But,
  285. that's not all!
  286. :p.
  287. SRVHEURISTICS digit 13 can be used to allocate some of the available
  288. bigbufs to be used to create more reqbufs, called read-ahead buffers,
  289. if the server runs out of
  290. them and some are needed for prefetching data from the disk before a
  291. user requests it be sent on the LAN.  Yes, the server does this.  There
  292. are two major times this is done.  First, when a program opens a file
  293. the requester assumes it will read data from it and prefetches 4KB of
  294. data before the application actually issues a read.  Second, when a
  295. requester reads multiple consecutive records, the server will detect this
  296. and pre-fetch 4KB of data so if the requester continues sequential
  297. processing of the file it will not have to wait for actual disk I/O to be
  298. done.  This 'read-ahead' data is placed in a read-ahead buffer and is
  299. ready to be quickly sent to a requester when an actual read command is
  300. issued.  This makes the LAN Server perform very well in sequential tests.
  301. :p.
  302. Since the server creates these buffers as they are required, this
  303. is another example of (controlled) automatic tuning.  Note
  304. that if you allocate 9 bigbufs to this function you won't
  305. need 144 more NETBIOS commands before they can be used.  You couldn't
  306. define that many commands, anyway.
  307. Since these buffers are used to hold data which requesters
  308. have not yet asked for (but which the server expects them to ask for
  309. soon), the data is not actually sent to the requesters until they ask
  310. for it.  But, having it waiting in a buffer when they ask for it means
  311. they will get the data they want much sooner than they would if the
  312. server had to read it from the disk - or possibly, even faster than
  313. finding it in cache.
  314. :p.
  315. SRVHEURISTICS digit 13 defaults to 1.  That is
  316. enough memory to create 16 additional reqbufs to hold data as required.
  317. If you have a lot of users (over 40), you might increase this value.
  318. You might want to increase it by one for the next 40 users, too.
  319. Three bigbufs are enough for this function in most cases, though, so
  320. stop with that many and let the server use the rest as real bigbufs.
  321. For our example server, we'll set this heuristic to 2, and the
  322. NUMBIGBUFS parameter itself can be set to its default, 5, plus 1 for
  323. every 5 requesters.  That's ten more, so we'll set it to 15 plus the 2
  324. for read-ahead buffers for a total of 17.
  325. :p.
  326. If we want to use the server for running local applications such as
  327. ADMIN functions, NET RUN jobs or AT command functions, we have the
  328. memory available - not committed to bigbufs.  When no such jobs
  329. are running which require the memory, the server can
  330. grow or expand and use the available memory.  If the server
  331. doesn't need the memory, why should it require the memory to be
  332. allocated to the server.  Allocating memory which will not be used
  333. is wasteful.  So is reserving memory which is only used infrequently
  334. for special purposes.  This is one problem which is solved by this
  335. OS/2 LAN Server self-tuning feature.
  336. :p.
  337. Well, we need to look back at cache, and now is as good a time as any.
  338. Cache is designed to allow many users to share
  339. frequently accessed data.  This implies that the data is used in
  340. applications which share files and do byte range, 'record', locking.
  341. That, in turn, indicates the data is randomly accessed (probably by a
  342. data base).
  343. :p.
  344. For these reasons, the OS/2 caches (DISKCACHE and
  345. CACHE.EXE) are designed to NOT cache sequential file accesses.
  346. If you are using the DISKCACHE, you have the option
  347. of defining the maximum disk read length which will be cached.  By
  348. default, this is 3.5KB.  A second parameter on the CONFIG.SYS DISKCACHE
  349. statement allows you to increase this so disk reads up to 64KB will be
  350. cached.  This is handy for sequentially accessed files if they
  351. can be cached when the first record is read from them.   HPFS cache
  352. does not have this capability, and it will cache no reads over 2KB.
  353. Therefore, HPFS looks like  the best place to put your randomly accessed
  354. data files.  If you use both
  355. caches, you could have up to almost 17 MB of cache!  This means you must
  356. do some planning.  Be careful to check to make sure that your
  357. cache does not force your server into a swapping mode.  If
  358. that happens, all the tuning efforts are for naught.
  359. :p.
  360. Earlier I said HPFS cache 'looks like' the best place for random data,
  361. and the more suspicious of you readers probably wondered at that.  And
  362. with good reason!  We are talking server here, not just OS/2, and that
  363. means the way OS/2 usually works can change!  And here, it does.  Why?
  364. Statistics show that many times random files get processed sequentially
  365. (at least in part).  Index searches, key fields with no indexes which
  366. cause data bases to have to search for records, going to a certain
  367. place in a file and then processing a set of records sequentially, and
  368. other such functions cause this.  In fact, the probability is so high
  369. that the server is willing to bet that is what you are going to do!
  370. Not that it bets a lot, but it will try to read records before you want
  371. them so you will get them quickly when you ask for them.  So, when you
  372. open a file, the server sends the requester 4KB of data with the open
  373. response.  If you read a record in that 4KB, no server action is
  374. required, and you get great response.  If you don't read a record in
  375. that 4KB, the server loses its bet - and has wasted the 7 milliseconds
  376. or so it took to send you the data (I told you it didn't bet a lot,
  377. didn't I?)
  378. :p.
  379. OK, great, you say, and I agree.  BUT, if the server is
  380. reading 4KB at a time and HPFS caches no reads greater than 2KB, how much
  381. of the data is going into HPFS cache?  Right, 0, zip, none, naught.  SO,
  382. why do you want an HPFS cache?  Well, it is still used as the HPFS
  383. directory cache, so you certainly don't want to get rid of it!  But, you
  384. can set it small, 64KB is the minimum.  If
  385. you have a lot of users on the server and a lot of file creation/deletion
  386. going on, you might set it to 128KB so the directory can be cached -
  387. maybe even 256 is extreme cases if you are just SURE you have
  388. fragmentation.  Your choice, but small is OK on a server.  Put the
  389. memory into DISKCACHE.
  390. :p.
  391. "Did he say, 'put the memory into DISKCACHE'", you ask?
  392. :p.
  393. "Yes, he did", I say (ungramattically.)
  394. :p.
  395. With CSD WR05015 (May, 1991), the disk device driver cache, DISKCACHE,
  396. can be used by HPFS disks.  If your server is at that CSD level (or at
  397. Version 1.30.1), you have a 14.4MB cache available to you!
  398. :p.
  399. But, we noted the DISKCACHE would handle reads of up to 3.5KB, and if the
  400. server is issuing reads of 4KB, how much is going to be cached?  Wrong!
  401. As mentioned earlier,
  402. there is a parameter on the DISKCACHE statement which lets YOU tell
  403. it how big a read to cache.  The CONFIG.SYS statement is
  404. DISKCACHE = xxxx,nnn where the 'nnn' is the maximum number of sectors
  405. you want to cache for a single read.  Set 'nnn' to 8 to cache 4KB reads.
  406. But, that data is going to be in one of your buffers anyway, so why not
  407. go for the
  408. big stuff?  Set 'nnn' to 128, and cache reads of 64KB!  That is
  409. the biggest read the operating system can do, so 128 is as much as you
  410. want to specify for the 'nnn' value.
  411. :p.
  412. With 128, programs that are downloaded will be cached, and if you do
  413. a lot of that, it can help your performance.  RIPL, in fact can be twice
  414. as fast as before!
  415. :p.
  416. So, with code on the server, cache 64KB reads in DISKCACHE.  With no
  417. code on the server, don't cache it.  Set 'nnn' to 8, and cache data
  418. instead.  But, don't forget to watch for swapping.  It'll kill you.
  419. :p.
  420. Sick and tired of buffers, and caches, yet?  Well, I am.
  421. Onward and upward!
  422. :p.
  423. Once the data is in a buffer, it will be sent to the requester.  That
  424. takes a NETBIOS Command.  These are defined in the IBMLAN.INI file's
  425. x2 parameter and in the CM NETBIOS Maximum commands parameter.
  426. How many of them should be defined?  Well,
  427. the manual recommends, for best
  428. performance, setting NETBIOS Maximum
  429. commands at twice the number of Sessions defined in the INI x1 parameter.
  430. :p.
  431. The 'two Commands per Session' recommendation was an early tuning tip.
  432. It is essentially valid, but we have discovered that there is a maximum
  433. number of Commands which can be defined. That maximum depends on the
  434. other NETBIOS resources which are defined (Sessions, Stations, Names,
  435. Remote Name Directory Entries)
  436. since the control blocks for them must all fit into a 64KB
  437. area in memory. So, there comes a point when there isn't enough
  438. room for all the Commands this tuning tip would require you to define!
  439. :p.
  440. Upon consideration, it can be seen that Commands are used to do I/O
  441. on the network. If
  442. you are doing I/O, you must be handling data. If you are handling data,
  443. you must keep it somewhere. Where? In NETBIOS messages.
  444. :p.
  445. Unfortunately, no parameter defines the number of NETBIOS messages you
  446. want to have. It is actually the sum of several other parameters
  447. (EG, numreqbufs, numbigbufs, pipes, messaging.)   We've looked
  448. at those, and they tend to have maximum values due to storage which
  449. can be or is allocated to them.  We now know how to allocate these
  450. buffers.  They are no longer a problem, right?
  451. :p.
  452. So, count the NETBIOS message buffers (numreqbuf, numbigbuf, etc)
  453. which are available to the
  454. Server, and allocate one Command per buffer. Usually, this maxes out at
  455. about 150 Commands, but it CAN go higher depending on several other
  456. parameters.  Since there aren't more than 150 buffers, it would do no
  457. good to go higher.
  458. :p.
  459. If you decide you need more numreqbufs in your server, you can make them
  460. smaller than the default of 4KB.
  461. Smaller buffers can help your Server's performance in cases where all the
  462. users are doing random record I/O - as long as the numreqbufs are not
  463. smaller than a single record (if they are smaller, performance
  464. degrades badly.)  One thing to note, though.
  465. Servers' reqbufs send data
  466. to requesters' workbufs.  They should be the same size.  So, changing
  467. the servers' sizreqbufs parameter means changing ALL your requesters,
  468. too.  This may not be a task you want to undertake lightly, but, consider
  469. what different sizes means to performance.  If the requesters buffers
  470. are larger, they will be issuing reads to the server that will take
  471. multiple server buffers of data to satisfy.  The wait for all these
  472. transmissions can get long, and performance will suffer.  How mad at you
  473. do you want your users to be?  If the servers' buffers are bigger than
  474. the requesters', the extra space will never be used.  Wasted memory
  475. isn't a good idea (but we'll be glad to sell you more.)
  476. Making the reqbufs smaller allows extra buffers,
  477. but to use them you'll need extra Commands, also.  The maximum number of
  478. Commands you can have, as mentioned before, depends on the usage of
  479. memory in the NETBIOS work area.  Here is how that memory is
  480. allocated by the CM NETBIOS configuration.
  481. .sp
  482.   8288 Bytes for NETBIOS
  483.     50 Bytes times the number of NETBIOS Maximum Stations defined.
  484.     52 Bytes times the number of NETBIOS Maximum Sessions defined.
  485.     22 Bytes times the number of NETBIOS Maximum Names
  486.            (add one to the number of names you define
  487.             because NETBIOS Name-One must be accounted for)
  488.     66 Bytes times the size of the NETBIOS Remote Name Directory.
  489.    202 Bytes times the number of NETBIOS Maximum Commands defined.
  490. :p.
  491. Ouch!  That last one hurt, didn't it?  Well, that is what you are going
  492. to need to allocate.  Buffers without Commands can't be used.  One note
  493. here, to be perfectly clear --  this is the NETBIOS work area in PC RAM.
  494. It is not the Token-Ring Adapter RAM.  The error message you get when
  495. you fill this work area may lead you to think you have an adapter
  496. memory problem, so be careful to understand what you are doing.
  497. :p.
  498. It seems we get sidetracked at lot, but did you ask something about that
  499. Remote Name Directory?  Well, NETBIOS uses it to remember where Users
  500. are.  If it doesn't know where a user is and has to send a message, it
  501. must search the network to find the Station where the user is signed
  502. on.  That takes time, and
  503. you can save that time by giving NETBIOS a little memory to save the
  504. path to a station once it has found it.  Messages also go faster.
  505. In the Communications Manager NETBIOS configuration, you'll need to
  506. make two changes.  Set "Datagrams use Remote Directory" to 'Yes', and
  507. set the "Number of Remote Names" to however many you want to support.
  508. We'll allocate enough for an entry for each of our users.  That's 50.
  509. OK, no more interruptions.  Back to Commands.
  510. :p.
  511. In general, if you have 60 or fewer users, you'll have 2 NETBIOS Commands
  512. per Session, but if you have more than 60 users, you'll have fewer
  513. Commands than the old tuning tip would ask you to define. So, you
  514. may not have 2 Commands per Session - you don't even use the number
  515. of Sessions supported to calculate the number of Commands to define!
  516. We have 106 numreqbufs, 4 srvpipes, messaging (1), 17 numbigbufs,
  517. and we'll also add 6 for maxchdevjob.  Total 134.
  518. So, 134 NETBIOS Commands are needed.  These are specified on the INI
  519. file's NET1 statement, in the x2 parameter.  The NETBIOS Communications
  520. Manager configuration will also need to have that many Maximum
  521. Commands defined.
  522. :p.
  523. Let's see, we've now added numreqbufs, numbigbufs, srvpipes,
  524. cache, VDISK,
  525. Commands and messaging considerations to this (along with some
  526. srvheuristics - don't say I didn't warn you.)  What's left?  Some
  527. miscellaneous stuff -- NETBIOS Names, maxopens, maxlocks, numfiletasks.
  528. Easy stuff.  Use the Net1 x3 default for NETBIOS Maximum
  529. names, but remember that
  530. the NETBIOS configuration Names value has to be one greater than x3.
  531. DLRINST services will need two extra names in the NETBIOS configuration.
  532. :p.
  533. Maxopens?  You can have up to 8000 and you need 'enough.'  The server
  534. can force closes of users' files if it runs out of these, so if you
  535. see the symptom, you know the cure.  Remember that, while DLRs may not
  536. use a lot of files, WINDOWS users will tend to use more, and OS/2 users
  537. will probably use most of all.  Allocate 10 for DLRs, 45 for WINDOWS
  538. users and 55 for OS/2 users for a good starting point.
  539. :p.
  540. Maxlocks, same story.  Normally, this can be set to .1 times maxopens.
  541. Our example OS/2 users will get 50*55= 2750 or so maxopens and
  542. 275 maxlocks to start.  Then, we will monitor NET ERROR for messages.
  543. :p.
  544. Numfiletasks, leave it set to one.  Saved the simplest for last.
  545. :p.
  546. OK, now let's review our sample configuration and all of the parameter
  547. settings we have decided on.
  548.   1 Domain Controller, 2 Additional Servers
  549.   50 OS/2 Requesters
  550.   Will support DOS users with
  551.     DLRINST and RIPL
  552.   Sharpies may note we have no DOS users, but this is only an example,
  553.   after all, so cut me some slack!
  554. :p.
  555. Parameter and other tuning settings --
  556.  maxusers = 53
  557.  Sessions
  558.   NET1 x1 = 67
  559.   NETBIOS = 72
  560.  Stations
  561.   NETBIOS = 56
  562.   802.2   = 56
  563.  maxshares = 70
  564.  maxconnections = 518
  565.  srvpipes = 4
  566.  numreqbufs = 106
  567.  srvheuristics 17, 18 and 13 (3, 3 and 2)
  568.  numbigbufs = 17
  569.  Cache = 0
  570.  VDISK = ???
  571.  Commands
  572.   NET1 x2 = 132
  573.   NETBIOS = 135
  574. .pa
  575.   NETBIOS Work Area Memory Map
  576.     8288 Base
  577.      374 Names (22 * 17)
  578.    27270 Commands (202 * 135)
  579.     2800 Stations (50 * 56)
  580.     3744 Sessions (52 * 72)
  581.     3300 Remote Names (66 * 50)
  582.    -----
  583.    45776 Total
  584. .sp
  585.   Names
  586.    NET1 x3 = 16 (default)
  587.    NETBIOS = 17 (default
  588.   maxopens = 2750
  589.   maxlocks = 275
  590.   Numfiletasks = 1
  591.   NETBIOS
  592.     RND = 50
  593.     Datagrams use Remote Names = Yes
  594. :p.
  595. Well, we covered a lot, and we did it in less than 10 pages!  Not bad.
  596. I hope all this is useful to you, but if you think it is too much
  597. trouble, get the CNFGLS13 package from IBM's MKTTOOLS and use it.
  598. Your SE should be able to get it for you.
  599. It'll do all the figuring for you that is described here, and more.
  600. Use it often!
  601. .smalloff
  602. .*
  603. .*    your foils ...
  604. .*
  605. .* --------------------------------------------- this must be at the end
  606. .END NOSTAT                   ;.* NOSTAT to suppress statistics page
  607.