บทความนี้แสดงตัวอย่างการทดสอบโดยใช้โปรแกรม wget โหลดไฟล์ผ่าน squid เพื่อดูผลของการตั้งค่า cache size ต่างๆ ว่ามีผลต่อการโหลดไฟล์ การ HIT cache อย่างไร
ในแต่ละการทดสอบ มีการแสดงไฟล์ log ของ squid ด้วย คือไฟล์
- access_log (/var/log/squid/access_log) เก็บข้อมูลการใช้งาน proxy ว่ามาจากเครื่อง “client” ไหน เข้าเว็บไซต์ไหน รวมทั้งบอกผลการ HIT cache หรือไฟล์ที่โหลดนั้น มีอยู่ใน cache หรือยัง
- store_log (/var/log/squid/store.log) เก็บรายละเอียดการสร้าง “SWAPOUT” หรือลบ “RELEASE” ไฟล์ cache
เครื่องที่ใช้ทดสอบ
- web client: 192.168.1.2
- web server: 192.168.1.1
- proxy: 192.168.1.254
คอนฟิกของ squid ในส่วน cache size
maximum_object_size_in_memory 8 KB maximum_object_size 4096 KB cache_dir ufs /var/spool/squid 100 16 256
คอนฟิก proxy ของโปรแกรม wget
เพื่อให้โปรแกรม wget โหลดไฟล์ผ่าน proxy ต้องสร้างไฟล์ .wgetrc ใน home directory ของผู้ใช้ที่รันคำสั่ง wget แล้วใส่คอนฟิกดังนี้
[root@fc11-64min ~]# cat .wgetrc http_proxy = http://192.168.1.254:3128/
คำอธิบาย
- 192.168.1.254 คือ ip ของ proxy
- 3128 คือพอร์ตของ proxy
ทดลองโหลดไฟล์ขนาด 7k
เริ่มต้นทดลองโหดลไฟล์ขนาด 7k (กิโลไบต์) ซึ่งน้อยกว่าค่า “maximum_object_size_in_memory” ที่ตั้งไว้ 8 KB
โหลดไฟล์ขนาด 7k ครั้งที่ 1 ขึ้น “TCP_MISS” หมายถึง squid ไม่มีไฟล์นี้อยู่ใน cache เมื่อโหลดเสร็จ squid จะเก็บไฟล์ไว้ใน cache ด้วย “SWAPOUT”
[root@fc11-64min ~]# wget http://192.168.1.1/files/tfile-7k.bin
==> access.log <==
1248507942.812 17 192.168.1.2 TCP_MISS/200 7417 GET http://192.168.1.1/files/tfile-7k.bin - DIRECT/192.168.1.1 application/octet-stream
==> store.log <==
1248507942.810 SWAPOUT 00 00000001 3F277563988F72945705D5ED41526CA2 200 1248507942 1248505810 -1 application/octet-stream 7000/7000 GET http://192.168.1.1/files/tfile-7k.bin
โหลดไฟล์ขนาด 7k ครั้งที่ 2 ขึ้น “TCP_MEM_HIT” หมายถึง squid มีไฟล์นี้ใน cache บน memory แล้ว สามารถดึงไฟล์จาก memory ได้เลย
[root@fc11-64min ~]# wget http://192.168.1.1/files/tfile-7k.bin
==> access.log <==
1248507971.779 0 192.168.1.1 TCP_MEM_HIT/200 7424 GET http://192.168.1.1/files/tfile-7k.bin - NONE/- application/octet-stream
ทดลองโหลดไฟล์ขนาด 9k
ทดลองโหลดไฟล์ 9k ซึ่งมีขนาดมากกว่า “maximum_object_size_in_memory” แต่ยังน้อยกว่าค่า “maximum_object_size” ซึ่งตั้งไว้ 4096 KB (4 Mbytes)
โหลดไฟล์ขนาด 9k ครั้งที่ 1 ขึ้น “TCP_MISS” หมายถึง squid ไม่มีไฟล์นี้อยู่ใน cache เมื่อโหลดเสร็จ squid จะเก็บไฟล์ไว้ใน cache ด้วย “SWAPOUT”
[root@fc11-64min ~]# wget http://192.168.1.1/files/tfile-9k.bin
==> access.log <==
1248508182.804 3 192.168.1.2 TCP_MISS/200 12418 GET http://192.168.1.1/files/tfile-9k.bin - DIRECT/192.168.1.1 application/octet-stream
==> store.log <==
1248508182.804 SWAPOUT 00 00000002 CEFDC390A1EE023973CBADC1A78D73C7 200 1248508182 1248508174 -1 application/octet-stream 12000/12000 GET http://192.168.1.1/files/tfile-9k.bin
โหลดไฟล์ขนาด 9k ครั้งที่ 2 ขึ้น “TCP_HIT” หมายถึง squid มีไฟล์นี้ใน cache แต่อยู่บน disk
[root@fc11-64min ~]# wget http://192.168.1.1/files/tfile-9k.bin
==> access.log <==
1248508281.238 0 192.168.1.2 TCP_HIT/200 12424 GET http://192.168.1.1/files/tfile-9k.bin - NONE/- application/octet-stream
ทดลองโหลดไฟล์ขนาด 5M
ทดลองโหลดไฟล์ 5M ซึ่งมีขนาดน้อยกว่า “maximum_object_size” ซึ่งตั้งไว้ 4096 KB (4 Mbytes)
โหลดไฟล์ขนาด 5k ครั้งที่ 1 ขึ้น “TCP_MISS” หมายถึง squid ไม่มีไฟล์นี้อยู่ใน cache เมื่อโหลดเสร็จ เนื่องจากมีขนาดไฟล์ใหญ่กว่าขนาด “maximum_object_size” โปรแกรม squid จะไม่เก็บไฟล์ไว้ใน cache ขึ้น “RELEASE”
[root@fc11-64min ~]# wget http://192.168.1.1/files/tfile-5M.bin
1248509577.012 197 192.168.1.2 TCP_MISS/200 5000422 GET http://192.168.1.1/files/tfile-5M.bin - DIRECT/192.168.1.1 application/octet-stream
==> store.log <==
1248509577.012 RELEASE -1 FFFFFFFF 81F5E27F6F4A2D2CFB41BF48899FBFE5 200 1248509576 1248505985 -1 application/octet-stream 5000000/5000000 GET http://192.168.1.1/files/tfile-5M.bin
ไม่ว่าจะโหลดไฟล์ที่มีขนาดใหญ่กว่า “maximum_object_size” โปรแกรม squid จะไม่เก็บ cache ไว้เลย
ขนาดรวมไฟล์ cache ทั้งหมด
เมื่อเก็บไฟล์ cache มากจนกระทั่งมีขนาดไฟล์รวมทั้งหมด มากกว่าที่คอนฟิกไว้ในส่วน “cache_dir” ในที่นี้คอนฟิกไว้ 100 (100Mbytes)
ตรวจสอบขนาดของ cache_dir ด้วยคำสั่ง du
[root@fc11-64min ~]# cd /var/spool/squid [root@fc11-64min squid]# du -sh 105M .
เมื่อทดลองโหลดไฟล์เพิ่มเติม squid จะทำการเก็บไฟล์ใหม่ที่โหลดเสร็จ “SWAPOUT” แต่เนื่องจากขนาดมากกว่า “cache_dir” ดังนั้นจำเป็นต้องลบบางไฟล์ใน cache ออกไป ด้วย “RELEASE”
เช่นทดลองไฟล์ 4M เพิ่มเติม
[root@fc11-64min ~]# wget http://192.168.1.1/files/tfile-4M.bin
==> access.log <==
1248509870.685 91 192.168.1.2 TCP_MISS/200 4000422 GET http://192.168.1.1/files/tfile-4M.bin - DIRECT/192.168.1.1 application/octet-stream
==> store.log <== 1248509870.683 SWAPOUT 00 0000000E 93E941E788327BE1F0E0F028A1114B49 200 1248509870 1248505053 -1 application/octet-stream 4000000/4000000 GET http://192.168.1.1/files/tfile-4M.bin 1248509870.758 RELEASE 00 00000007 E43BBBD8932CA6266141E6BFFB46EFCC ? ? ? ? ?/? ?/? ? ?