У меня есть 8-ядерный сервер на базе Linux, предназначенный для обслуживания NFS для 80 клиентов Linux, выполняющих пакетные задания. Всего у клиентов 400 ядер, поэтому обычно они одновременно выполняют 400 одноядерных пакетных заданий.
Иногда множество пакетных заданий пытаются выполнить ввод-вывод одновременно и исчерпывают количество потоков nfsd на сервере, которых в настоящее время 80. Пакетное задание получает ошибку ввода-вывода (например, Permission Denied) и выскакивает.
Я хотел бы увеличить количество потоков nfsd, но хочу знать:
В идеальном мире ваши пакетные задания должны иметь некоторую логику отсрочки, и вы должны придерживаться 80 потоков.
Я ни в коем случае не эксперт в NFSd, но правила потоковой передачи Linux, которые применяются ко всем приложениям Linux, должны применяться. Правило здесь состоит в том, что каждый поток занимает определенное количество места в памяти, реально этот объем памяти настолько мал на среднем производственном сервере (с двузначным числом ОЗУ), что в значительной степени не имеет значения, более насущной проблемой является способ реализации потоков в таких приложениях, как NFSd - Semaphores. Подсчет семафоров - отличный способ гарантировать отсутствие условий блокировки в потоковой ситуации, проблема в том, что семафоры отслеживают потоки и увеличивают и уменьшают счетчик, чтобы отразить «свободные» и «заблокированные» потоки, чтобы сделать это, они должны индексировать доступные потоки и проверять, что против заблокированных потоков для обеспечения времени выполнения должным образом, это делается полуэффективным способом, который растет экспоненциально, если у вас NFSd требует очень высокой скорости, вы заметите увеличение вычислений время примерно эквивалентно удвоению времени выполнения для регистрации нового потока, к счастью, это такое маленькое значение времени поиска (одна инструкция) для начала (называется базой, если вы помните алгебру :), что вы можете иметь очень большие показатели без любые серьезные проблемы.
"Слишком длинный"; Не читал суммирование - на вашем месте я бы ограничил количество потоков ожидаемым максимальным количеством одновременных хостов, но я бы также провел некоторое тестирование, чтобы убедиться, что время выполнения соответствует вашим ожидаемым значениям. Я понимаю, что это, вероятно, не очень поможет вам, но очень сложно проанализировать соответствующую конфигурацию без ожидаемых сценариев использования.
Кроме того, если вы экстраполируете цифры Sun, процессор 2,2 ГГц должен иметь возможность без проблем работать где-то в области 800 потоков, даже если эти числа по существу произвольны, это дает мне ощущение, что вы будете хорошо с моим предыдущим предложением
Не используйте NFS. NFS отлично подходит для доступа к незначительным файлам, но рушится при любой нагрузке. Вы исследовали некоторые другие технологии, такие как AFS или Hadoop?