Привет Повелители Linux / UNIX,
У кого-нибудь из вас есть практическое правило относительно того, сколько переключений контекста (на ядро процессора) является нормальным на сервере Linux?
Мой колледж здесь поднял это, и он видит 16K на 8-ядерном x86_64
компьютере.
Вот некоторые статистические данные sarface за последние несколько дней ...
И чтобы увидеть статистику создания процесса, вот логарифмическое представление того же графика ...
И 8 ядер скучно до смерти ...
CS против IOwait (масштаб x10000)
Больше бесполезной информации на случай, если кто-нибудь спросит ..
- Хранилище, на котором работает сервер, - это 0,5 ТБ SAN через FC
- Там 8 ГБ ОЗУ, в основном кеш - без подкачки.
linux
performance
context-switch
Ксеркс
источник
источник
Ответы:
Это очень сильно зависит от типа приложения, которое вы запускаете. Если у вас есть приложения, которые очень хорошо запускают системные вызовы WRT, вы можете ожидать большого количества переключения контекста. Если большинство ваших приложений бездействуют и просыпаются только тогда, когда что-то происходит в сокете, вы можете ожидать низкой скорости переключения контекста.
Системные звонки
Системные вызовы вызывают переключение контекста по своей собственной природе. Когда процесс выполняет системный вызов, он в основном говорит ядру взять на себя управление с его текущего момента времени и памяти для выполнения действий, которые процесс не имеет привилегий, и вернуться к тому же месту, когда оно выполнено.
Когда мы посмотрим на определение системного вызова write (2) из Linux, это становится очень ясным:
По сути, это говорит ядру о том, что нужно перенять операцию из процесса, перейти на
count
байты, начиная с адреса памяти, на который указывает*buf
файловый дескрипторfd
текущего процесса, а затем вернуться обратно к процессу и сообщить ему, как все прошло.Хорошим примером, демонстрирующим это, является выделенный игровой сервер для игр на основе Valve Source, hlds . http://nopaste.narf.at/f1b22dbc9 показывает количество системных вызовов в одну секунду, выполненных одним экземпляром игрового сервера, на котором не было игроков. Этот процесс занимает около 3% процессорного времени на Xeon X3220 (2,4 ГГц), просто чтобы вы почувствовали, насколько это дорого.
Многозадачность
Другим источником переключения контекста могут быть процессы, которые не выполняют системные вызовы, но нуждаются в удалении из данного ЦП, чтобы освободить место для других процессов.
Хороший способ визуализировать это - cpuburn . cpuburn сам не выполняет никаких системных вызовов, он просто перебирает свою собственную память, поэтому он не должен вызывать никакого переключения контекста.
Возьмите бездействующий компьютер, запустите vmstat, а затем запустите burnMMX (или любой другой тест из пакета cpuburn) для каждого ядра ЦП, имеющегося в системе. К тому времени у вас должно быть полное использование системы, но вряд ли какое-либо усиление переключения контекста. Затем попробуйте запустить еще несколько процессов. Вы увидите, что скорость переключения контекста увеличивается, когда процессы начинают конкурировать за ядра ЦП. Количество переключений зависит от соотношения процессов / ядра и многозадачного разрешения вашего ядра.
дальнейшее чтение
У linfo.org есть хорошая статья о переключениях контекста и системных вызовах . В Википедии есть общая информация и хороший набор ссылок на системные вызовы.
источник
System calls cause context switches by their very own nature
кажется неправильным. Системные вызовы вызывают переключение режимов, как указано в linfo.org/context_switch.htmlмой умеренно загруженный веб-сервер работает со скоростью 100-150 переключателей в секунду большую часть времени с пиками в тысячи.
Высокие скорости переключения контекста сами по себе не являются проблемой, но они могут указать путь к более серьезной проблеме.
редактировать: переключение контекста является симптомом, а не причиной. Что вы пытаетесь запустить на сервере? Если у вас многопроцессорная машина, вы можете попробовать установить привязку к процессору вашего основного сервера.
В качестве альтернативы, если вы используете X, попробуйте перейти в режим консоли.
Снова отредактируйте: при 16 тыс. с / с каждый процессор усредняет два переключателя в миллисекунду, что составляет от половины до шестой части нормального временного интервала. Может ли он запустить много потоков, связанных с IO?
Редактировать снова опубликовать графики: Конечно, выглядит IO привязанным. система проводит большую часть своего времени в SYS, когда переключатели контекста высоки?
отредактируйте еще раз: высокий iowait и система в этом последнем графике - полностью затмевая пространство пользователя. У вас проблемы с IO.
Какую карту FC вы используете?
редактировать: хммм есть ли шанс получить какие-то тесты для доступа к SAN с помощью bonnie ++ или dbench в мертвый период? Мне было бы интересно узнать, есть ли у них аналогичные результаты.
редактировать: я думал об этом на выходных, и я видел похожие шаблоны использования, когда Бонни делает проход «записать байт за раз». Это может объяснить большое количество происходящих переключений, поскольку каждая запись потребует отдельного системного вызова.
источник
Я больше склонен беспокоиться о загруженности процессора состоянием системы. Если оно близко к 10% или выше, это означает, что ваша ОС тратит слишком много времени на переключение контекста. Хотя перемещение некоторых процессов на другую машину происходит намного медленнее, это заслуживает этого.
источник
Именно поэтому вы должны стараться поддерживать базовые показатели производительности для своих серверов. Таким образом, вы можете сравнить вещи, которые вы внезапно заметили, с вещами, которые вы записали в прошлом.
Тем не менее, у меня есть работающие серверы (в основном, не очень загруженные серверы Oracle), которые устойчивы около 2 тыс. С некоторыми пиками 4 тыс. Для моих серверов это нормально, для серверов других людей, которые могут быть слишком низкими или слишком высокими.
Как далеко вы можете вернуться в ваших данных?
Какую информацию о процессоре вы можете дать нам?
источник
Там нет правила большого пальца. Переключение контекста - это просто процессор, переходящий от обработки одного потока к другому. Если вы запустите много процессов (или несколько многопоточных), вы увидите больше переключателей. К счастью, вам не нужно беспокоиться о количестве переключений контекста - стоимость небольшая и более или менее неизбежна.
источник