Я работаю в научном учреждении, и одна из задач, над которыми я сейчас работаю, включает в себя запуск симуляции и вывод данных, которые он генерирует, на лету на жесткий диск. Когда я говорю «на лету», я имею в виду, что программа сама выкладывает данные на диск каждую секунду или около того. Эти симуляции написаны исключительно в однопоточном C++ и выполняются на Mac Pro. Соответствующие спецификации этого Mac приведены ниже:
OSX Version: 10.6.8
Model Name: Mac Pro
Model Identifier: MacPro4,1
Processor Name: Quad-Core Intel Xeon
Processor Speed: 2.66 GHz
Number Of Processors: 2
Total Number Of Cores: 8
Intel Xeon с поддержкой многопоточности поддерживает до 8 виртуальных ядер
Я выполняю симуляции в простом файле .sh, используя следующий синтаксис:
nohup simulation1.o configfile 2> /dev/null > /dev/null &
nohup simulation2.o configfile 2> /dev/null > /dev/null &
и так далее...
Использование nohup означает, что мне не нужно беспокоиться о случайных отключениях при удаленной работе.
Когда я смотрю на ps
после запуска, скажем, 10, моделирования с использованием моего bash-файла, я обнаруживаю, что в столбце STATE процессы регулярно переключаются с «работы» на «зависание». Кроме того, я ожидаю, что загрузка ЦП будет 100% для каждого процесса, но вместо этого каждый процесс в среднем составляет около 28%. (Я ожидаю, что загрузка ЦП будет 100% для каждого процесса, заключается в том, что когда я запускаю только одну из этих симуляций, столбец ЦП достигает максимума около 100%, добавляя к тому факту, что ядра имеют гиперпоточность. Это очень тяжелая симуляция процессора.)
Кто-нибудь знает, что происходит? В частности:
- Что означает «застрял» по отношению к
ps
- Почему ЦП не максимально для каждого процесса?
Я был бы очень признателен за помощь.