diff --git a/weed-fs/src/cmd/weed/master.go b/weed-fs/src/cmd/weed/master.go index a87c8f312..d514c0847 100644 --- a/weed-fs/src/cmd/weed/master.go +++ b/weed-fs/src/cmd/weed/master.go @@ -8,6 +8,7 @@ import ( "pkg/replication" "pkg/storage" "pkg/topology" + "runtime" "strconv" "strings" "time" @@ -35,6 +36,7 @@ var ( confFile = cmdMaster.Flag.String("conf", "/etc/weedfs/weedfs.conf", "xml configuration file") defaultRepType = cmdMaster.Flag.String("defaultReplicationType", "000", "Default replication type if not specified.") mReadTimeout = cmdMaster.Flag.Int("readTimeout", 5, "connection read timeout in seconds") + mMaxCpu = cmdVolume.Flag.Int("maxCpu", 0, "maximum number of CPUs. 0 means all available CPUs") ) var topo *topology.Topology @@ -107,9 +109,9 @@ func dirJoinHandler(w http.ResponseWriter, r *http.Request) { } func dirStatusHandler(w http.ResponseWriter, r *http.Request) { - m := make(map[string]interface{}) - m["Version"] = VERSION - m["Topology"] = topo.ToMap() + m := make(map[string]interface{}) + m["Version"] = VERSION + m["Topology"] = topo.ToMap() writeJson(w, r, m) } @@ -133,6 +135,10 @@ func volumeGrowHandler(w http.ResponseWriter, r *http.Request) { } func runMaster(cmd *Command, args []string) bool { + if *mMaxCpu < 1 { + *mMaxCpu = runtime.NumCPU() + } + runtime.GOMAXPROCS(*mMaxCpu) topo = topology.NewTopology("topo", *confFile, *metaFolder, "weed", uint64(*volumeSizeLimitMB)*1024*1024, *mpulse) vg = replication.NewDefaultVolumeGrowth() log.Println("Volume Size Limit is", *volumeSizeLimitMB, "MB") diff --git a/weed-fs/src/cmd/weed/volume.go b/weed-fs/src/cmd/weed/volume.go index 38946396e..046272ee7 100644 --- a/weed-fs/src/cmd/weed/volume.go +++ b/weed-fs/src/cmd/weed/volume.go @@ -9,6 +9,7 @@ import ( "os" "pkg/operation" "pkg/storage" + "runtime" "strconv" "strings" "time" @@ -36,15 +37,16 @@ var ( vpulse = cmdVolume.Flag.Int("pulseSeconds", 5, "number of seconds between heartbeats, must be smaller than the master's setting") maxVolumeCount = cmdVolume.Flag.Int("max", 5, "maximum number of volumes") vReadTimeout = cmdVolume.Flag.Int("readTimeout", 5, "connection read timeout in seconds") + vMaxCpu = cmdVolume.Flag.Int("maxCpu", 0, "maximum number of CPUs. 0 means all available CPUs") store *storage.Store ) func statusHandler(w http.ResponseWriter, r *http.Request) { - m := make(map[string]interface{}) - m["Version"] = VERSION - m["Volumes"] = store.Status() - writeJson(w, r, m) + m := make(map[string]interface{}) + m["Version"] = VERSION + m["Volumes"] = store.Status() + writeJson(w, r, m) } func assignVolumeHandler(w http.ResponseWriter, r *http.Request) { err := store.AddVolume(r.FormValue("volume"), r.FormValue("replicationType")) @@ -248,6 +250,10 @@ func distributedOperation(volumeId storage.VolumeId, op func(location operation. } func runVolume(cmd *Command, args []string) bool { + if *vMaxCpu < 1 { + *vMaxCpu = runtime.NumCPU() + } + runtime.GOMAXPROCS(*vMaxCpu) fileInfo, err := os.Stat(*volumeFolder) if err != nil { log.Fatalf("No Existing Folder:%s", *volumeFolder)