Чому "strace" не показує, що цей процес чогось чекає?


11

Могутній straceмене підвів. Як це можливо?


time fooпоказує, що fooзапуск займає кілька секунд ("реальний"), але використовує незначний час процесора, як у просторі користувача ("користувач"), так і в ядрі ("sys"). Для допитливих, fooвизначено нижче.

Таким чином, він витрачає більшу частину свого часу на очікування чогось іншого, а не виконання інструкцій процесора. Як правило, я бачу, як він чекає, straceтобто який системний виклик блокується протягом тривалого періоду часу. На жаль, такий підхід не спрацював.

strace -ttt -T -C -w fooпоказує системні дзвінки, часові позначки та підсумок (реального) часу, проведеного в системних викликах. Але саме цей процес показав, що витрачається незначний загальний (реальний) час всередині системних дзвінків.


fooнасправді journalctl -b -u dev-hugepages.mount. За винятком того, що мені довелося кожен раз міняти останній аргумент на інший системний блок, щоб відтворити це. Іншими словами, затримка, яку я досліджую, сталася вперше, коли я намагаюся отримати журнали для будь-якого одного системного блоку. EDIT : після відповіді на головне запитання я також зрозумів причину виникнення цієї проблеми при відтворенні затримки .

Час, витрачений цим процесом, є специфічним питанням, мабуть, воно відбувається не у всіх системах. https://github.com/systemd/systemd/isissue/7963


Гм ... оскільки ваша програма "foo" - це не просто простий однопотоковий процес, вам краще послужити, сказавши страйку слідувати та прикріпити до вилок. '-ff' - твій друг! :) Тоді ви також захочете скористатися "-o / dev / shm / strace-foo", щоб зібрати всі ці вихідні файли обробляти в одне місце. Просто пропозиція.
Джессі Адельман

@JesseAdelman Я думаю, що journalctlпрацює лише один процес. У мене є відчуття, що з journalctlоднієї причини використовується одна додаткова нитка - iirc, був один виклик клона (). Я думаю, це означає, що ви технічно правильні, але це також технічно не має значення для питання. timeрозглядає процес в цілому і показав, що процес в цілому досить сонний (блокує щось). straceне показав достатньо сну. Не має значення, якщо друга нитка спить, головна нитка також повинна бути дуже сонною, щоб пояснити timeрезультат.
sourcejedi

Відповіді:


18

Звичайна причина звернення до цієї проблеми полягає в тому, що процес блокується в помилках сторінки. Це читання або, можливо, запис у файли, виконані через відображення пам’яті ака mmap(). Можливо, ви помітили дещо mmap()в сліді системних дзвінків.

Якщо ви використовували /usr/bin/timeпрограму замість timeвбудованої оболонки, можливо, ви також помітили:

0.04user 0.10system 0:02.29elapsed 6%CPU (0avgtext+0avgdata 40464maxresident)k
73632inputs+0outputs (376major+1081minor)pagefaults 0swaps

majorСторінкові параметри - це ті, що вимагають вводу файлової системи. minorСторінкові параметри є набагато менш значущими (ймовірно, лише "промах TLB").

Я підозрюю inputs, що це загальна кількість прочитаних сторінок. На даний момент, я думаю, що сторінки зі картографічним файлом завжди однакового розміру. 4096 байт у більшості випадків, але ви можете перевірити getconf PAGESIZE.

Таким чином, це становить ~ 290 мегабайт, що читається із швидкістю понад 100 мегабайт в секунду, стандартна швидкість для жорсткого диска, як у мене. Таємниця вирішена!


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

straceпоказує лише, коли процес входить (а потім залишає) ядро ​​завдяки системному виклику. Або коли подається сигнал Unix. Однак є й інші типи переривань, які straceзовсім не виявляються. Отже, до них належать

  • Несправності сторінки.
  • Таймер переривається. Це використовується для переходу до іншого процесу, коли поточний вичерпав свій виділений часовий відрізок на процесорі.

1
Гарна відповідь, вітаю! Дійсно важливо зрозуміти обмеження інструментів, якими користується. +1; Мені також подобається ця тема: unix.stackexchange.com/questions/418354/… та unix.stackexchange.com/questions/419697/…
Rui F Ribeiro
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.