Контакты

«Узкое место», что это? Выявление узких мест в производственной программе К методам ликвидации узких мест относят.

Существует такая статистика: 20% кода выполняется 80% времени. Точность ее
вряд ли полностью соответствует реальному положению вещей, а вот общий смысл
довольно интересен: получается, что оптимизация всего приложения – занятие
неблагодарное и глупое, а реальные результаты может дать только оптимизация тех
20% приложения, которые выполняются дольше всего. Причем найти эти 20% не так уж
и сложно.

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

Простейшее профилирование можно произвести голыми руками (и ниже я покажу,
как это сделать), однако лучше положиться на сообщество, представители которого
уже создали все необходимые инструменты. Первый и наиболее популярный инструмент
носит имя GNU Profiler (или gprof). Он испокон веков используется для
профилирования кода, генерируемого компилятором GCC. Второй - GNU Coverage
testing tool (gcov), утилита для более детального анализа производительности.
Третий - набор инструментов отладки и профилирования под общим именем Google
Performance Tools (сокращенно GPT). Ну а четвертый - это Valgrind, который хоть
и предназначен для поиска ошибок работы с памятью, но содержит в своем арсенале
ряд утилит для анализа производительности программ.

Начнем, как и полагается, с классики.

GNU Profiler

GNU Profiler (gprof) - один из старейших профайлеров, доступных для
операционных систем типа UNIX. Он входит в состав пакета gcc, и потому может
быть использован для профилирования программ, написанных на любом поддерживаемом
им языке (а это не только C/C++, но и Objective-C, Ada, Java).

Сам по себе gprof не является инструментом профилирования, а лишь позволяет
отобразить профильную статистику, которая накапливается приложением во время
работы (само собой разумеется, по умолчанию никакое приложение этого не делает,
но может начать, если собрать программу с аргументом "-pg").

Рассмотрим, как это работает в реальных условиях. Чтобы ощутить все
достоинства gprof, мы применим ее не к какому-нибудь абстрактному, искусственно
созданному приложению, а к самому настоящему повседневно используемому. Пусть
это будет gzip.

Получаем и распаковываем исходники архиватора:

$ wget www.gzip.org/gzip-1.3.3.tar.gz
$ tar -xzf gzip-1.3.3.tar.gz
$ cd gzip-1.3.3

Устанавливаем инструменты, необходимые для сборки (в Ubuntu это делается
через инсталляцию мета-пакета build-essential):

$ sudo apt-get install build-essential

Запускаем конфигуратор сборки, передав в переменной окружения CFLAGS аргумент
"-pg":

$ CFLAGS="-pg" ./configure

Компилируем программу:

Теперь у нас есть бинарник gzip, способный вести статистику своего
исполнения. Каждый его запуск будет сопровождаться генерацией файла gmon.out:


$ ls -l gmon.out
-rw-r--r-- 1 j1m j1m 24406 2010-11-19 14:47 gmon.out

Этот файл не предназначен для чтения человеком, но может быть использован для
создания подробного отчета об исполнении:

$ gprof ./gzip gmon.out > gzip-profile.txt

Наиболее важная часть полученного файла показана на скриншоте.

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

Попробуем проанализировать отчет. Первой в списке идет функция deflate,
которая была вызвана всего один раз, но "сожрала" 29% всего времени исполнения
программы. Это реализация алгоритма компрессии, и, если бы перед нами стояла
задача оптимизировать gzip, мы должны были бы начать именно с нее. 22% времени
ушло на исполнение функции longest_match, но, в отличие от deflate, она была
вызвана аж 450 613 081 раз, поэтому каждый отдельный вызов функции занимал
ничтожное количество времени. Это второй кандидат на оптимизацию. Функция
fill_window отняла 13% всего времени и была вызвана "всего" 22 180 раз.
Возможно, и в этом случае оптимизация могла бы дать результаты.

Промотав файл отчета до середины (кстати, сразу за таблицей идет подробная
справка обо всех ее столбцах, что очень удобно), мы доберемся до так называемого
"графа вызовов" (Call graph). Он представляет собой таблицу, разбитую на записи,
отделенные друг от друга пунктиром (повторяющимися знаками минуса). Каждая
запись состоит из нескольких строк, при этом вторая строка вопреки здравому
смыслу называется "первичной" и описывает функцию, которой посвящена запись.
Строкой выше располагается описание вызывающей ее функции, а ниже - вызываемых
ей.

Столбцы содержат следующую информацию (слева направо): индекс (index, он есть
только в первичной строке и, по сути, ничего не значит); процент времени,
который уходит на выполнение функции (% time); количество времени, затрачиваемое
на ее выполнение в секундах (self); количество времени, затрачиваемое на
выполнение функции и всех вызываемых ею функций (children); количество вызовов
функции (called) и ее имя (name).

Граф вызовов оказывается очень полезен, когда речь заходит об оптимизации
чужого кода. Становятся видны не только узкие места программы, но и вся логика
ее работы, которая может быть неочевидна при изучении исходников.

GNU Coverage testing tool

Кроме gprof, компилятор GCC имеет в своем составе еще один инструмент
профилирования, который позволяет получить более детальный отчет о выполнении
приложения. Утилита называется gcov и предназначена для генерации так
называемого аннотированного исходного кода, который напротив каждой строки
содержит количество ее исполнений. Это может понадобиться для более глубокого
изучения проблем приложения, когда функции, виновные в "тормозах", найдены, а
суть проблемы так и остается неясна (например, непонятно, какая строка в
многократно вложенном цикле внутри длиннющей функции несет ответственность за
аномальное падение производительности).

Gcov не может полагаться на статистику, генерируемую приложением при сборке с
флагом "-pg", и требует пересборки с флагами "-fprofile-arcs" и "-ftest-coverage":

$ CFLAGS="-fprofile-arcs -ftest-coverage"
./configure && make

$ ./gzip ~/ubuntu-10.10-desktop-i386.iso

Для каждого файла исходного кода будет сгенерирован граф вызовов, на основе
которого можно создать подготовленный для чтения человеком аннотированный
исходник:

$ gcov deflate.c
File "deflate.c"
Lines executed:76.98% of 139
deflate.c:creating "deflate.c.gcov"

Полученный в результате файл состоит из трех колонок: количество исполнений
строки, номер строки и сама строка. При этом для строк, не содержащих кода, в
первой колонке будет стоять знак минуса, а для строк, ни разу не выполненных -
последовательность шарпов: #####.

Google Performance Tools

Google Performance Tools (сокращенно GPT) - это разработка сотрудников Google,
предназначенная для поиска утечек памяти и узких мест приложений. Как и gprof,
GPT не является внешней по отношению к тестируемому приложению программой и
заставляет его самостоятельно вести статистику своего исполнения. Однако
используется для этого не внедренный на этапе сборки приложения код, а
библиотеки, которые могут быть прилинкованы к приложению во время сборки или
подключены при запуске.

Всего разработчикам доступно две подключаемых библиотеки: tcmalloc (которая,
по уверению авторов GPT, представляет собой самую быструю на свете реализацию
функции malloc, а также позволяет производить анализ того, как память
расходуется, выделяется и течет) и profiler, генерирующая отчет о выполнении
программы, наподобие gprof. Также в комплект входит утилита pprof,
предназначенная для анализа и визуализации накопленных данных.

Исходный код, а также rpm- и deb-пакеты всего этого набора доступны на
официальной страничке (code.google.com/p/google-perftools), однако я бы не
советовал заморачиваться с ручной установкой, так как набор доступен в
стандартных репозиториях Fedora и Ubuntu, и его можно установить одной простой
командой:

$ sudo apt-get install google-perftools \libgoogle-perftools0
libgoogle-perftools-dev

$ LD_PRELOAD=/usr/lib/libprofiler.so.0.0.0 \
CPUPROFILE=gzip-profile.log ./gzip \
/home/j1m/ubuntu-10.10-desktop-i386.iso

Однако сами гугловцы не советуют применять этот метод (очевидно из-за проблем
с программами, написанными на C++), рекомендуя линковать библиотеку во время
сборки. Что ж, не будем спорить.

Для экспериментов возьмем все тот же gzip и повторно пересоберем его,
слинковав бинарник с нужной библиотекой:

$ cd ~/gzip-1.3.3
$ make clean
$ ./configure
$ LDFLAGS="-lprofiler" ./configure && make

Теперь gzip вновь готов вести лог своего исполнения, но не будет делать этого
по умолчанию. Чтобы активировать профайлер, необходимо объявить переменную
окружения CPUPFOFILE и присвоить ей путь до файла профиля:

$ CPUPROFILE=gzip-cpu-profile.log ./gzip \
~/ubuntu-10.10-desktop-i386.iso
PROFILE: interrupts/evictions/bytes = 4696/946/91976

Как и в случае с gprof, получившийся отчет имеет бинарную форму и может быть
прочитан только с использованием специальной утилиты. В GPT ее роль выполняет
perl-скрипт pprof (в Ubuntu во избежание путаницы с другой одноименной утилитой
он переименован в google-pprof), который может генерировать не только таблицы и
аннотированные исходники на манер gcov, но и визуальные графы вызовов. Всего
существует 11 типов вывода этой утилиты, за каждым из которых закреплен
соответствующий аргумент командной строки:

  1. Текстовый (--text) - таблица, подобная выводу gprof;
  2. Callgrind (--callgrind) - вывод в формате, совместимом с утилитой kcachegrind (из пакета valgrind);
  3. Графический (--gv) - граф вызовов, немедленно отображаемый на экране;
  4. Листинг (--list=) - аннотированный листинг указанной функции;
  5. Дизассемблированный листинг (--disasm=) - аннотированный
    дизассемблированный листинг указанной функции;
  6. Символьный (--symbols) - листинг декодированных символьных имен;
  7. Графический файл (--dot, --ps, --pdf, --gif) - граф вызовов, сохраняемый
    в файл;
  8. Сырой (--raw) - подготовка бинарного файла профиля к передаче по сети
    (перекодируется с помощью печатаемых символов).

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

$ google-pprof --text ./gzip gzip-cpu-profile.log

Как видно на скриншоте, вывод представляет собой таблицу с перечислением всех
функций и затрат на их исполнение. На первый взгляд она кажется очень похожей на
таблицу, генерируемую утилитой gprof, но это не так. Будучи всего лишь
библиотекой, GPT не может вести статистику исполнения программы так же детально
и точно, как это делает код, внедренный прямо в приложение. Поэтому вместо
записи всех фактов вызова и выхода из функций (поведение программы, собранной с
флагом "-pg"), GPT применяет метод, называемый сэмплированием. Сто раз в секунду
библиотека активирует специальную функцию, в задачи которой входит сбор данных о
том, в какой точке в текущий момент происходит выполнение программы, и запись
этих данных в буфер. По завершению работы программы из этих данных формируется и
записывается на диск профильный файл.

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

Во всем остальном таблица сильно напоминает вывод gprof: по функции на
строку, по показателю на столбец. Всего столбцов шесть:

  1. Количество проверок для данной функции;
  2. Процент проверок на все остальные функции программы;
  3. Количество проверок для данной функции и всех ее потомков;
  4. То же число в процентах от общего количества проверок;
  5. Имя функции.

Поначалу такой подход к измерению времени исполнения кажется слишком
неточным, но если сравнить таблицы, полученные с помощью gprof, с таблицами
pprof, становится ясно, что они показывают одинаковую картину. Более того, GPT
позволяет изменить количество проверок на секунду времени с помощью переменной
окружения CPUPROFILE_FREQUENCY, так что точность можно увеличить в десять, сто
или тысячу раз, если того требует ситуация (например, если необходимо
профилировать исполнение очень небольшой программы).

Несомненным достоинством GPT перед gprof является умение представлять
информацию в графическом виде. Для активации этой функции pprof следует
запускать с флагом "--gv" (кстати, для показа графа будет использована
одноименная утилита):

$ google-pprof --gv ./gzip gzip-cpu-profile.log

Генерируемый в результате выполнения этой функции граф вызовов функций очень
наглядный и гораздо более простой для восприятия и изучения, чем аналогичный
текстовый граф, генерируемый командой gprof. Имя и статистика исполнения каждой
функции размещены в прямоугольниках, размер которых прямо пропорционален
количеству времени, затраченному на исполнение функции. Внутри прямоугольника
размещены данные о том, сколько времени ушло на исполнение самой функции и ее
потомков (время измеряется в проверках). Связи между прямоугольниками указывают
на очередность вызова функций, а числовые значения, указанные рядом со связями -
на время исполнения вызываемой функции и всех ее потомков.

Еще одно достоинство GPT заключается в способности использовать разные уровни
детализации для вывода данных, позволяя пользователю самому выбирать единицы
дробления. По умолчанию в качестве такой единицы используется функция, поэтому
любой вывод pprof логически разделен на функции. Однако при желании в качестве
единицы дробления можно использовать строки исходного кода (аргумент "--lines"),
файлы ("--files") или даже физические адреса памяти ("--addresses"). Благодаря
такой функциональности GPT очень удобно использовать для поиска узких мест в
больших приложениях, когда сначала ты анализируешь производительность на уровне
отдельных файлов, затем переходишь к функциям и, наконец, находишь проблемное
место на уровне исходного кода или адресов памяти.

И последнее. Как я уже говорил выше, GPT - это не только хороший профайлер,
но и инструмент для поиска утечек памяти, поэтому у него есть один очень
приятный побочный эффект в виде способности к анализу потребления памяти
приложением. Для этого приложение должно быть собрано или запущено с поддержкой
библиотеки tcmalloc, а в переменную HEAPPROFILE записан адрес для размещения
профильного файла. Например:

$ LD_PRELOAD=/usr/lib/libtcmalloc.so.0.0.0 \
HEAPPROFILE=gzip-heap-profile.log \
./gzip ~/ubuntu-10.10-desktop-i386.iso
Starting tracking the heap
Dumping heap profile to gzip-heap-profile.log.0001.heap (Exiting)

К полученному файлу будет добавлено окончание 0000.heap. Если натравить на
этот файл утилиту pprof и указать флаг "--text", она выведет на экран таблицу
функций и уровень потребления памяти каждой из них. Столбцы значат все то же
самое, что и в случае обычного профилирования, с тем исключением, что вместо
количества проверок и их процентных отношений таблица теперь содержит количество
потребляемой памяти и процент от общего потребления памяти.

При необходимости эту информацию можно получить в графическом виде, а также
изменить единицы дробления. Библиотека может быть настроена с помощью различных
переменных окружения, наиболее полезная из которых носит имя HEAP_PROFILE_MMAP.
Она включает профилирование для системного вызова mmap (по умолчанию GPT
собирает статистику только для вызовов malloc, calloc, realloc и new).

Пара слов о Valgrind

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

  1. Cachegrind - позволяет собирать статистику по попаданию данных и
    инструкций программы в кэш первого и второго уровней процессора (мощный и
    сложный инструмент, который полезен при выполнении профилирования
    низкоуровневого кода).
  2. Massif - профайлер кучи, схожий по функциональности с аналогом из пакета GPT.
  3. Callgrind - профайлер, во многом похожий на таковой в gprof и GPT.

По умолчанию в качестве основного плагина Valgrind использует memcheck
(отладчик памяти), поэтому для его запуска в режиме профилирования необходимо
указать нужный плагин вручную. Например:

$ valgrind --tool=callgrind ./program

После этого в текущем каталоге будет создан файл с именем
callgrind.out.PID-программы, который можно проанализировать с помощью утилиты
callgrind_annotate или графической программы kcachegrind (устанавливается
отдельно). Я не буду расписывать формат генерируемых этими программами данных
(он хорошо представлен в одноименных man-страницах), скажу лишь, что
callgrind_annotate лучше запускать с флагом "--auto", чтобы он смог
самостоятельно найти файлы исходных текстов программы.

Для анализа расхода памяти Valgrind следует запускать с аргументом "--tool=massif".
После чего в текущем каталоге появится файл massif.out.PID-программы, который
может быть проанализирован с помощью утилиты ms_print. В отличие от pprof, она
умеет выводить данные не только в виде стандартной таблицы, но и генерировать
красивые ascii-art графики.

Выводы

Такие инструменты, как gprof, gcov и GPT, позволяют провести анализ работы
приложения и выявить все его узкие места вплоть до отдельной процессорной
инструкции, а подключив к процессу профилирования еще и Valgrind, можно добиться
удивительных результатов.

INFO

По умолчанию gprof не выводит профильной информации для функций
библиотеки libc, но ситуацию можно исправить, установив пакет libc6-prof и
собрав тестируемое с библиотекой libc_p: "export LD_FLAGS="-lc_p"".

Активировать профайлер GPT можно не только с помощью переменной окружения
CPUPROFILE, но и обрамив тестируемый участок кода функциями ProfilerStart()
и ProfilerStop(), которые объявлены в google/profiler.h.

WARNING

Из-за требований к безопасности GPT не сработает в отношении приложений с
установленным битом SUID.

  • 17. Анализ возникающих на предприятии узких мест.
  • 18. Методы расчета инвестиций.
  • 19.Расчет производственного результата на краткосрочный период.
  • 21. Комиссионное вознаграждение торговых представителей на базе сумм покрытия.
  • 22.Кружки качества.
  • 23. Анализ скидок.
  • 24. Анализ областей сбыта.
  • 25. Функционально-стоимостной анализ.
  • 26. Xyz-анализ.
  • 27. Собственное производство - поставки со стороны.
  • 28. Кривая опыта.
  • 29. Анализ конкуренции.
  • 30. Логистика.
  • 31. Портфельный анализ.
  • 33. Кривая жизненного цикла продукта.
  • 34. Анализ сильных и слабых сторон предприятия.
  • 36. Разработка сценариев.
  • 37. Последовательность этапов проектирования процесса контроллинга в организации.
  • 38. Организационная и эксплуатационная фазы проектирования процесса контроллинга.
  • 40. Социально-психологические факторы сопротивления новой концепции управления на предприятии: групповое сопротивление.
  • 41. Задачи контроллера на предприятии.
  • 42. Требования к профессиональным и личностным свойствам контроллеров.
  • 43. Примеры основных функциональных ролей контроллера.
  • 46. Основные виды организации контроллинга.
  • 47. Варианты позиционирования службы контроллинга.
  • 48. Предпосылки организации службы контроллинга на предприятии.
  • 49. Централизованный и децентрализованный контроллинг.
  • 50. Роль и задачи главного контроллера на предприятии.
  • 51. Концепции контроллинга в отношении задач учета.
  • 52. Место (роль и задачи) децентрализованных контроллеров в структуре предприятия.
  • 53. Преимущества и недостатки создания самостоятельной службы контроллинга в организации.
  • 54. Конфликт контроллера и руководителя: сущность и виды конфликта.
  • 55. Функциональный подход к сбору информации для принятия управленческих решений: недостатки и достоинства.
  • 56. Автоматизация обработки информации при внедрении концепции контроллинга.
  • Автоматизация.
  • 58. Единое информационное пространство: сущность, необходимость создания (условия), возможности.
  • 59. Интегрированная управленческо-информационная система как инструмент управления на базе эвм. Основные блоки уис и их функции.
  • 61. Eis: назначение, основные характеристики.
  • 62. Ошибочные предпосылки при проектировании уис.
  • 63. Информационный реинжиниринг: сущность, основные этапы.
  • 65. Общеэкономический и конкретно-управленческий смысл планирования деятельности фирмы.
  • 17. Анализ возникающих на предприятии узких мест.

    Задача оперативного планирования производственной программы заключается в определении номенклатуры и объемов продукции. Для этого должны быть известны следующие данные:

    1) цены на продукцию;

    2) затраты на производство продукции;

    4) располагаемые производственные мощности.

    Проблематика планирования производственной программы

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

    Возможны различные подходы к планированию производственной программы.

    На предприятии существуют три принципиальных подхода:

    а) Отсутствие узких мест.

    Поскольку нет узких мест, то производиться может вся продукция.

    б) Наличие одного узкого места.

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

    Если переменные затраты в единицу времени одинаковы для всех продуктов, то нужно проверить, для всех ли продуктов и процессов суммы покрытия положительны или для отдельных комбинаций продуктов и процессов они отрицательны

    Если известны выручка от продажи и переменные затраты на единицу продукции, а значит, и сумма покрытия, то оптимальную производственную программу можно сформировать поэтапно Ориентация на величину суммы покрытия позволяет последовательно составлять программу, если есть только одно узкое место.

    в) Наличие нескольких узких мест.

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

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

    Наличие одного узкого места может объясняться двумя причинами:

    а) если производственный процесс одноступенчатый, то существующих мощностей оказывается недостаточно для производства максимально возможного количества всех продуктов с положительными суммами покрытия;

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

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

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

    Целевая функция организационного управления в указанных случах имеет вид, аналогичный (9.36):

    v =min (9.39),

    где время простоя аппарата обслуживания (или канала, или отдельной фазыпри соответствующем выборе индексов) перед поступлением на обслуживаниеi -го требования из общей партии вN требований.

    Так, для одноканальных однофазных объектов суммарная величина простоев аппарата обслуживания для всей партии изN требований определяется выражением (9.8), поэтому целевая функция организационного управления, в том числе автоматизированного, в этом случае имеет вид:

    v =[ 1sign(+)]min (9.40).

    Аналогичные выражения можно получить для многофазных и/или многоканальных объектов как систем массового обслуживания на основе (9.16), (9.26) или (9.34).

    Обратим внимание на то, что в данном случае целевая функция v организационного управления является комплексным критерием, который учитывает, кроме рассматриваемых простоев оборудования, и другие факторы, поскольку в него входят интервалы поступления требований, периоды занятости аппаратаов, каналов и фаз, а также иные временные характеристики. Поэтому, если реализовать в данном объекте указанные в предыдущем подпараграфе мероприятия, приводящие к сокращению времен ожидания требованиями, это также приведет и к увеличению загрузки оборудования технологических объектов, что делает во многих практических случаях особенно удобным выбор именно рассматриваемого в настоящем подпараграфе критерия эффективности организационного управления сложными объектами.

    3. Выявление и ликвидация "узких мест"

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

    Часто "узкое место" является переменным "во времени и пространстве", т.е. в зависимости от технологического режима и условий функционирования объекта или его отдельных звеньев либо технологической природы отдельных групп или классов требований (другими словами, в зависимости от конкретной ситуации в объекте в данный промежуток времени) "узким местом" может оказаться то один, то другой аппарат (или канал) обслуживания или даже отдельная фаза. В таких случаях выявление "узких мест" имитационным моделированием является важным направлением исследования объекта с целью обоснования, разработки и последующей проверки эффективности управленческих решений. Понятно, что под ликвидацией “узкого места” имеется ввиду комплекс организационно - технологических мероприятий, после реализации которых аппарат, бывший “узким местом” больше не является таковым и не сдерживает функционирования производства в целом.

    Признаком наличия "узких мест" в технологической схеме объекта, интерпретируемого как СМО, является образование очереди или задержки на предыдущих агрегатах или фазах перед аппаратом (или фазой), являющихся "узким местом", и, наоборот, простой аппаратов (или фаз) непосредственно после него.

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

    Пусть, например, объект как одноканальная СМО состоит из нескольких последовательно расположенных одноканальных однофазных аппаратов обслуживания, технологическая схема которого соответствует рис.9.5.

    Рис.9.5. Схема многоаппаратной одноканальной СМО.

    Аппараты обслуживания технологической схемы данной СМО обозначены индексом k и именноk -ый из них является "узким местом". Пустьi -ое требование находится на обслуживании в указанномk -ом аппарате в течение времени, причем оно поступило в этот аппарат с интерваломпо отношению к ранее пришедшему требованию.

    На предыдущем (k 1)-ом аппарате находящееся там требование уже закончило обслуживание и ждет освобожденияk -го аппарата; возможно, на входе в (k 1)-ый аппарат уже находится еще одно требование в ожидании обслуживания. Таким образом, ситуация на (k 1)-ом аппарате отражается временной характеристикой (9.4):

    = +при+>для (9.41);

    Следующий, (k +1)-ый аппарат находится в состоянии простоя, поэтому для него в общем случае на основании (9.8) будем иметь:

    = при>+для [k +1, ...,n ] (9.42).

    Что же касается непосредственно k -го аппарата технологической схемы, являющегося "узким местом", то конкретно для него может быть справедливо как соотношение (9.41), так и (9.42), в зависимости от того, что конкретно лимитирует его функционированиелибо начало обслуживания требования (т.е. вход аппарата; может быть, начальные фазы обслуживание, если оно многофазно, и т.д.), либо его состояние (внутренние элементы, связи между ними, заключительные фазы и т.п.

    Целевая функция организационного управления v , направленного на ликвидацию "узкого места" и увеличение за счет этого производительности всей технологической схемы, имеет следующий общий вид:

    v =(9.43).

    Аналогично можно получить выражения при других структурах объекта и других дисциплинах обслуживания. Реализовав имитационную модель исследуемого объекта на ЭВМ применительно к различным условиям его функционирования и получив в количественном виде значения критериев (9.41) и (9.42) для каждого компонента и/или технологической схемы, что всегда можно сделать, по этим полученным результатам легко установить, имеет ли место в данной технологической схеме "узкое место" и какой конкретно компонет объекта и в каких конкретно условиях им является. После чего можно предлагать комплекс организационно - технических мероприятий по ликвидации “узкого места” (распараллеливание обслуживания требований в этом месте технологической схемы производства, ускоренные технологии, т.е. с существеннно более быстрым обслуживанием и соответственно меньшим средними т.п.), а также затем проверить их эффективность на той же имитационной модели объекта.

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

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

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

    Проверка на наличие узких мест осуществляется расчётным путём. Для этого максимальное количество планируемых к изготовлению изделий умножают на величину анализируемого компонента. Например, если речь идёт о машинном времени оборудования, планируемое к изготовлению количество деталей умножают на машино-часы работы станка, агрегата или аппарата. Рассчитанная величина не должна превышать значение, предельно допустимое инструкцией по эксплуатации оборудования. Аналогично рассчитываются ёмкости для хранения готовой продукции, потребление тепло- и эл. энергии, укомплектованность персоналом и т.д.

    Если полученное значение превосходит имеющуюся в данный период мощность, говорят о наличии узкого места. В этой ситуации выработка оптимальной программы производства на основе сумм покрытия удельных издержек невозможна. Суммы покрытия удельных издержек должны быть поставлены в зависимость от требуемой нагрузки на узкое место. Таким способом рассчитывается относительная сумма покрытия (db отн. ), которая показывает отношение разницы между ценой (р ) и переменными издержками в расчёте на единицу продукции (k v ) к требуемой нагрузке на узкое место в производственной мощности:

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

    При планировании оптимальной программы производства или ассортимента необходимо различать три случая, которые представлены ниже:

    Пример:

    Предприятие изготавливает ассортимент продуктов А, В, С и D. Бухгалтерия располагает следующими данными за отчётный период:

    a)Определите оптимальную программу производства и результат деятельности предприятия за отчётный период на основании

    1)учёта полных издержек

    2)счёта сумм покрытия издержек

    b)Как изменится программа производства и результат предприятия, установленные счётом сумм покрытия издержек, если производственную мощность ограничить 35 000 часами, а изготовление единицы каждого продукта имело бы следующую потребность в машинном времени:

    Решение:

    а) 1. Учёт полных издержек:
    При использовании системы учёта полных издержек критерием принятия управленческих решений является прибыль или убыток от изготовления и продажи единицы продукции: в программу производства принимаются все продукты приносящие прибыль, т.е. цена покрывает переменные и постоянные издержки в расчёте на единицу продукции (= себестоимость).

    Согласно системе учёта полных издержек продукт A больше не должен изготавливаться, так как имеет отрицательный результат от продажи единицы продукции. При этом постоянные издержки, приходящиеся на данный продукт, поступают дальше, так как они не уменьшаются в течение короткого срока. Для того чтобы рассчитывать прибыль или убыток за отчётный период, необходимо учитывать долю постоянных издержек поступающих от продукта А в размере (140 € – 80 €) × 4.000 шт. = 240.000 €. Таким образом, результат деятельности предприятия за отчётный период составляет +/– 0 €.

    2. Счёт сумм покрытия издержек:

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

    Продукт A остается в программе производства, так как имеет положительную сумму покрытия издержек и делает взнос в счёт покрытия собственных постоянных расходов. Из общей суммы покрытия издержек, приходящейся на продукты А, В, С и D, следует вычесть постоянные издержки в виде единого блока.

    Результат деятельности предприятия в отчётном периоде составляет:

    620.000 € – 420.000 € = 200.000 €.

    b)Сначала необходимо проверить, имеется ли узкое место в процессе изготовления. Машинное время оборудования, необходимое для изготовления четырёх продуктов, имеет следующие значения:
    Так как в распоряжении предприятия находится только 35.000 часов, для производства максимально необходимого количества изделий существует узкое место. Если управленческое решение принималось бы на основе абсолютных сумм покрытия издержек, программа производства планировалась бы исходя из иерархии (ранжирования) каждого продукта по суммам покрытия удельных издержек, т.е. в следующей последовательности: первых два места (ранг I) – продукты В и С (db = 100 €); третье место (ранг III) – продукт A (db = 50 €) и четвёртое место (ранг IV) – продукт D (db = 40 €). Таким образом, жертвой узкого места пал бы продукт D. При этом не принималось бы во внимание, что продукт D имеет, тем не менее, самое короткое время изготовления одного изделия.

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

    Так как продукт В обнаруживает наивысшую относительную сумму покрытия удельных издержек, это даёт ему право быть изготовленным в полном объёме, т.е. 2.000 изделий. Для этого потребуется 10.000 часов машинного времени. Затем изготавливается продукт со второй по величине относительной суммой покрытия (C), также вплоть до максимальной границы возможной реализации. Следующим выпускается продукт D с третьим по уровню рангом. Остающихся 11.500 часов недостаточно, чтобы изготовить 4.000 изделий продукта A. Возможно изготовление лишь:
    Сумма покрытия издержек, поступающих от изготовления продукта A, на 56.250 евро меньше при наличии узкого места, чем при его отсутствии. Эта сумма соответствует уменьшению производственного результата. Результат деятельности предприятия составляет:
    563.750 € – 420.000 € = 143.750 €.

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

    Пример:

    При планировании производственной программы промышленного предприятия необходимо учитывать следующие данные:

    Постоянные издержки в отчётном периоде достигли уровня 100.000 €.

    a)Определите с помощью счёта сумм покрытия издержек программу производства и результат предприятия на следующий период!
    b)Имеющееся в распоряжении машинное время оборудования, на котором изготавливают продукты А, В и С, составляет 12.000 минут. Какие выводы можно сделать для определения оптимальной программы производства и результата предприятия?
    c)Как изменится программа производства и результат предприятия, если цена продукта С увеличится до 230 евро, а минимально необходимое количество изделий составит 1.000 единиц?

    Решение:

    a)Определяющим критерием являются абсолютная сумм покрытия издержек (db), т.к. узкие места отсутствуют:
    Продукты В и A делают наивысшие взносы в покрытие постоянных издержек. Изделие С следует исключить из программы производства, так как оно имеет отрицательную сумму покрытия издержек.
    Определение результата деятельности предприятия:
    b)1 шаг: Проверка наличия узкого места в процессе изготовления продукции:
    Продукт С должен быть исключен уже из программы производства, так как он показывает отрицательный абсолютный взнос в покрытие постоянных издержек. Машинное время оборудования, необходимое для изготовления продуктов, составляет:
    Так как машинное время ограничено 12.000 минутами, в производстве продуктов A и B имеется узкое место.
    2 шаг: Определение относительных сумм покрытия издержек:

    Машинное время, необходимое для изготовления продукта A, составляет 4.000 мин., т.е. на 6.000 минут меньше, чем продукта В. При этом относительная сумма покрытия издержек у продукта A выше, чем у продукта В. Предпочтение отдаётся продукту A.

    3 шаг. Определение оптимальной программы производства:

    Так как продукт A приносит более высокую относительную сумму покрытия издержек, ему предоставляется право быть изготовленным в максимальном объёме 2.000 единиц. Для этого требуются 4.000 минут производственной мощности (машинного времени оборудования).

    Узкие места

    Узкие места - это недостаток производственных мощностей в цепи технологического процесса, определяемый каким-либо компонентом: оборудованием, персоналом, материалами или транспортировкой; ликвидируется в ходе организационно-технических мероприятий - «расшивка» узких мест.

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

    Таблица 46. Узкие места

    Узкое место

    Описание проблемы

    Мероприятия и ожидаемый результат

    Планировка цеха

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

    Более оптимальным было бы расставить станки так называемой «елочкой» - под углом к линии. Это обеспечит безопасность работников и более эффективное использование площади цеха.

    Работа транспорта

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

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

    Работа транспортировщиков и грузчиков

    Заработная плата транспортировщику и грузчику выплачивается по полной ставке, но заняты они не весь рабочий день.

    Можно выплачивать грузчикам и транспортировщикам половину ставки, т.к. их занятость в цехе очень маленькая.

    Создать совмещение профессий-транспортировщик может работать и грузчиком.

    Заключение

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

    Понравилась статья? Поделитесь ей