Необходимо знать, где сократить. Для двоичных файлов это обычно означает знать размер FileA
или FileB
.
Можно найти размер FileA
с ls -l
. Если необходимо записать портативный сценарий, можно извлечь размер с ls -lgo FileA | awk '{print $3; exit}'
(или, для non-POSIX-compliant версий ls
это не имеет -g
и -o
опции, ls -l FileA | awk '{print $5; exit}'
). На невстроенном Linux более простой способ получить размер stat -c %s FileA
.
После того как у Вас есть размер, можно использовать tail
извлечь вторую часть файла:
tail -c +$((sizeA + 1)) <FileC
Если Вы хотите повредить файл в равные блоки, используйте split
команда.
Это на самом деле сложно. Но существуют подсказки:
Узнайте о SystemTap, это - аналог Linux DTrace. Я думаю, что у них может даже быть сценарий в качестве примера для подобной задачи.
Изучите blktrace. Вы можете анализировать ее вывод в теории. Это будет большим количеством задержки устройства (время обслуживания), чем программа времени отклика преуспевает read()
.
Да strace
может не быть соответствующим, так как это проследит все (весь syscalls, даже когда Вы используете -e
фильтр), и значительно загрузит сервер и более медленный процесс. Perf
очень неясный инструмент, у Вас могут быть моменты, Вы думаете, что понимаете его вывод, но Вы на самом деле не сделали, и его набор функций, высоко зависят от версии ядра. В основном и в настоящее время perf
подходит для измерения процессорного времени (циклы) и [все же] является неподходящим к измерению reponse времена (в котором Вы на самом деле нуждаетесь). Я слышал, что они хотели реализовать что-то для упрощения этого, таким образом, на ядрах очень последней разработки там может иметь что-то. (Посмотрите также в сценариях перфекта (perf script -l
) если Вы займетесь расследованиями далее.)
Можете быть Вы, сможет получить что-то от ftrace. Прочитайте эту статью http://lwn.net/Articles/370423/ (И это для введения.), Как я вижу, можно ограничить ftracing pid
и функция, затем проследите с чем-то как sys_read
. Я попробовал это как пример для Вас:
# mount -t debugfs debugfs /sys/kernel/debug # if it's not already mounted
# cd /sys/kernel/debug/tracing
# echo $$ > set_ftrace_pid # pid of process to trace
# echo sys_read sys_write > set_ftrace_filter
# echo function_graph > current_tracer
# head trace
# tracer: function_graph
#
# CPU DURATION FUNCTION CALLS
# | | | | | | |
0) 8.235 us | sys_write();
0) 3.393 us | sys_write();
0) ! 459859.3 us | sys_read();
0) 6.289 us | sys_write();
0) 8.773 us | sys_write();
0) ! 1576469 us | sys_read();
Если Вы только интересуетесь количеством "чтения", или "запись" звонит на блочные устройства, это - SOP Red Hat для определения этого.
Использование функции дампа блока и небольшого количества сценариев обзора высокого уровня о процессах действий ввода-вывода производит, может быть собран. Для этого выполните следующие действия:
Отключите систему, регистрирующуюся в течение короткого промежутка времени (таким образом, она не мешает сбору данных):
# сервисный системный журнал останавливает эхо # 1>/proc/sys/vm/block_dump
Ожидайте высокой проблемы iowait для появления, после того как она имеет, мимо повторно включают системный журнал (или rsyslog при использовании этого) и отключают дамп блока:
# сервисный системный журнал запускает эхо # 0>/proc/sys/vm/block_dump
Используя следующую команду анализируют вывод dmesg для действий READ/WRITE/dirtied, выпускаемых определенными процессами:
# dmesg | awk '/(READ|WRITE|dirtied) / {действие [1$] ++} КОНЕЦ {для (x в действии) печатают x, действие [x]}' | вид - номер-k 2,2 | главный-n 10
kjournald (1425): 5984 kjournald (3681): 1269 pdflush (27301): 725 iostat (2913): 134 crond (26919): 61 crond (28985): 60 crond (7026): 54 sshd (28175): 50 sshd (15388): 50 наутилусов (24498): 46
Вывод в качестве примера выше показывает лучшие 10 процессов, которые выпустили ЧТЕНИЕ, ЗАПИШИТЕ и dirtied операции в течение времени, которое выполнял дамп блока. Используя эти данные выходит обзор высокого уровня количества операционных процессов, может быть собран, и это может помочь определить, способствует ли единственный процесс высоко iowait.
Существует также несколько инструментов командной строки как на и iotop, которые дают Вам iowait статистику для каждого процесса и могут быть, работал как часть сценария (значение, что у них есть пакетные режимы, которые могут сделать единственное повторение для конкретного PIDs).
Править: При проведении большего количества исследования, на которое это похоже, можно получить iowait для каждого процесса от/proc/$pid/stat (поиск "Агрегированного блока задержки ввода-вывода")