Annotation of 43BSD/contrib/X/doc/Usenix/select.t, revision 1.1

1.1     ! root        1: .SH
        !             2: Select and Non-blocking I/O
        !             3: .PP
        !             4: Without select(2), building X would have been very difficult.
        !             5: It provides the only mechanism in
        !             6: .UX
        !             7: for multiplexing many requests
        !             8: in a single process.
        !             9: It is essential for the X server to be able to block while testing for work
        !            10: to do on any client connection and on the keyboard device.
        !            11: X will then wake up with the information
        !            12: required to determine which device or connection needs service.
        !            13: .PP
        !            14: In actual interactive use of X on a very fast display,
        !            15: select accounts for both the most CPU time and the most subroutine calls.
        !            16: Over an afternoon's use on this display, it
        !            17: accounted for more than 20% of the CPU time used.
        !            18: This is not surprising, since most use of the window system is generated by
        !            19: input events going to editors (in our environment), and output
        !            20: character echoing as well as clock and load monitor graphics calls.
        !            21: When not loaded, one would expect on the order of one select call
        !            22: per X request performed.
        !            23: In fact, there are approximately two X requests performed per select call.
        !            24: .PP
        !            25: One should remember that select's overhead diminishes as the load
        !            26: on the window system increases,
        !            27: both because you are likely to have many requests on a single connection,
        !            28: and because multiple connections may be processed on a single call.
        !            29: Profiling of the server when the display is loaded shows select using
        !            30: a much smaller percentage of the total CPU time.
        !            31: .PP
        !            32: Note that for the typical case under normal use, TWO system calls
        !            33: will be occurring where one might potentially do.
        !            34: In the output case (from a client),
        !            35: X will be blocked in select awaiting input (one call).
        !            36: It must then read the data from the client and process it (second call).
        !            37: Due to the shared memory described above, we are avoiding a write system
        !            38: call to the display.
        !            39: On input (keyboard or mouse),
        !            40: X will be blocked in select (one call).
        !            41: It then gets the input event out of the queue, determines
        !            42: which client should get the event, and writes it (second call).
        !            43: Again, we have saved a system call to read the data.
        !            44: Note that since buffering may occur on both input and output,
        !            45: the overhead per graphics operation performed will
        !            46: diminish as the load on the server goes up, since the server
        !            47: will perform more work for the same amount of overhead.
        !            48: .PP
        !            49: Optimally, select should be very cheap.
        !            50: On fairness grounds, one would like to see if more input from
        !            51: a different client is available
        !            52: after each X request.
        !            53: The original X request handler would check after every request for more
        !            54: requests.
        !            55: The current scheduler only checks for more input when all previously read
        !            56: data has been processed,
        !            57: and provides an approximately 30% reduction in X server overhead
        !            58: (all in the select and read system calls).

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.