В состав FreeBSD принята высокопроизводительная реализация sendfile от Netflix
Добавлено: 2016-01-10 17:12:17
в новости указана ссылка на старую презентациюКомпания Netflix, в сети доставки контента которой активно используются серверы с FreeBSD, совместно с компанией NGINX подготовила новую реализацию системного вызова sendfile, предназначенного для организации прямой передачи данных между файловым дескриптором и сокетом. Новая реализация отличается значительным увеличением производительности - файл теперь можно направлять в сокет в асинхронном режиме без ожидания завершения передачи данных, копирование производится в фоне с мгновенным возвращением управления.
Разработка работающего в неблокирующем режиме sendfile велась с 2013 года и вчера была принята в основной состав FreeBSD-CURRENT. Код уже протестирован в рабочем кластере Netflix и годен для промышленного применения. Реализация полностью обратно совместима с ранее доступными приложениями и может использоваться в качестве прозрачной замены, не требуя пересборки. Кроме увеличения производительности в новой реализации также добавлены новые флаги, предоставляющие дополнительный контроль над отправкой данных. Например, флаг SF_NOCACHE запрещает кэширование передаваемых данных, а при помощи макроса SF_READAHEAD() можно установить размер буфера упреждающего чтения.
http://www.opennet.ru/opennews/art.shtml?num=43646
в фейсбуке поправили
Отправлено спустя 6 минут 49 секунд:Глеб Смирнов писал(а): 2x40 было временным решением, теперь цена на 100 снизились и это целевая платформа. 80 Гбит/с было сделано на экспериментальной машине, сетевая 100, диски nvme. В production таких машин пока нет. Но в production конечно цифры значительно побольше, чем год назад.
страсти продолжаются
Отправлено спустя 3 минуты 12 секунд:Максим Костиков писал(а): На opennet у линуксоидов пуканы полыхают. Там ещё и разрабочик NGINX появился, который показал что в Линукс такие задачи никогда решены не были и, соответственно, в стриминге FreeBSD сильно его делает.
раз уж пошел флудить, решил найти еще оригинал
Valentin V. Bartenev писал(а): Привет эксперту с Opennet от разработчика nginx. Вызов sendfile() на FreeBSD точно также, как и в Linux, с рождения не блокировался на отправке данных в сокет с флагом O_NONBLOCK.
Но на обоих системах благополучно блокировался на чтении с диска. Только, в отличии от Linux, на FreeBSD есть ещё флаг SF_NODISKIO, который позволяет в случае отсутствия данных в памяти возвращать управление и далее вычитывать файл другим способом, например с помощью aio_read() или в треде. В Linux подчеркну до сих пор этого нет.
Что было сделано в новой реализации, так это то, что теперь sendfile() в FreeBSD не блокируется не только на сокете, но и на диске, при этом полностью асинхронно читая и отправляя данные даже в том случае, когда те отсутсвуют в кэше страниц.
О том, что в Linux с асинхронным чтением все очень плохо (и плохо по сей день), я более-менее подробно расписал в статье: https://www.nginx.com/blog/thread-pools ... rmance-9x/