Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: влияние на размера на блока


  • Subject: Re: lug-bg: влияние на размера на блока
  • From: George Danchev <danchev@xxxxxxxxx>
  • Date: Thu, 26 Aug 2004 11:06:03 +0300

On Wednesday 25 August 2004 15:14, Peter Pentchev wrote:
> On Wed, Aug 25, 2004 at 02:53:42PM +0300, George Danchev wrote:
> > On Wednesday 25 August 2004 13:17, Peter Pentchev wrote:
> > --cut--
> >
> > > Какво точно искаш да кажеш с това 'да получи на вход'?  Ако имаш
> > > предвид да се даде на tar опция -b 1800, така че то да прави write() на
> > > парчета от 900KB и bzip2 да получава по 900KB при всеки read(), аз
> > > виждам два възможни сериозни проблема с това:
> >
> > Мда, точно така, не виждам нищо лошо в:
> > tar cf - dir -b 1800 | bzip2 > dir.tar.bz2
>
> Значи да попитам пак: смяташ, че ако размерът на изходния блок на tar е
> равен на размера на входния блок на bzip2, това ще доведе до повишаване
> на производителността, така ли?  Един малко тъп въпрос: защо?  Т.е. как?
> Т.е. какво точно смяташ, че ще се подобри?

ами точно както си си отговорил по-долу, имах предвид да се намали сискол 
овърхеда от реблокинг при bzip2.

> Единственото, което на мен ми се струва възможно да се подобри, е това
> bzip2 да си получава входа с по-малко работа, т.е. с по-малко syscalls,
> т.е. да получава по 900KB (или по-точно по 899981 байта) при всяко
> извикване на read() - а това е *точно* това, което смятам, че няма начин
> да стане :)  Ако имаш някаква друга идея за това как точно ще се подобри
> работата на bzip2, ако на tar му зададеш -b 1800, казвай!

имаме: block = [record size (кратно на 512)] x [blocking factor]
това 899981 за сега нямам идея защо се получава, но се получава при разни 
стойности на -b:

tar cf - dir -b 18 | bzip2 -vv9 > dir.tar.bz2
  (stdin):
    block 1: crc = 0x57a34772, combined CRC = 0x57a34772, size = 899981
    block 2: crc = 0x3af72ef3, combined CRC = 0x95b1a017, size = 899981
    too repetitive; using fallback sorting algorithm
--cut--
    too repetitive; using fallback sorting algorithm
    block 14: crc = 0xebffb305, combined CRC = 0xa95993f8, size = 63461
    too repetitive; using fallback sorting algorithm


tar cf - dir -b 1800 | bzip2 -vv9 > dir.tar.bz2
  (stdin):
    block 1: crc = 0x57a34772, combined CRC = 0x57a34772, size = 899981
    block 2: crc = 0x3af72ef3, combined CRC = 0x95b1a017, size = 899981
    too repetitive; using fallback sorting algorithm
    block 3: crc = 0xab13839d, combined CRC = 0x8070c3b2, size = 899981
--cut--
    too repetitive; using fallback sorting algorithm
    block 13: crc = 0xc87a56ae, combined CRC = 0xa153107e, size = 899981
    too repetitive; using fallback sorting algorithm
    block 14: crc = 0x49894d75, combined CRC = 0x b2f6d88, size = 77556


навсякъде започваме с 899981 (което не е кратно и на 512) и за последното 
каквото остане... да не би към него добавя и CRC сумата за да стане към 
900096 (1759x512) ... 

разбира се вече при bzip2 --fast  намалява размера на блока:
 tar cf - dir -b 18 | bzip2 --fast -vv9 > dir.tar.bz2
  (stdin):
    block 1: crc = 0xd784b69c, combined CRC = 0xd784b69c, size = 99981

Да знаеш, че това дето е посочено като 900000 байта в мана на bzip2 не е точно 
толко а е кратно на 512, това идва и от горната формула за bzip2 иска record 
size да е кратен на 512, така, а нито 900000, нито 899981 са му кратни. Има 
нещо което не отчитаме тука за размера на блока ;-)

> А на всичкото отгоре тук има и допълнителен момент: числото 899981 съм
> го взел от това, което показва bzip2 -vv9 largefile.  Т.е. блоковете на
> bzip2 всъщност *не са* по 900KB, а са по 899981 байта, и на практика
> няма начин да убедиш tar да прави точно толкова големи блокове, колкото
> bzip2 иска, така че цялата тази история е още малко безсмислена май...
>
> > макар, че чак сега се замислям над това и до сега не съм го ползвал.
> > Но сега го изтествах няколко/доста пъти и с дифф проверих наистина ли
> > оригинала се запазва след горното архивиране/компресиране и
> > декомпресиране/деархивиране. Ми всичко е ОК.
>
> Нее, като говоря за сериозни проблеми нямам предвид загуба на данни :)
> Май пак не се изразих както трябва :)  Имам предвид причини това да не
> доведе до повишаване на производителността.
>
> > Нямам време да тествам с time и да гледам compress ratio-то на горното с
> > и без разни стойности на -b, но -b 1800 приляга според мен идеално на -9
> > на bzip2 ;-)
>
> И пак питам - как и защо? :)

Да се намали сискол овърхеда от реблокинг при bzip2. Това е единственото което 
можем да се опитаме да си спестим според мен.

> > Според мен ядрото няма да бута в пайпа наведнъж всичките 899981 байта ;-)
> > горната команда ще мине и на фрийсби, почти съм сигурен... просто тези
> > 899981 байта ще бъдат подадени на по-малки части и това си е работа на
> > ядрото мисля да контролира двата края на пайпа и колко влиза и колко
> > излиза в и от тях.
>
> Така де, така - и точно затова ядрото и от двата края на пайпа не
> поддържа блокове по 899981, следователно bzip2 няма начин да прочете
> наведнъж 899981 байта - и с какво ще се подобри работата му тогава?
> Особено при положение, че 1800 * 512 != 899981 :)

значи първо не сме сигурни дали tar и bzip2  write()-ват и read()-ват цели 
блокове или цели записи или части от записи от по 512 байта. После ако за 
размер на блокове и записи бъдат поискани много големи стойности май не знаем 
какви трикове прави ядрото за да ги прекара през пайпа, което да остава 
невидимо за userlanda. Важното е, че и двете приложения знаят къде започва и 
къде свършва даден блок. Гледам, че за стойности на блока около 900000, пак 
се изписва size = 899981. 
tar cf - dir -b 1 --record-size 899584 | bzip2 -vv9 > dir.tar.bz2
tar cf - dir -b 1 --record-size 900096 | bzip2 -vv9 > dir.tar.bz2
  (stdin):
    block 1: crc = 0x57a34772, combined CRC = 0x57a34772, size = 899981
    block 2: crc = 0x3af72ef3, combined CRC = 0x95b1a017, size = 899981
    too repetitive; using fallback sorting algorithm

tar cf - dir -b 1 --record-size 819200 | bzip2 -vv9 > dir.tar.bz2
  (stdin):
    block 1: crc = 0x57a34772, combined CRC = 0x57a34772, size = 899981
    block 2: crc = 0x3af72ef3, combined CRC = 0x95b1a017, size = 899981

Та това може да не е размера на блока който получава bzip2, а който обработва 
явно след реблокване. Предлагам да не гадеам повече. 
Освен това, не е казано, че трябва двете приложения да се пайпват, ако имаме 
съмнения, че предаването в пайпа може да се бави поради разни причини (tar 
--options; bzip2 --options)

-- 
pub 4096R/0E4BD0AB  2003-03-18  <keyserver.bu.edu ; pgp.mit.edu>
fingerprint 1AE7 7C66 0A26 5BFF DF22 5D55 1C57 0C89 0E4B D0AB 
============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.