[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: OpenVZ, VServer и полудесяток



On Mon, Dec 24, 2007 at 01:42:54PM +0300, Artem Chuprina wrote:
> Alexey Pechnikov -> debian-russian@lists.debian.org  @ Mon, 24 Dec 2007 12:19:52 +0300:
>  AP> Из шелла писал _одну_ строку - rm /test_1000000/*. И 
>  AP> аргумент "/test_1000000/*" всего один, откуда возьмется "Argument list too 
>  AP> long?"
> 
> Из мана на используемый шелл, а что?
> 
> Не, судя по отсутствию "Argument list too long" этот rm - builtin, и
> шелл, как следствие, скорее всего, busybox...  И именно в его исходники
> и надо смотреть.

 Во-первых, ограничение размера аргументов -- это ограничение execve(),
 статус возврата E2BIG. В линуксе традиционно был лимит в 128KB. Шелл
 сначала раскручивает *, затем делает fork() и попытку execve("/bin/rm").

 Во-вторых, я сильно сомневаюсь, что есть нормальный (не-busybox'овый)
 шелл, у которого "rm" -- встроенная команда. Потому что исторически
 у rm есть немало опций, разбирать которые шеллом замучаешься...
 Да и нет, собственно, причин делать rm встроенным.

 А тормоза у Печникова, наверное, из-за того, что шелл * пакует в
 монолитную строку через realloc(), а тикл пользуется чанковыми строками.
 Но и это не предел оптимизации. Думаю, perl с unlink() в реверсном цикле
 уделает этот тикль как бог черепаху... :-)
-- 
 Eugene Berdnikov


Reply to: