У меня есть приложение для анализа данных, которое связано с процессором и выдает ~ 35 МБ / с данных на каждый поток выполнения.
Я пытаюсь выяснить, сколько потоков я могу запускать одновременно, и иметь возможность записывать на диск, не заставляя каждый из них бесконечно ждать ввода-вывода.
Я нашел этот ответ о том, как рассчитать производительность записи, которую я выполнил на моих двух локальных дисках, SSD и 7200 об / мин HD.
Результаты следующие:
SSD:
$ time sh -c "dd if=/dev/zero of=testfile bs=1000k count=1k && sync"
1024+0 records in
1024+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.668421 s, 1.6 GB/s
real 0m3.549s
user 0m0.000s
sys 0m0.456s
С синхронизацией это 281 МБ / с
HD:
$ time sh -c "dd if=/dev/zero of=testfile bs=1000k count=1k && sync"
1024+0 records in
1024+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 8.79985 s, 119 MB/s
real 0m10.122s
user 0m0.004s
sys 0m0.549s
С синхронизацией это 98 МБ / с.
Могу ли я сделать следующие выводы?
Запись результатов на SSD:
Таким образом, я мог запустить 8 потоков одновременно. (281/35 = 8)
Запись результатов на HD:
Таким образом, я мог запускать 2 потока одновременно. (281/35 = 2,8)
Есть ли другие соображения, которые мне нужно принять во внимание, например, скорости межсоединений и т. д.? (Мои диски подключены с помощью SATA 3)
Если приведенный выше анализ верен, могу ли я добавить дополнительные диски, чтобы разрешить выполнение большего количества потоков? Если да, будут ли они совместно использовать межсоединение и, следовательно, ввести верхний предел из-за этого, и если да, то как я могу это вычислить?)
Необходимо учитывать время поиска с жесткими дисками. На самом деле, одновременная запись на жесткие диски, вероятно, будет очень медленной из-за постоянного поиска жесткого диска.
В общем, это неправильный способ оценивать таким образом возможную емкость программы. Существует так много факторов, влияющих на производительность, что таким способом невозможно получить какие-либо реальные показатели производительности
. Правильный способ - использовать научный метод, запустить его в системе, измерить производительность. Если производительность недостаточно высока, установите его на новое оборудование и повторяйте, пока производительность не станет достаточно хорошей.
В этом вопросе содержится более подробная информация об использовании научных методов.