
6
Naturally, the expectation of Terminal Server is that the six remote client connections and
subsequent share mounts to the Samba server will result in 6 separate TCP/IP connections,
resulting in the expected 6 smbd process to service each virtual client. However, Terminal Server
does not operate in the expected manner. Instead, Terminal Server relies on the underlying
Windows operating system to establish the transport for the client pool, and Windows will only
issue one TCP/IP connection to the remote server – in this case Samba. This results in all six
virtual client sessions and share mounts being multiplexed over a single TCP/IP transport pipe to
the Samba server. More importantly, only one smbd user process is started on the Samba
server, and all 6 client sessions are multiplexed on the single smbd.
The smbd user process will serially service multiple incoming client requests from multiple clients
– in this example six clients. The smbd process is single-threaded, and therefore will block
processing on 5 clients while one client is serviced, then service the next client in round-robin
priority (sequentially). In most cases this scenario will produce some level of performance
degradation, depending upon the request load generated from the client connection pool.
kernel space
user space
TCP
IP
netbios
(nmbd)
father
smbd
Windows Clients
For 6 clients
Storage Array
smbd
for 6 clients. SMB
requests
processed serially.