Messaging: Difference between revisions
m (little decoration) |
(socket messaging) |
||
Line 1: | Line 1: | ||
== Samba Messaging == |
|||
Multiple [[smbd]] processes usually run simultaneously - a main daemon process and couple of connections processes. Samba code has special API that allows different processes send messages each other. There are two implementations of [[ |
Multiple [[smbd]] processes usually run simultaneously - a main daemon process and couple of connections processes. Samba code has special API that allows different processes send messages each other. There are two implementations of the [[messaging]] code - different in current [[Samba3]] and [[Samba4]] code. |
||
=== Samba 3 implementation === |
=== Samba 3 implementation === |
||
This implementaion uses [[ |
This implementaion uses [[TDB]] file for storing messages and UNIX signals for notifying message receiver. |
||
All messages are stored in ''messages.tdb'' file (one can find it in ''var/locks'' directory). Each message is just a database record that has six fields: |
All messages are stored in ''messages.tdb'' file (one can find it in ''var/locks'' directory). Each message is just a database record that has six fields: |
||
Line 22: | Line 21: | ||
=== Samba 4 implementation === |
=== Samba 4 implementation === |
||
This implementation uses UNIX domain sockets. Each [[smbd]] listens on a unix domain socket with the name based on its pid. All sockets are located in ''var/locks'' directory. One message is packed into one datagram, so now we have message size problem - there is no way to send messages with size larger than allowed by a datagram. |
|||
This implementation uses UNIX domain sockets. |
|||
== Testing == |
|||
You can test messaging speed with LOCAL-MESSAGING test from [[Samba4]] [[smbtorture]]. Present implementations have almost similar speed. |
Revision as of 07:31, 5 May 2006
Multiple smbd processes usually run simultaneously - a main daemon process and couple of connections processes. Samba code has special API that allows different processes send messages each other. There are two implementations of the messaging code - different in current Samba3 and Samba4 code.
Samba 3 implementation
This implementaion uses TDB file for storing messages and UNIX signals for notifying message receiver.
All messages are stored in messages.tdb file (one can find it in var/locks directory). Each message is just a database record that has six fields:
- messaging version (there is only one version now - 1)
- message type
- sender process id
- receiver process id
- message data length
- message data
There are lot of message types in Samba3, you can see them all in include/messages.h file.
Process sends a message to other process with special function message_send_pid and to all processes with message_send_all. Each process should call message_dispatch routinely to check if messages were received and run appropriate handler.
Samba 4 implementation
This implementation uses UNIX domain sockets. Each smbd listens on a unix domain socket with the name based on its pid. All sockets are located in var/locks directory. One message is packed into one datagram, so now we have message size problem - there is no way to send messages with size larger than allowed by a datagram.
Testing
You can test messaging speed with LOCAL-MESSAGING test from Samba4 smbtorture. Present implementations have almost similar speed.