Простейшая задача: передать с NFS-сервера (FreeBSD 9.2-STABLE/amd64) один крупный файл в несколько гигабайт на NFS-клиент (FreeBSD 8.4-STABLE/amd64) как можно быстрее в условиях локальной сети. У сервера физический линк 1G, у клиента 100M. Передача по ftp полностью насыщает линк 100M, скорость больше 11MB/s.
А вот с NFS всё волшебно. Начал разбираться оттого, что при монтированиии "по умолчанию" скорость была очень низкой, меньше 50Mbit/s. Провел несколько серий тестов, переключая на сервере две реализации NFSv3 (oldnfs и newnfs, по умолчанию newnfs) и включая/выключая TSO4 на сетевой карте сервера (em0/82574L/MSI-X), а на клиенте режимы монтирования TCP/UDP и размер блока на приём (rsize).
- Первым делом заподозрил проблему в newnfs и переключил сервер на oldnfs v3. Обнаружил, что с увеличением rsize скорость заметно растет и в итоге получается вполне удовлетворительная, но есть некий предел увеличения rsize:
- UDP: rsize - скорость
12288 - 10,204 MB/s 13312 - 10,234 MB/s 14336 - 10,288 MB/s 14847 - 10,350 MB/s 14848 - 6,9 MB/s 15360 - 7,626 MB/s
Вплоть до rsize=14847=14.5*1024-1 скорость стабильная, а увеличив rsize на единицу, получаем как резкое уменьшение пиковой скорости, так и нестабильную скорость, постоянные срывы в несколько раз, сопровождаюшиеся опять разгонами и новыми срывами.
- TCP с отключенным TSO4: rsize - скорость
2048 - 6,194 MB/s 4096 - 9,535 MB/s 8192 - 10,593 MB/s 10240 - 9,959 MB/s 11264 - 10,586 MB/s 11519 - 10,607 MB/s 11520 - 2,263 MB/s 12288 - 2,378 MB/s 16364 - 5,728 MB/s
В этом случае похожая картина, тоже есть порог rsize=11519=11.25*1024-1.
- TCP с включенным TSO4: rsize - скорость
2048 - 6,172 MB/s 4096 - 9,630 MB/s 8192 - 10,549 MB/s 11775 - 10,630 MB/s 11776 - 2,234 MB/s 12288 - 2,188 MB/s 14336 - 1,705 MB/s
Тут тоже есть свой волшебный порог rsize=11775=11.5*1024-1
- UDP: rsize - скорость
- UDP: rsize - скорость
2048 - 4,545 MB/s 4096 - 7,263 MB/s 8192 - 9,558 MB/s 12288 - 10,109 MB/s 14336 - 10,305 MB/s 14847 - 10,288 MB/s 14848 - 3,600 MB/s 15360 - 4,660 MB/s
Предел тот же самый, что в oldnfs: 14847.
- TCP с включенным TSO4: rsize - скорость
11775 - 10,461 MB/s 11776 - 2,763 MB/s
Опять предел тот же самый, что в oldnfs: 11775.
- TCP с отключенным TSO4: rsize - скорость
11775 - 10,528 MB/s 11776 - 2,232 MB/s
А вот тут предел получился не тот, что в oldnfs для TCP с отключенным TSO4, а тот, что в предыдущем тесте.
Такие дела. Скорость на клиенте снималась по показаниям systat -ifstat. На сервере во время тестирования было Free 5G физической памяти и mbufs в достатке:
# sysctl kern.ipc | grep nmb kern.ipc.nmbufs: 4870650 kern.ipc.nmbjumbo16: 253676 kern.ipc.nmbjumbo9: 338238 kern.ipc.nmbjumbop: 380519 kern.ipc.nmbclusters: 400000 # netstat -m 40958/1927/42885 mbufs in use (current/cache/total) 40956/1770/42726/400000 mbuf clusters in use (current/cache/total/max) 40956/900 mbuf+clusters out of packet secondary zone in use (current/cache) 0/104/104/380519 4k (page size) jumbo clusters in use (current/cache/total/max) 0/0/0/112746 9k jumbo clusters in use (current/cache/total/max) 0/0/0/63419 16k jumbo clusters in use (current/cache/total/max) 92151K/4437K/96589K bytes allocated to network (current/cache/total) 0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters) 0/0/0 requests for mbufs delayed (mbufs/clusters/mbuf+clusters) 0/0/0 requests for jumbo clusters delayed (4k/9k/16k) 0/0/0 requests for jumbo clusters denied (4k/9k/16k) 0/0/0 sfbufs in use (current/peak/max) 0 requests for sfbufs denied 0 requests for sfbufs delayed 0 requests for I/O initiated by sendfile 0 calls to protocol drain routines
no subject
Date: 2014-02-23 11:55 (UTC)no subject
Date: 2014-02-23 15:16 (UTC)no subject
Date: 2014-02-23 17:57 (UTC)no subject
Date: 2014-02-24 18:17 (UTC)no subject
Date: 2014-02-24 18:21 (UTC)