برنامههای کاربردی حیاتی در کسب و کار نیازمند سطح بالایی از میزان عملکرد، دسترسی، امنیت و توسعهپذیری می باشند، Hard Disk Drive یک عنصر هستهای ذخیرهساز است که عملکرد هر سیستم ذخیرهسازی را مدیریت میکند. برخی از فناوریهای قدیمیتر Disk Array نمیتوانند بخاطر محدودیتهای Hard Disk و اجزای مکانیکی آن مشکلات مربوط به عملکرد را برطرف سازند. تکنولوژی RAID توانست کمک شایانی در بهبود عملکرد و قابلیت اطمینان ذخیرهساز بکند اما Hard Disk Driveها حتی با بکارگیری RAID نیز ممکن است نتوانند الزامات عملکردی برنامههای کاربردی امروزی را فراهم کنند. با پیشرفتهای فناوری، نوع جدیدی از راهکارهای ذخیرهساز با عنوان سیستم ذخیرهساز هوشمند پدیدار شدند. سیستمهای هوشمندی که در این بخش با جزئیات بررسی شدند Arrayهای غنی و آینده RAID هستند که قابلیتهای پردازش بهینهشده I/O را فراهم میکنند. این Arrayها دارای یک محیط عملیاتی هستند که مدیریت، تخصیص و مصرف منابع ذخیرهساز را کنترل میکنند. این سیستمهای ذخیرهساز با حجم زیادی حافظه به نام Cache پیکربندی شدهاند و از الگوریتمهای پیچیده برای رفع الزامات I/O برنامههای کاربردی حساس به عملکرد استفاده میکنند.
اجزای یک سیستم ذخیرهساز هوشمند
چنین سیستمهایی شامل چهار بخش کلیدی Front End، Cache، Back End و Physical Disk می باشند. شکل زیر این اجزا و ارتباطات درونی آنها را نشان میدهد. یک درخواست I/O دریافتی از Host در Front-End از طریق Cache و Back End پردازش میشود تا ذخیرهسازی و حفظ دادهها از Physical Disk صورت گیرد.
Front End
Front End رابط کاربری میان سیستم ذخیرهساز و Host را فراهم میکند و شامل دو اجزا میشود: Portهای Front-End و Controllerهای Front-End. Portهای Front-End این امکان را به Hostها میدهند تا با سیستم هوشمند ذخیرهساز متصل شوند. هر Front-End Port دارای Logic پردازش است که پروتکلهای انتقال مناسب را اجرایی میکند مانند SCSI، Fiber Channel، یا iSCSI برای اتصالات ذخیرهساز.
Portهای مظاعف برای دسترسی بالا در Front End فراهم شدهاند، Controllerهای Front-End دادهها را از طریق Data Bus داخلی از Cache و به آن Route میکنند. زمانی که Write Data به Cache برسد، Controller یک پیام تایید به Host بر میگرداند. Controllerها با استفاده از الگوریتمهای Command Queuing پردازش I/O را بهبود میبخشند.
بیشتر بخوانید: سرویس vSAN iSCSI راهکاری قوی جهت راهاندازی Windows Server Failover Cluster
Front-End Command Queuing
Command Queuing یک تکنیک بکار رفته در Controllerهای Front-End است که ترتیب اجرای فرمانهای دریافتی را مشخص نموده و میتواند جابجاییهای غیر لازم Drive Head را کاهش داده و عملکرد Disk را افزایش دهد. زمانی که یک فرمان برای اجرا دریافت شود، الگوریتمهای Command Queuing یک Tag را Assign میکنند که یک سکانس را تعریف میکند و درون این سکانس فرمانها اجرا میشوند. با Command Queuing صرف نظر از ترتیب دریافت فرمانها، چندین فرمان میتوانند براساس سازماندهی دادهها در دیسک بطور همزمان اجرا شوند. رایجترین الگوریتمهای Command Queuing مورد استفاده به شرح زیر هستند:
- First In First Out (FIFO): این الگوریتم پیش فرضی است که در آن فرمانها بر ترتیب دریافت مانند شکل زیر اجرا میشوند. امکان تغییر ترتیب فرمانها جهت بهبود عملکرد وجود ندارد از این رو از لحاظ عملکرد الگوریتم موثری نیست.
برای مشاوره رایگان و یا پیاده سازی راهکارهای پشتیبان گیری و ذخیره سازی با کارشناسان شرکت APK تماس بگیرید. |
- Seek Time Optimization: فرمانها براساس جابجاییهای Read/Write Head که برای بهبود عملکرد صورت میگیرند اجرا میشوند که ممکن است باعث تغییر ترتیب فرمانها شود. بدون Seek Time Optimization، فرمانها به ترتیبی که دریافت شدهاند اجرا میشود. به عنوان مثال، همانطور که در شکل زیر نشان داده شده فرمانها به ترتیب A، B، C و D اجرا میشوند. جابجایی Radial مورد نیاز Head برای اجرای فرمان C درست پس از A کمتر از حالتی است که برای B نیاز است. همانطور که در شکل نشان داده شده، با این الگوریتم ترتیب اجرای فرمانها بصورت A، B، C و D است.
- Access Time Optimization: برای بهبود عملکرد، فرمانها براساس ترکیب Seek Time Optimization و تحلیل تاخیر چرخشی انجام میشوند.
Command Queuing همچنین میتواند بر Disk Controllerها نیز پیادهسازی گردد و این امر باعث تقویت Command Queuing پیادهسازی شده در Controllerهای Front-End میشود. برخی مدلهای SCSI و Driveهای Fiber Channel دارای Command Queuing پیادهسازی شده در Controllerهای خود هستند.
Cache
Cache یک جز اصلی در تقویت عملکرد I/O در یک سیستم هوشمند ذخیرهسازی بوده و نقش حافظه Semiconductor را دارد که در آن دادهها بطور موقت قرار داده میشوند تا زمان لازم برای درخواستهای I/O دریافتی از Host کاهش یابد. Cache با ایزولهسازی Hostها از تاخیرات مکانیکی مربوط به Diskهای فیزیکی که کندترین اجزای یک سیستم ذخیرهساز هوشمند هستند، عملکرد این سیستم را بهتر میکند. دسترسی به دادهها از یک Disk فیزیکی معمولا چند میلیثانیه زمان میبرد که دلیل آن Seek Timeها و تاخیر چرخشی است. اگر برای هر عملیات I/O دسترسی به یک Disk توسط Host صورت گیرد، درخواستها Queue میشوند که منجر به پاسخ دیرهنگام میشود. دسترسی به دادهها از Cache کمتر از یک میلیثانیه زمان میبرد و دادههای Write ابتدا در Cache قرار میگیرند و سپس در دیسک مورد نظر Write میشوند. پس از آنکه دادهها بطور ایمن در Cache قرار گرفتند، Host فورا تایید میشود.
ساختار Cache
Cache در صفحات یا Slotها سازمانبندی میشود که کوچکترین واحد اختصاصی Cache هستند. اندازه یک Cache براساس اندازه I/O برنامه کاربردی پیکربندی میشود. Cache شامل Data Store و Tag RAM بوده و درحالی که Data-Store دادهها را نگه میدارد، Tag RAM موقعیت دادهها در Data Store و Disk را مانند شکل زیر پیگیری میکنند. ورودیها در Tag RAM نشان میدهند که دادهها در کجای Cache یافت شده و به کجای Disk تعلق دارند. Tag RAM شامل یک Dirty Bit Tag است که بیان میکند دادهها در Cache به Disk سپرده شدهاند یا خیر. علاوه بر آن، Tag RAM شامل اطلاعات مبتنی بر زمان است مانند زمان آخرین دسترسی که برای شناسایی اطلاعات Cache شده که برای مدت طولانی مورد دسترسی قرار نگرفتهاند و شاید حذف شوند مورد استفاده قرار میگیرد.
خواندن عملیات با Cache
زمانی که یک Host یک درخواست Read را صادر کند، کنترلر Front-End به Tag RAM دسترسی پیدا میکند تا تعیین کند آیا دادههای لازم در Cache موجود هستند یا خیر. اگر دادههای درخواستی در Cache یافت شوند، نامش Read Cache Hit یا Read Hit بوده و دادهها بدون هیچگونه عملیات Disk بطور مستقیم مانند شکل زیر به Host ارسال میگردند. این امر پاسخ سریع به Host را فراهم میکند یعنی حدود یک میلیثانیه و اگر دادههای درخواستی در Cache یافته نشوند، نامش Cache Miss بوده و دادهها باید از Disk خوانده شوند. کنترلر Back-End به Disk مناسب دسترسی داشته و دادههای مورد درخواست را فراهم میکند. سپس دادهها در Cache قرار گرفته و در نهایت از طریق کنترلر Front-End به Host ارسال میشوند. Cache Missها زمان پاسخگویی I/O را افزایش میدهند.
از الگوریتم Pre-Fetch یا Read-Ahead زمانی استفاده میشود که درخواستهای Read ترتیبی باشند و در این حالت یک مجموعه از Blockهای مرتبط و مجاور گردآوری میشوند. Blockهای دیگری که هنوز توسط Host مورد درخواست واقع نشدهاند از سوی Disk خوانده شده و از قبل در Cache قرار میگیرند. بعدا زمانی که Host این Blockها را درخواست کند، عملیات Read بصورت Read Hit خواهد بود و این فرآیند زمان پاسخگویی را بطور بالقوهای برای Host کاهش میدهد. سیستم هوشمند ذخیرهساز اندازههای ثابت و متغییر Pre-Fetch را ارائه میدهد و در نوع ثابت، این سیستم یک تعداد ثابتی از دادهها را Pre-Fetch میکند که این حالت زمانی که اندازههای I/O یکپارچه هستند بسیار مناسب است. در Pre-Fetchهای متغیر، سیستم هوشمند ذخیرهساز تعداد متغیری از درخواستهای Host را Pre-Fetch میکند. Pre-Fetch نمودن حداکثری به قیمت I/O دیگر باعث محدودیت تعداد Blockهای دادهها میشود که میتوانند جهت جلوگیری از مشغولیت Disk ،Pre-Fetch شوند.
عملکرد Read از لحاظ نرخ Read Hit یا نرخ Hit بصورت درصد بیان میگردد و این نرخ تعداد Read Hitها با درنظرگیری تعداد درخواستهاست. نرخ read Hit بالاتر عملکرد Read را بهبود میبخشد.
Read Hit و Read Miss
عملیات Write با Cache
عملیات Write با Cache در مقایسه با Writeکردن مستقیم به Disk دارای مزیت بهبود عملکرد است و زمانی که برای Write شدن یک I/O به Cache و بعد تایید آن صرف میشود یعنی از جنبه Hostبسیار کمتر از حالتی است که بطور مستقیم به Disk بخواهد Write شود. همچنین Writeهای ترتیبی فرصتهایی برای بهینهسازی ایجاد میکنند زیرا بسیاری از Writeهای کوچکتر میتوانند با استفاده از Cache برای انتقالات بزرگتر به هم بپیوندند.
یک عملیات Write با Cache به طرق زیر صورت میگیرد:
- Write-Back Cache: دادهها در Cache قرار میگیرند و یک تاییدیه فورا به Host ارسال میگردد. سپس، دادههای چندین Write به Intelligent Storage System 77 در Disk ارسال میشوند. زمانهای پاسخگویی Write بسیار سریعتر هستند زیرا عملیات Write از تاخیرات مکانیکی Disk جداست. اما با این حال، در صورت خرابی Cache، دادههای سپرده نشده در خطر از دست رفتن هستند.
- Write-Through Cache: دادهها در Cache قرار گرفته و فورا در دیسک Write میشوند که به دنبال آن یک تاییدیه به Host ارسال میگردد. از آنجایی که دادهها در حین رسیدن به Disk سپرده میشوند، خطر از دست دادن دادهها کم است اما بخاطر عملیات Disk زمان پاسخگویی بیشتر خواهد بود.
میتوان تحت شرایط خاصی مانند Write I/O با اندازه بالا از Cache صرف نظر نمود. در این پیادهسازی، اگر اندازه درخواست I/O بیشتر از اندازه از قبل تعریف شده باشد، که نام این رویداد Write Aside Size است، Writeها بطور مستقیم به Disk انتقال مییابند تا تاثیر Writeهای بزرگ که سهم زیادی از Cache را استفاده میکنند کمتر شود. این امر در محیطی که منابع Cache مورد Constrain شدن قرار گرفتهاند و باید برای I/Oهای کوچک و تصادفی در دسترس باشند بسیار مفید است.