SMB transfer speeds can be quite disappointing, especially when handling lots of small files. Then again, an RPi might not be the best choice as a NAS/file server in the first place. Still, just 1 MB/s is quite slow, even when using SMB as transfer protocol.
RPi 3 Model B uses its USB 2.0 hub to handle ethernet, and thus your network shares its bandwidth with ALL connected USB devices. However, this does not limit maximum Fast Ethernet speed by itself.
USB 2.0 data rate is 480MBit/s, more than enough to serve a 100MBit/s Fast Ethernet connection, while still leaving 380MBit/s for other devices. On the other hand, any current HDD can easily fully utilize USB2 on its own, at the very least when reading from it.
Since your HDD can serve data faster than Fast Ethernet can transfer it, you should be able to get near the 9 MB/s mark when reading large files. With lots of small files (<256kB), protocol overhead will hurt transfer rates, but you still should expect about 2 MB/s.
Before you start fiddling with your SMB settings, try to establish where your bottleneck is:
- Ethernet connection
- HDD attachment
- file system
- SMB configuration
To rule out problems with your Ethernet config/cable or your HDD/HDD-USB-Bridge/USB-Cable, run some speed tests.
iperf or iperf3 will measure your Ethernet speed, and should report results similar to those on my RPi:
pi@pi:~# iperf3 -c 192.168.1.20
Connecting to host 192.168.1.20, port 5201
[ 4] local 192.168.1.28 port 49840 connected to 192.168.1.20 port 5201
...
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 113 MBytes 94.5 Mbits/sec 0 sender
[ 4] 0.00-10.00 sec 112 MBytes 94.2 Mbits/sec receiver
If your results are much lower, your Ethernet might be the culprit. Check your Ethernet config, try a different cable and make sure any switch or hub involved is functioning.
hdparm will measure your HDDs reading speed (quite likely limited by RPi's USB2 host), and therefore should look similar to mine:
pi@pi:~# hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 64 MB in 2.01 seconds = 31.78 MB/sec
Timing O_DIRECT disk reads: 98 MB in 3.06 seconds = 32.03 MB/sec
If your results are substantially lower, maybe try a different USB cable, and make sure your HDD is sufficiently powered - an external power supply for your HDD is recommended.
You could also connect your USB HDD to a different computer and compare transfer speeds there, just to be sure.
If your results fall within the same range as mine, check your hdd file system format: Avoid NTFS as it's quite CPU intensive. Though that shouldn't be much of an issue with an RPi 3 Model B, consider switching to ext4 if you can.
If your speed is still slow, it is likely that indeed SMB is limiting transfer speeds, and you should try some of the SMB config tweaks on your RPi suggested by other posters. Additionally, consider tweaking your SMB client configs as well.
the ethernet port should allow up to 100 Mbit/s
is that achievable on a Pi? Fastest I've seen is about 60Mbit (which is still about 7.5MByte though)