Изучаем Linux, 302 (смешанные среды): Настройка производительности

Измерение и повышение производительности Samba

Эта статья поможет вам подготовиться к сдаче экзамена LPI-302. Она объясняет, как измерить и повысить производительность Samba.

Шон Уолберг, старший сетевой инженер, P.Eng

Шон Уолберг работал с Linux- и UNIX-системами с 1994 года в академических, корпоративных и "провайдерских" кругах. Он широко освещает вопросы системного администрирования в течение нескольких последних лет. С ним можно связаться по адресу sean@ertw.com.



25.10.2012

Об этой серии

Эта серия статьей поможет вам освоить задачи администрирования операционной системы Linux. Вы можете использовать материалы этих статей для подготовки к экзаменам программы LPIC третьего уровня (LPIC-3).

Чтобы посмотреть описания статей этой серии и получить ссылки на них, обратитесь к нашему перечню материалов для подготовки к экзаменам LPIC-3. Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит текущие (по состоянию на ноябрь 2010 года) цели экзаменов сертификации LPIC-3.

В этой статье рассматриваются следующие темы:

  • Измерение производительности Samba.
  • Оптимизация оперативной памяти, используемой Samba.
  • Повышение скорости передачи файлов в среде Server Message Block/Common Internet File System.

Эта статья поможет вам подготовиться к сдаче экзамена LPI 302 (специализация "Смешанные среды") и содержит материалы цели 315.3 темы 315. Цель имеет вес 1.

Предварительные требования

Чтобы извлечь наибольшую пользу из наших статей, необходимо обладать продвинутыми знаниями о Linux и иметь работоспособный компьютер с Linux, на котором можно будет выполнять все встречающиеся команды. Также необходимо хорошо понимать принципы работы сетей TCP/IP.


Измерение производительности Samba

О факультативном экзамене LPI-302

Как и многие другие программы, программа сертификации Linux Professional Institute (LPIC) предусматривает различные уровни сертификации, где для получения каждого последующего уровня необходимо обладать более глубокими знаниями и практическим опытом. Экзамен LPI-302 – это факультативный экзамен третьего уровня программы LPIC, требующий продвинутых знаний в области системного администрирования Linux.

Для получения сертификата LPIC третьего уровня (LPIC-3) необходимо успешно сдать два экзамена первого уровня (101 и 102), два экзамена второго уровня (201 и 202), а также базовый экзамен 301 третьего уровня (LPIC-3). Если вы получили сертификат третьего уровня, вы можете сдавать факультативные экзамены по определенным специализациям, например, экзамен LPI-302.

Прежде чем что-то улучшать, необходимо точно измерить это "что-то". Сначала мы измеряем что-либо, затем вносим изменения, измеряем снова и сравниваем результаты. В случае с Samba необходимо измерить следующие параметры:

  • Время отклика и пропускную способность клиента при отсутствии нагрузки на сервер.
  • Время отклика и пропускную способность клиента при определенной загрузке сервера.
  • Характеристики сервера при его определенной загрузке.
  • Предельно допустимую нагрузку сервера (количество клиентов или пропускная способность).

Измерение времени отклика позволяет понять, что может получить клиент в тестовой среде, поэтому для тестов нужно создать условия, приближенные к реальности. Например, производительность отличается при обращении к одному и тому же файлу, и копировании директории, содержащей файлы различного объема – это не одно и то же.

Измерение характеристик сервера при его определенной загрузке позволяет понять, сколько ресурсов имеется в запасе. Если при определенной загрузке сервер перестает справляться с выполнением своих задач, значит, его ресурсов уже не хватит для нормальной работы при увеличении нагрузки. Этот же подход используется для измерения загрузки рабочего сервера и экстраполяции его запаса мощностей.

Наконец, с помощью так называемых "стресс-тестов" (полная загрузка сервера для определения его предельных возможностей) также можно получить интересную информацию, хотя и не настолько полезную, как информация, которую выдают другие тесты. Если вы хотите выяснить, сможет ли ваш сервер справиться с определенной нагрузкой, то этот стресс-тестирование поможет вам получить такую информацию. Зачастую такие тесты более полезны при измерении низкоуровневых характеристик, например, максимальной производительности дисковой подсистемы ввода/вывода сервера.

Samba – это сетевой сервер, поэтому важно как можно точнее создать модель используемого сетевого окружения. Если время обращения ваших клиентов к серверу составляет 50 миллисекунд, то для них эффект сетевой задержки будет более ярко выражен по сравнению с эффектом для локальных клиентов. Эта информация позволяет вам соответствующим образом настраивать приоритеты.

Разработка теста

Можно купить довольно дорогое устройство, которое может имитировать клиентский трафик и выполнять точные измерения производительности. Если вы хотите выполнить эталонные тесты (benchmarks) или разрабатываете серверное аппаратное обеспечение, то такое устройство может оказаться хорошим решением. Однако если вам просто необходимо более оптимально настроить ваш сервер, а времени и средств как всегда в обрез, то, не стоит тратить деньги на дорогое устройство, которое еще надо будет освоить.

В качестве примера рассмотрим первый тест, оценивающий производительность случайного чтения путем загрузки большого числа файлов с помощью клиента, использующего командную строку Samba. Нас будет интересовать главный вопрос: как быстро эта директория может быть загружена.

Как и любая "правильная" утилита UNIX®, утилита smbclient может считывать список инструкций с устройства стандартного ввода. В следующем фрагменте кода показано несколько команд для загрузки содержимого директории:

prompt
recurse
mget smbtest

Команда prompt подавляет запросы на подтверждение загрузки, а команда recurse говорит о необходимости просмотра всех вложенных директорий при загрузке нескольких файлов. Наконец, команда mget smbtest инструктирует клиента начать загрузку директории smbtest. Поместите в эту директорию тестовые файлы объемом в несколько сот мегабайтов, и тест для проверки производительности готов.

Для запуска теста подключитесь к общему ресурсу с помощью smbclient и перенаправьте стандартный ввод в файл. В листинге 1 показано, как сделать это.

Листинг 1. Запуск теста
$ time smbclient '\\192.168.1.1\test' password < instructions 
Domain=[BOB] OS=[Unix] Server=[Samba 3.5.8-75.fc13]
getting file \smbtest\file2 of size 524288000 as file2 (5323.2 kb/s) (average 5323.2 kb/s)
getting file \smbtest\file1 of size 139460608 as file1 (5275.3 kb/s) (average 5313.0 kb/s)

real	2m2.289s
user	0m0.509s
sys	0m4.580s

Листинг 1 начинается с команды time, которая замеряет время выполнения команды, указанной в последующих аргументах. Основной командой является команда smbclient, а ее аргументами – имя общего ресурса и пароль пользователя. Можно также добавлять другие стандартные аргументы, например, -U для передачи имени пользователя. Наконец, конструкция < instructions перенаправляет стандартный ввод команды smbclient в файл под названием instructions, содержащий инструкции из первого фрагмента кода. В результате мы получаем процесс пакетного копирования нескольких файлов с измеряемым временем выполнения.

Создайте ваш собственный канал

Вы можете создать ваш собственный RSS, Atom или HTML канал обновлений и получать уведомления о новых или обновленных статьях нашего сайта. Для этого перейдите на страницу developerWorks RSS feeds, выберите зону Linux, установите флажок Статьи и введите в качестве ключевой фразы Linux Professional Institute, после чего выберите требуемый тип канала.

В результате выполнения этой команды был получен список переданных файлов, включающий среднее время передачи каждого из них. Вывод команды time помещен в конце этого списка и показывает, что копирование файлов объемом 664 МБ заняло 2 минуты и 2.289 секунды. Это мы и принимаем за эталонный результат теста. Если после каких-либо изменений время выполнения теста будет превышать 2 минуты и 2 секунды, то это значит, что эти изменения ухудшили производительность.

Если необходимо протестировать параметры Samba независимо от производительности локальных дисков и кэширования, то можно запустить тест несколько раз и взять за эталон результаты его последнего выполнения. Это даст гарантию того, что операционная система будет по максимуму кэшировать данные и минимизировать обращения к жесткому диску. В процессе тестирования изменений убедитесь в том, что количество свободной оперативной памяти на сервере не изменилось, в противном случае разница в объеме кэшированных данных может повлиять на результаты вашего эксперимента.

Просмотр статуса Samba

Имея информацию о центральном процессоре, оперативной памяти, жестких дисках и сетевых интерфейсах, можно оценить состояние самого сервера, но нельзя понять, как работают сами приложения. Для просмотра текущих подключений и файловой активности Samba используется утилита smbstatus, которая также оказывается полезной для настройки производительности и диагностики неисправностей.

В листинге 2 приведен пример использования команды smbstatus.

Листинг 2. Команда smbstatus
$ smbstatus
lp_load_ex: refreshing parameters
Initialising global parameters
params.c:pm_process() - Processing configuration file "/etc/samba/smb.conf"
Processing section "[global]"
Processing section "[homes]"
Processing section "[printers]"
Processing section "[extdrive]"

Samba version 3.5.8-75.fc13
PID     Username      Group         Machine                        
-------------------------------------------------------------------
17456     fred         fred       macbookpro-d0cd (::ffff:192.168.1.167)

Service      pid     machine       Connected at
-------------------------------------------------------
fred         17456   macbookpro-d0cd  Mon Jul 18 07:36:46 2011
extdrive     17456   macbookpro-d0cd  Mon Jul 18 07:36:46 2011

Locked files:
Pid    Uid   DenyMode   Access      R/W        Oplock      SharePath   Name   Time
----------------------------------------------------------------------------------
17456  505   DENY_NONE  0x100081    RDONLY     NONE        /home/fred   .  
17456  505   DENY_NONE  0x100081    RDONLY     NONE        /home/fred   Documents

В листинге 2 показана текущее состояние сервера Samba. Из вывода команды видно, что в текущий момент к Samba подключен один пользователь с именем fred, который смонтировал два общих ресурса (fred и extdrive). Также имеются две заблокированных директории.


Настройка сети

Samba – это демон, основной задачей которого является отправка и получение пакетов по сети. Этим процессом, а также взаимодействием Samba с операционной системой управляют несколько параметров, которые могут значительно влиять на производительность.

Основные параметры

Многие демоны обеспечивают одинаковый уровень обслуживания для всех клиентов без исключения, не различая их. Если служба перегружена, то каждый клиент получает одинаково плохой сервис. Эту ситуацию можно сравнить с телефонной сетью, в которой существует противоположная картина: если в сети возникает перегрузка, то люди не могут совершать новые звонки, однако уже существующие звонки продолжаются, как будто бы ничего не произошло. Если вы будете искусственно ограничивать значения определенных параметров Samba, то сможете предотвратить нехватку ресурсов.

Параметр max connections ограничивает количество подключений к определенному серверу Samba. Каждое подключение потребляет память и ресурсы центрального процессора, поэтому при слишком большом количестве подключений сервер может оказаться перегруженным. По умолчанию число подключений не ограничено. Если вы хотите ограничить число подключений к загруженному серверу, то можете задать жесткий лимит с помощью параметра max connections.

Параметр max smbd processes задает максимальное количество процессов, которые могут быть запущены. Этот параметр похож на параметр max connections, но управляет количеством процессов, создаваемых в результате подключений.

Параметр log level определяет количество информации, записываемой в системные журналы, и чем подробнее эта информация, тем больше ресурсов сервер тратит для ее записи на диск. Значения 1 и 2 этого параметра снижают объем записываемых на диск log-файлов и позволяют выделять больше ресурсов для обслуживания клиентов.

Установка параметров сокетов

Когда приложение посылает операционной системе запрос на открытие сетевого подключения, оно также может запрашивать определенный способ обработки пакетов с помощью параметров сокетов. Параметры сокетов могут включать или отключать определенные настройки, влияющие на производительность, устанавливать для пакетов определенные биты качества обслуживания или же задавать опции сокетов на уровне ядра.

Команда socket options может управлять битами type of service (TOS), устанавливаемыми для пакетов. Биты TOS говорят маршрутизаторам о том, как следует обрабатывать трафик. Если маршрутизаторы настроены на распознавание этих битов, то трафик может обрабатываться в соответствии с требованиями приложений. Ключевое слово IPTOS_LOWDELAY лучше всего подходит для сетей с низкими задержками (например, для локальных сетей), тогда как параметр IPTOS_THROUGHPUT – наоборот, для глобальных сетей с большими задержками. Ваша сеть может быть настроена по-другому, поэтому возможны ситуации, когда использование этих опций может иметь обратный эффект.

Параметр TCP_NODELAY отключает алгоритм Нагла (см. раздел Ресурсы), который больше подходит для диалоговых протоколов с большим количеством пересылаемых пакетов.

Если в вашей сети есть брандмауэры или другие устройства, сохраняющие состояние, то, возможно, вас заинтересует параметр SO_KEEPALIVE, разрешающий использование элементов поддержки установленных TCP-соединений (TCP keepalives). Эти периодически рассылаемые пакеты поддерживают соединения открытыми и сохраняют состояние внутри брандмауэров. В противном случае брандмауэр будет сбрасывать пакеты, и клиентам понадобится какое-то время на то, чтобы определить необходимость повторного подключения к серверу.


Дополнительные факторы, влияющие на производительность

Настройка различных параметров в поисках оптимальных конфигураций может оказаться интересным занятием, но на производительность могут оказывать влияние некоторые вещи, совсем не связанные с конфигурацией Samba. Время операций увеличивается каждый раз, когда сервер выполняет какие-то действия помимо чтения данных с диска и их отправки клиентам или получения входящего трафика и его записи на диск.

Ошибки Ethernet

Если пакет теряется во время передачи, то ядро должно заметить это и запросить повторную передачу пакета. Этот процесс может замедлить быстрый обмен данными, особенно если в сети между двумя устройствами существует большая задержка. Типичный источник потери пакетов - это несоответствие настроек коммутатора и сервера: либо протокол автосогласования не может предоставить правильные параметры, либо на одной стороне параметры заданы явно, а на другой включен режим автосогласования. Это приводит к ошибкам на обеих сторонах. Такие ошибки можно обнаружить при помощи команды netstat:

# netstat -d -i 2
Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth1       1500   0  5258404      0      0      0  3024340      0      0      0 BMRU
eth1       1500   0  5258409      0      0      0  3024341      0      0      0 BMRU
eth1       1500   0  5258411      0      0      0  3024342      0      0      0 BMRU

Этот код показывает, что многоцелевая команда netstat, запущенная с параметрами -d -i 2, отслеживает ошибки на интерфейсе каждые две секунды. Каждые две секунды выводится статус всех доступных интерфейсов. В приведенном выше примере столбцы RX-OK и TX-OK содержат количество получаемых и отправляемых пакетов. Мы видим, что ошибки, сбросы и переполнения отсутствуют для обоих направлений трафика, т. е. пакеты не теряются.

Если вы обнаружите ошибку, то выясните с помощью команд mii-tool или mii-diag, какие скорость и режим дуплекса используются. В листинге 3 показано, как проверить сетевые параметры.

Листинг 3. Проверка сетевых параметров
# mii-tool 
eth1: negotiated 100baseTx-FD, link ok
# mii-diag eth1
Basic registers of MII PHY #24:  3000 782d 0040 6177 05e1 41e1 0003 0000.
 The autonegotiated capability is 01e0.
The autonegotiated media type is 100baseTx-FD.
 Basic mode control register 0x3000: Auto-negotiation enabled.
 You have link beat, and everything is working OK.
 Your link partner advertised 41e1: 100baseTx-FD 100baseTx 10baseT-FD 10baseT.
   End of basic transceiver information.

Листинг 3 начинается с команды mii-tool, которая выводит общую информацию об активных интерфейсах. Мы видим, что сетевой интерфейс работает на скорости 100 Мбит/с в режиме полного дуплекса и получил эти значения в процессе автосогласования. Команда mii-diag выводит более подробную информацию, которую уже можно отправить в службу поддержки для решения возникшей проблемы. Команду mii-tool можно использовать для решения проблем, связанных со скоростью и режимом дуплекса, хотя на практике лучше всего задавать для подключений режим автосогласования.

Обслуживание TDB-файлов

В статье "Изучаем Linux, 302 (смешанные среды): файлы базы данных Trivial Database" рассказывалось о файлах базы данных Trivial Database (TDB), которые Samba использует для сохранения состояния. Если с этими базами данных что-то случится, то у вашего сервера возрастет нагрузка (например, он будет выполнять лишний поиск данных на диске), а, возможно, он не сможет кэшировать информацию, поступающую от удаленных служб. К счастью, в случае возникновения проблем вы можете проверять и восстанавливать целостность TDB-файлов. Временные TDB-файлы можно удалить, и они будут вновь созданы после перезагрузки Samba. Что касается остальных TDB-файлов, то не забывайте выполнять их резервное копирование и проверять резервные копии с помощью команды tdbbackup -v.

Диагностика клиента

Иногда причиной низкой производительности может быть клиентский компьютер. На нем могут возникать проблемы с дуплексом, компьютерными вирусами, а также другие различные проблемы. Использование в тестах исправного клиентского компьютера поможет исключить сервер из числа потенциальных источников снижения производительности.


Заключение

Эта статья завершает серию руководств для подготовки к экзамену LPIC 302. Еще раз просмотрите ваши конспекты, и желаем удачи на экзамене!

Ресурсы

Научиться

  • Оригинал статьи: Learn Linux, 302 (Mixed environments): Performance tuning (EN).
  • Man-страница smb.conf (EN) содержит дополнительные примеры и описания команд, встречающихся в этой статье.
  • Настройка кластера Samba (EN) позволяет обрабатывать больше нагрузки и устраняет риск сбоя из-за неисправности одного из серверов.
  • Доктор Гюнтер (Dr. Gunther) из компании Performance Dynamics (EN) опубликовал книгу, посвященную анализу и настройке производительности. Если вы сдавали экзамен LPIC 301, то вам может быть известен метод анализа PDQ.
  • Алгоритм Нагла (EN) может очень сильно повлиять на скорость сети.
  • На Web-сайте программы сертификации LPIC (EN) вы найдете подробные цели, списки задач и примерные вопросы всех трех уровней сертификации на администратора Linux-систем профессионального института Linux. В частности, на этом сайте представлены подробные цели экзамена LPI 302 (EN), а также примеры заданий и вопросов (EN).
  • Просмотрите всю серию статей для подготовки к экзаменам института LPI (EN) на сайте developerWorks, основанных на предыдущих целях, определенных до апреля 2009 года, чтобы изучить основы администрирования Linux и подготовиться к экзаменам для получения сертификата администратора Linux.

Получить продукты и технологии

  • Если вы ищете Open Source-инструменты для тестирования производительности (EN), то взгляните на список инструментов на сайте opensourcetesting.org.
  • Wireshark (EN) – лучший инструмент для анализа пакетов. Его можно использовать для анализа пакетов, отправляемых и получаемых вашим сервером.
  • Эталонный тест файловой системы IOzone (EN) помогает выяснить скорость вашей системы хранения.
  • Оцените продукты IBM (EN) любым удобным для вас способом: вы можете загрузить ознакомительные версии продуктов, поработать с ними в онлайновом режиме, использовать их в облачной среде или же потратить несколько часов на изучение SOA Sandbox (EN) и узнать, как можно эффективно применять сервис-ориентированную архитектуру при разработке программного обеспечения.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=842735
ArticleTitle=Изучаем Linux, 302 (смешанные среды): Настройка производительности
publish-date=10252012