: cache_dir
cache_dir یکی از مهمترین تگ هاست و نقش مهمی در کارایی اسکویید دارد . این تگ زمان و نحوه ذخیره آبجکت ها را مشخص می کند . شکل کلی آن به صورت زیر است :
cache_dir scheme directory size L1 L2 [options]
schema ( مدل ) : اسکویید از 5 مدل ذخیره سازی آبجکت ها پشتیبانی می کند . که عبارتند از : ufs ، aufs ، diskd ، cross و null . از این 5 مدل 3 مدل ufs ، aufs و diskd تقریبا به صورت مشابه کار می کنند . ufsمدل ذخیره سازی )Storage Schema ) پیش فرض اسکویید است . باید توجه داشته باشید که در صورت استفاده از مدل هایی غیر از ufs باید در هنگام کامپایل از پارامتر
—enablestoreioاستفاده کنید . در اینجا فقط به توضیح مدل ذخیره سازی ufs می پردازیم .
directory : این آرگومان مشخص کننده مسیری است که آبجکت های کش شده درآن قسمت از سیستم فایل نگهداری می شوند . معمولا یک پارتیشن کامل را برای cache_dir در نظر می گیرند .
اگرچه قرار دادن چندین cache_directory روی یک پارتیشن مشکلی را به وجود نمی آورد ولی توصیه می شود که حتی هر cache_directory را روی یک هارد دیسک مجزا قرار دهید . به عنوان مثال اگر شما دو هارد دیسک بدون استفاده دارید ممکن است بخواهید به شیوه زیر عمل کنید :
# mount /dev/hd1d /cache0
# mount /dev/hd2d /cache1
و سپس خطوط زیر را به squid.conf اضافه کنید :
cache_dir ufs /cache0 7000 16 256
cache_dir ufs /cache1 7000 16 256
البته اگر هارد دیسک اضافی در اختیار ندارید می توانید از پارتیشن های سیستم فایل کنونی خود استفاده کنید . یکی از پارتیشن ها را که بیشترین حجم را دارد ( شاید /usr یا /var ) انتخاب کنید ، و یک فولدر در آن ایجاد کنید. به عنوان مثال :
و سپس خط زیر را به squid.conf اضافه کنید .
cache_dir ufs /var/squidcache 7000 16 256
size : سومین آرگومان cache_dir مشخص کننده حجم دایرکتوری مشخص شده برای عمل کش کردن است. در واقع مقدار ماکزیمم حجمی است که اسکویید می تواند از فضای دیسک برای ذخیره آبجکت ها اختصاص دهد . این مقدار باید با توجه به عوامل متعددی از جمله پهنای باند – میزان حافظه سیستم و ... در نظر گرفته شود . علاوه بر آن همیشه باید در هنگام اختصاص این فضا از در نظر گرفتن فضای لازم برای فایل های log و فایل های موقتی که اسکویید یا دیگر برنامه ها نیاز دارند مطمئن بود .
برای دیدن میزان فضای خالی یا استفاده شده ی هارد دیسک می توانید از دستور df –k استفاده کنید .
مثال :
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/da1d 3037766 8 2794737 0% /cache0
/dev/da2d 3037766 8 2794737 0% /cache1
در این مثال دو هارد دیسک خالی در نظر گرفته شده است . توجه داشته باشید که اگر چه حجم هارد دیسک ها تقریبا 3037مگابایت است ولی شما فقط می توانید از 2794 مگابایت آن برای کش استفاده کنید . اگر چه توصیه می کنم حداقل 10 درصد از این فضا را برای فایل های موقتی که سیستم ایجاد می کند یا فایل های log کنار بگذارید .
مثال :
cache_dir ufs /cache0 2500 16 256
L1 و L2: مدل های ذخیره سازی ufs ، aufs و diskd از ساختاری درختی با دو سطح استفاده می کنند . شماره L1 و L2 مشخص کننده تعداد دایرکتوری های موجود در این دو سطح هستند .
باید L1 و L2 را طوری تنظیم کرد که فایل های موجود در هر دایرکتوری سطح دوم از چند صد تا تجاوز نکند . به عنوان مثال فرض کنید دایرکتوری کش/cache0 شما 7000 مگابایت فایل ذخیره می کند .
اگر اندازه هر فایل را حدودا 10 کیلوبایت در نظر بگیریم . این دایرکتوری می تواند 700000 فایل را در خود ذخیره کند . با در نظر گرفتن L1 = 16 و L2 = 256 در مجموع 4096 دایرکتوری در سطح دوم داریم . در نتیجه 170= 4096/700000 یعنی در هر دایرکتوری 170 فایل ذخیره می شود که مقداری متعادل است . واضح است که هر چه تعداد این فایل ها زیاد شود سرعت فراخوانی آنها کمتر خواهد شد .
و آخرین نکته این که برای ساخته شدن این swap directory ها باید قبل از اجرای سرویس اسکویید دستور squid – z را اجرا کنید .
[options]: دو گزینه به همراه تگ cache_dir قابل استفاده است .
1- readonly : این گزینه اسکویید را وادار می کند تا آبجکت های جدید را بجای آبجکت های قبلی ذخیره نکند و فقط آبجکت هایی که قبلا کش شده اند را بخواند . مثال :
cache_dir ufs /cache0 7000 16 256 read-only
این گزینه در مواردی کاربرد دارد که بخواهید مکان ذخیره آبجکت ها را تغییر دهید ( تغییر هارد دیسک یا دایرکتوری حاوی فایل های کش شده ) . اگر بدون استفاده از این گزینه اقدام به تغییر مسیرذخیره آبجکت ها نمایید کش شما تامدتی از hit ratio پایینی برخوردار خواهد بود . شما می توانید با استفاده از این گزینه از hit های آبجکت های کش شده استفاده کرده و پس از مدتی که این گزینه را حذف کنید . به عنوان مثال اگر/ cache0 حاوی آبجکت های قبلی و /cache1 هارد دیسک جدید باشد میتوان از پیکربندی زیر استفاده کرد :
cache_dir ufs /cache0 7000 16 256 read-only
cache_dir ufs /cache1 7000 16 256
2 - max-size : توسط این گزینه می توانید حداکثر حجم فایل که کش شود را مشخص کنید . که معادل تگ maximum_object_sizeاست . مثال :
cache_dir ufs /cache0 7000 16 256 max-size=1048576