Я объясню это с другой точки зрения.
Если честно, bc
имеет преимущество, так как ему не нужно ничего читать с диска и нужны только его blob/binaries, в то время как python должен импортировать ряд модулей + читать файл. Поэтому ваш тест может быть смещен в сторону bc
. Чтобы действительно проверить это, вы должны использовать bc -q file
, где file
содержит:
6^6^6
quit
Изменив только то, что изменено время использования echo
:
bc 0.33s user 0.00s system 80% cpu 0.414 total
К использованию файла:
bc -q some 0.33s user 0.00s system 86% cpu 0.385 total
(вам придется использовать метод Тердона, чтобы заметить большие различия, но по крайней мере мы знаем, что они есть)
Теперь, с точки зрения python, python должен читать с диска, компилировать и выполнять каждый раз файл, плюс загружать модули как точки Andrew, что делает время выполнения медленнее. Если вы скомпилируете байт-код скрипта python, то заметите, что на выполнение кода уходит на 50% меньше общего времени:
python some.py > /dev/null 0.25s user 0.01s system 63% cpu 0.413 total
compiled:
./some.pyc 0.22s user 0.00s system 77% cpu 0.282 total
Как видите, есть несколько факторов, которые могут повлиять на время выполнения между различными инструментами.
Когда впервые появились твердотельные накопители, существовало распространенное заблуждение, что твердотельные накопители всегда быстрее жестких дисков. Это было совсем не так — даже в те времена с жестким диском можно было легко сделать 125+ МБ/с, единственным требованием было выполнение последовательного чтения или записи. Напротив, последовательная запись на исходные твердотельные накопители часто была медленнее, и скорость чтения также часто не впечатляла.
Короче говоря, :ваш dd тестирует последовательную пропускную способность, тогда как ваш nginx использует произвольный доступ. Жесткие диски имеют очень ограниченную емкость для операций случайного поиска, порядка значительно менее 100 операций в секунду для диска 7,2 тыс. об/мин любого поколения(по сравнению с более чем 10 тыс. IOPS в современных твердотельных накопителях ), что значительно ограничивает общую пропускную способность, если вы зависите от произвольного доступа к файловой системе для своей работы. В настоящее время 100 IOPS настолько медленны, что если бы жесткие диски были «изобретены» сегодня, они, вероятно, были бы отвергнуты как оторванные от реальности.
Поскольку вы обслуживаете видео, где последовательный доступ к большим -файлам встречается чаще, чем в других веб-приложениях, ваши показатели реальной -пропускной способности уже не так уж плохи — 59,96 МБ/с в реальном -жизнь, когда последовательный бенчмарк показывает 117 МБ/с, уже впечатляет. Решение может состоять в том, чтобы перейти на большее количество жестких дисков, использовать жесткие диски с более высокой скоростью вращения для увеличения количества операций ввода-вывода в минуту или перейти на твердотельный накопитель.