我有一个基于Samba安装的CentOS 5.6服务器。 它有一个8驱动器连接到槟榔1880 Raid 5,hdparmtesting给我回〜450MBPS,我可以确认接近与dd到/ dev / null。 向networking提供文件是10gbe Myricom卡,客户端都是同一台交换机上的broadcom / intel / etc。
我的问题似乎在整个相当一致,单个stream文件复制性能很差,当文件没有被caching到服务器上的内存。 我说的是9-12MB的文件,如果我复制一个1GB的文件,性能是通过屋顶,通常1gbe客户端90%以上。 当我复制9-12MB的文件,比如说100个文件时,大约会有40-50%的使用率,一旦caching在服务器上,它将在1gbe客户端网卡上使用55-65%的MAYBE,但是不会更多。 为什么?!?
我可以复制多个caching的顺序文件序列,并得到可能在客户端NIC上的85%以上的使用率,为什么单个文件序列不能达到95%+? 所有客户端都设置为卸载tx / rx数据包到适配器,不幸的是他们没有使用巨型帧,但我已经testing与Jumbos打开,仍然看到相同的性能。
大的顺序访问是最好的情况,你说什么,你的系统在这种情况下饱和pipe道。
许多较小的文件与一个大文件导致元数据和可能的locking开销。 我猜测有多个stream可以获得多个传输数据,而在多核系统上,他们可以并行执行,从而增加bandwidth。 这种行为似乎表明,您被许多小文件的单线程性能所束缚。 如果您可以使用SSD进行testing,您将会知道,如果性能问题来自磁盘I / O(locking,修改访问时间,元数据),或者您受CPU限制(您也可以看到一个samba进程在top吃了整个内核在传输数据时显示,这将是一个很好的指标)。
您也可以使用SystemTap来查看内核在“大文件”和“多个小文件”场景中花费的时间。