วันเสาร์ที่ 9 กรกฎาคม พ.ศ. 2565

รู้จัก parameter ที่สำคัญใน config.yaml

บทความนี้ post ลง facebook เมื่อวันที่ 6 Mar 2022

ในช่วง 2 week ที่ผ่านมา chia blockchain เจอมรสุม dust storm ทำให้ farmer อย่างเราๆ เดี้ยงกันเป็นแถวๆ ไม่ว่าจะเป็น point ของ pool operator ลดลงอย่างน่าใจหายทำให้รายได้ของเราลดน้อยลงอย่างที่ควรจะเป็น หรือปัญหาพื้นที่ของ drive C โตขึ้นอย่างรวดเร็ว … วันนี้ผมจะมาอธิบายวิธีการแก้ปัญหาง่ายๆ โดยเล่นกับ config file ที่ชื่อ “config.yaml”

ปกติเวลาเรา farm ภายใต้ระบบปฏิบัติการ Windows โดยใช้โปรแกรม chia ผ่าน GUI ในการ farm … หลายคนอาจจะไม่ทราบว่าตัวโปรแกรม chia เมื่อเปิดมาแล้วมันไม่ได้ทำการ farm อย่างเดียว มันทำงานหลายอย่างมาก เช่น ทำตัวเป็น full node ที่ต้อง sync blockchain ให้ได้เท่าๆ กับ farmer รายอื่นๆ … หลังจาก sync full node complete มันก็จะทำหน้าที่ farm จาก file plot ของเรา … นอกจากนั้นยังมีโปรแกรม wallet ที่คอย update transaction ใน blockchain ด้วย ..

เห็นไหมครับมันทำหน้าที่หลายอย่างมาก ถ้าเรา manage config file ของเราไม่ดี ทุกอย่างมันจะมะรุมมะตุ้มกันที่ HDD หรือ SSD ที่เดียวแล้วจะทำให้ประสิทธิภาพในการ farm ของเราลดลง 

หลายคนแก้ไขปัญหานี้ด้วยการ farm โดยใช้ CLI (command line interface) กับเครื่องที่เราตั้งใจ farm อย่างเดียว จึงเป็นการปิดการทำงานใน function ที่ไม่จำเป็นไม่ให้ทำงานและไม่ให้กิน resource ของเครื่องเรา … แต่การใช้ CLI ค่อนข้างใช้ยากต้องมีพื้นฐานกันนิดหนึ่งการใช้ GUI จึงใช้ง่ายกว่า 

เมื่อเราจำเป็นต้องใช้ GUI แล้วหลบเลี่ยงปัญหาการใช้ทรัยากรร่วมกันระหว่าง feature ต่างๆ จึงจำเป็นต้องรู้จัก parameter บางตัวท่สำคัญในโปรแกรม chia ครับ … โดย file config ของโปรแกรม chia จะอยู่ที่ 

c:\users\<user name ที่ login>\.chia\mainnet\config\config.yaml 

เราสามารถเปิด file config.yaml โดยใช้โปรแกรม notepad หรือ text editor อื่นๆ … parameter ตัวแรกที่ผมอยากให้รู้จักคือ database ของ full node … ให้ search คำว่า “full_node” เราจะเจอประโยคนี้ครับ

full_node:
  database_path: db/blockchain_v1_CHALLENGE.sqlite

parameter นี้จะบอกว่า database ของ chia blockchain จะถูกเก็บอยู่ที่ folder c:\users\<user name ที่ login>\.chia\mainnet\db … เห็นไหมครับว่า database จะถูกเก็บลง drive C ถ้า drive C ของเราเป็น HDD ตอนนี้ล่ะครับเครื่อง farm ของเราจะเหนื่อยมากโดยเฉพาะตอนที่กำลังโดน dust storm เพราะ HDD มันจะถูก update ถี่ๆ รัวๆ เลย เพราะ HDD ต้องทำการ farm … update chia blockchain database … update wallet database และ update log file

สำหรับผม เพื่อลดปัญหาการแย่งใช้ทรัพยากร ผมจึง copy folder 

c:\users\<user name ที่ login>\.chia\mainnet\db 

ไปไว้ที่ 

f:\.chia\mainnet\db 

ซึ่ง drive F ของผมเป็น SSD … แล้วแก้ไข parameter ใน config file เป็น

full_node:
  database_path: f:/.chia/mainnet/db/blockchain_v1_CHALLENGE.sqlite

*** ระวังน่ะครับ เครื่องหมายใน sub folder คือ “/” …. อย่าพลาดน่ะครับ 

แสดงว่าหลังจากนี้ database ของ blockchain จะถูก update ลง SSD และ “จะ update” เฉพาะ chia blockchain เท่านั้น ทำให้ SSD ของผมเก็บเฉพาะข้อมูลที่ผมควรจะเห็บเท่านั้นจึงเป็นการประหยัดพื้นที่ SSD โดยอัตโนมัติ 

parameter ต่อไป 

peer_db_path: db/peer_table_node.sqlite

ผมได้เปลี่ยน parameter ตรงนี้เป็น

peer_db_path: f:/.chia/mainnet/db/peer_table_node.sqlite

peer_db_path คือ file database ที่เก็บ full node ข้างๆ ไว้ … คือทุกๆ ครั้งที่เรา restart โปรแกรม chia ตัวโปรแกรมจะทำการบันทึก full node ข้างๆ ที่เราเคย sync ไว้ก่อนลงที่ database นี้ พอเวลาเราเปิดโปรแกรม chia อีกครั้งตัวโปรแกรม chia ก็จะพยายามติดต่อ full node ข้างๆ ที่เคยบันทึกไว้เพื่อให้โปรแกรม sync ได้เร็วขึ้น … การที่ peer_db_path เก็บลง SSD จะทำให้เราดึงข้อมูลจาก database เร็วมากขึ้น 

parameter ต่อไป

wallet:
  database_path: db/blockchain_wallet_v1_CHALLENGE_KEY.sqlite

ผมได้ทำการ copy folder 

c:\users\<user name ที่ login>\.chia\mainnet\wallet 

ไปไว้ที่ 

f:\.chia\mainnet\wallet 

และทำการแก้ config เป็น

wallet:
  database_path: f:/.chia/mainnet/wallet/db/blockchain_wallet_v1_CHALLENGE_KEY.sqlite

*** ระวังน่ะครับ เครื่องหมายใน sub folder คือ “/” …. อย่าพลาดน่ะครับ 

parameter wallet จะเป็นการเก็บ database ของ transaction ใน blockchain … ซึ่ง drive F ของผมก็คือ SSD ทำให้ wallet ของผมจะถูกบันทึกข้อมูลเร็วมากๆ แม้ว่า chia blockchain จะโดน dust storm โจมตีก็ตาม 

parameter ต่อไป 

wallet_peers_path: wallet/db/wallet_peers.sqlite

ผมก็แก้เป็น

wallet_peers_path: f:/.chia/mainnet/wallet/db/wallet_peers.sqlite

ซึ่ง wallet_peers ก็เหมือนกับ full node ที่เก็บ node ข้างๆ ที่ไว้ใช้ sync กับ wallet 

จะเห็นว่าตอนนี้ database ของเครื่อง farm ผมรันอยู่บน SSD เพียวๆ และ SSD ของผมก็ไม่ได้เอาไปใช้อย่างอื่นเลย ดังนั้นทรัพยากร SSD จึงถูกใช้สำหรับ update blockchain กับ wallet เท่านั้น การทำงานจึงจะเร็วมากกว่ารันบน HDD ที่แชร์กับ feature ต่างๆ ของโปรแกรม chia 

และเวลาที่ผม backup database ผมก็จะ copy folder f:\.chia\mainnet\ ไปไว้ที่ HDD ที่ปลอดภัย … อย่างน้อย เดือนล่ะครั้ง …

parameter ต่อไป

logging: &id001
    log_filename: log/debug.log
    log_level: INFO
    log_maxfilesrotation: 7

ซึ่ง parameter นี้ เป็นการจัดการเกี่ยวกับ log file และผมไม่ได้แก้ไขอะไร ดังนั้นตัว log file ของผมจะถูกเก็บลง drive C ที่ c:\users\<user name ที่ login>\.chia\mainnet\log … ซึ่งแยกตัวออกมาจาก SSD อย่างสิ้นเชิง ทำให้ SSD ไม่ได้เก็บข้อมูล log file 

สำหรับ log_maxfilesrotation: 7 คือจะเก็บข้อมูล debug สูงสุด 7 files … โดยปกติ log file จะถูก update จนมีขนาด 20M พอครบ 20M มันจะเปลี่ยนชื่อ file เป็น debug.log.1 สำหรับ backup log file เพื่อที่จะลดขนาดของ file ไม่ให้ใหญ่จนเกินไป .. และตัว backup ก็จะมีสูงสุดอยู่ที่ 7 file ตาม ตัว parameter log_maxfilesrotation … ถ้า drive C เราเยอะเราสามารถแก้เป็น 30 file ได้เพื่อที่จะวิเคราะห์ performance ของ farm เรา 

และนี้คือ parameter ที่ผมเล่น .. จริงๆ จะมี parameter บางตัวอีกเช่นการเปลี่ยนจาก mainnet ไปที่ testnet สำหรับการทดสอบต่างๆ …แต่ผมคิดว่าไม่น่าสำคัญสำหรับการทำ farm จึงขอข้ามไปก่อน .. ผมหวังว่าบทความนี้จะทำให้หลายคนเข้าในวิธีการ setup โปรแกรม chia ของเราได้มากขึ้นน่ะครับ … และด้วยวิธีการ set แบบนี้เราไม่จำเป็นต้องใช้ SSD ความจุสูง เอาแค่ 240G หรือแม้แต่ 128G ก็น่าจะเพียงพอครับ 

ขอบคุณทุกท่านที่ติดตาม … happy farming ครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น