I'm willing to bet that what you're seeing is protocol overhead of some sort. SMB is something of a voodoo art, and many rumors abound that Microsoft itself wishes to ditch the protocol entirely on its next OS, citing the difficulty of maintaining backwards compatibility. I'm sure that some of it also has to do with the fact that Samba servers are now seen as a "threat."
That said, there are two things that I would check:
1. I'm sure you've already made sure your setup is correct, but we were trying to diagnose some Samba speed problems at school with some departmental machines which appeared to be setup correctly. The culprit? The slow machine's subnet mask was 8 bits longer than the faster machines' subnet masks, forcing IP packets to go through the default gateway rather than be sent directly over ethernet. The system administrator thought the longer subnet mask was better even though all the machines were connected to a huge switched 802.3u ethernet anyway... (This is actually what I would consider an IP setup error and would reflect poor performance with FTP as well).
2. Another HUGE speed culprit with Samba is its reverse domain name lookups of the incoming requester's IP address. These reverse lookups seem to be done MUCH more frequently than should be required. I have managed to get significant speed improvements if I manually place an entry for the remote machine's domain name in the Samba server's /etc/hosts file. That way, the reverse lookups never go out over the wire and are satisfied locally (and therefore much more quickly). I've been looking for an option in smb.conf to turn OFF reverse name lookups, but can't seem to find one...
edit: I forgot to say "YMMV" with my suggestions
That said, there are two things that I would check:
1. I'm sure you've already made sure your setup is correct, but we were trying to diagnose some Samba speed problems at school with some departmental machines which appeared to be setup correctly. The culprit? The slow machine's subnet mask was 8 bits longer than the faster machines' subnet masks, forcing IP packets to go through the default gateway rather than be sent directly over ethernet. The system administrator thought the longer subnet mask was better even though all the machines were connected to a huge switched 802.3u ethernet anyway... (This is actually what I would consider an IP setup error and would reflect poor performance with FTP as well).
2. Another HUGE speed culprit with Samba is its reverse domain name lookups of the incoming requester's IP address. These reverse lookups seem to be done MUCH more frequently than should be required. I have managed to get significant speed improvements if I manually place an entry for the remote machine's domain name in the Samba server's /etc/hosts file. That way, the reverse lookups never go out over the wire and are satisfied locally (and therefore much more quickly). I've been looking for an option in smb.conf to turn OFF reverse name lookups, but can't seem to find one...
edit: I forgot to say "YMMV" with my suggestions