The disk space is the limiting factor on how much data you can store (number and size of files). Apart from the actual user data, the SP also stores some metadata in indexes. The total size of the indexes is dependent on the number of stored files (not their sizes), but a 2% margin should be safe.
Disk speed can be broken down into throughput (MB/s) and transaction speed (operations/s). The processing of large files (whether during backups, restores, or other tasks) is limited by the disk throughput, while the processing of small files is limited by the transaction speed. In general, Direct Attached Storage (DAS) is faster than NAS/SAN with regards to transaction speed, but slower with regards to throughput. Note: Both throughput and transaction speed can be negatively affected by disk fragmentation, and in general, the use of a good defragmentation application is an excellent idea (PerfectDisk comes highly recommended for servers).
The amount of memory required is dependent on the number of files per Backup Account, as well as the number of Backup Accounts being processed simultaneously. On a 64-bit OS, the SS uses about 1 GB of memory for every 5 million files in a Backup Account. On a 32-bit OS, the memory usage is about 30% less (but the process is limited to 2 GB total). For example, if there are 3 Backup Accounts simultaneously backing up to a 64-bit server and they have a total of 10 million files between them, then the SS will use about 2 GB of memory. Memory requirements can be reduced by either staggering the times at which Backup Client machines back up (so there aren’t so many Backup Accounts loaded in memory simultaneously), or spreading the Backup Accounts with a large number of files over different StorageServers.
For tasks that are CPU-bound, e.g. Roll-ups and Integrity Checks, the SS will use all available machine cores simultaneously. However, a cap is placed on the number of cores based on the total memory size of the machine so that only 2 cores are used for each GB of memory. In other words, a 16-core CPU that only has 4 GB of RAM will only use 8 of the available cores. In general, it’s a good idea to have at least 1 GB for each CPU core.