最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux進程CPU綁定優(yōu)化與實踐過程

 更新時間:2025年07月11日 17:03:15   作者:紅廉騎士獸  
Linux支持進程綁定至特定CPU核心,通過sched_setaffinity系統(tǒng)調(diào)用和taskset工具實現(xiàn),優(yōu)化緩存效率與上下文切換,提升多核計算性能,適用于實時系統(tǒng)、負載均衡及高性能計算場景

簡介:Linux操作系統(tǒng)支持將進程綁定到特定的CPU核心,以提升性能和負載平衡。

本主題涵蓋多核處理器、CPU親和性設置、系統(tǒng)調(diào)用 sched_setaffinity sched_getaffinity 的使用,以及 taskset 命令行工具的實際操作。

通過 cpu_test.cpp 示例,學習如何在C++中控制CPU綁定,并探討在性能優(yōu)化、負載均衡和避免干擾方面的應用場景。

1. 多核處理器及并行計算概念

在現(xiàn)代計算機系統(tǒng)中,多核處理器已成為標準配置,為并行計算提供了強大的物理基礎。

理解多核處理器的工作原理及其在并行計算中的角色對于IT專業(yè)人員來說至關(guān)重要。

本章節(jié)將從基礎開始,逐步深入,介紹多核處理器的架構(gòu),以及并行計算的基本概念。

1.1 多核處理器架構(gòu)概述

多核處理器由兩個或更多獨立的處理器核心組成,這些核心共享緩存和其他資源,但能在同一芯片上獨立執(zhí)行計算任務。

與單核處理器相比,多核處理器能在相同功耗下提供更高的處理能力。

1.2 并行計算的含義及重要性

并行計算是指同時使用多個計算資源解決計算問題的過程。

在多核處理器上實現(xiàn)并行計算,能夠顯著提高數(shù)據(jù)處理速度和算法效率。

這對于處理大數(shù)據(jù)集和執(zhí)行復雜計算任務尤為重要。

1.3 并行計算模型和策略

并行計算模型描述了并行算法的設計和執(zhí)行策略。它包括任務分解、任務分配、任務調(diào)度和結(jié)果收集等關(guān)鍵步驟。理解不同的并行計算模型,如共享內(nèi)存模型和分布式內(nèi)存模型,對于設計高效的并行程序至關(guān)重要。

在下一章,我們將詳細介紹CPU親和性的基本概念,它是并行計算中的一個重要技術(shù),用于改善進程調(diào)度,提高系統(tǒng)性能。

2. CPU親和性(CPU Affinity)概念及應用

2.1 CPU親和性的基本概念

2.1.1 CPU親和性的定義與重要性

CPU親和性是操作系統(tǒng)中用于控制進程或線程與特定CPU核心綁定的功能,以保證執(zhí)行的連續(xù)性和數(shù)據(jù)的本地性,從而優(yōu)化性能。它允許系統(tǒng)管理員和程序員決定哪些進程或線程應在特定的CPU核心上運行,或者不應在哪些核心上運行。

為什么CPU親和性重要呢?其原因包括:

  • 緩存利用效率: CPU緩存用于存儲臨時數(shù)據(jù),如果進程在不同的CPU核心間頻繁切換,緩存利用效率會降低,因為每個核心的緩存內(nèi)容不同。通過親和性,可以使得進程更頻繁地在同一個核心上運行,從而充分利用緩存。
  • 減少上下文切換開銷: 上下文切換涉及保存當前進程狀態(tài)和加載另一個進程狀態(tài),此操作耗時且資源密集。通過限制進程只能在指定核心上運行,可以減少不必要的上下文切換。
  • 提升實時性能: 在實時操作系統(tǒng)中,需要確保關(guān)鍵任務能夠及時響應。CPU親和性可以幫助確保關(guān)鍵進程獲得必要的CPU時間片,從而保證實時性。

2.1.2 CPU親和性的技術(shù)原理

技術(shù)原理圍繞進程調(diào)度與CPU核心間的關(guān)系展開。當操作系統(tǒng)調(diào)度一個進程執(zhí)行時,若該進程綁定了特定的CPU核心,那么調(diào)度器會將進程投遞到指定的核心上執(zhí)行。相反,如果沒有進行綁定,則調(diào)度器可以將進程分配到任意一個空閑的CPU核心上。

實現(xiàn)CPU親和性通常涉及以下步驟:

  1. 進程識別: 首先,操作系統(tǒng)需要識別出需要進行CPU親和性設置的進程或線程。
  2. 綁定指令: 調(diào)度器使用特定的內(nèi)核函數(shù)或系統(tǒng)調(diào)用將進程與CPU核心進行綁定。例如,在Linux中,可以使用 sched_setaffinity 系統(tǒng)調(diào)用。
  3. 調(diào)度決策: 在進行調(diào)度決策時,調(diào)度器會考慮到進程的親和性設置,盡量避免違反綁定的約束。

CPU親和性的實現(xiàn)技術(shù)對于系統(tǒng)性能有著直接的影響,因此在多核處理器廣泛使用的當下,成為系統(tǒng)調(diào)優(yōu)的關(guān)鍵技術(shù)之一。

2.2sched_setaffinity系統(tǒng)調(diào)用應用

2.2.1sched_setaffinity的定義與作用

sched_setaffinity 是一個在類Unix操作系統(tǒng)中實現(xiàn)的系統(tǒng)調(diào)用,用于設置進程的CPU親和性掩碼。

其作用是限制一個或多個進程只能在一組特定的CPU核心上運行,從而進行性能調(diào)優(yōu)或滿足特定的資源分配需求。

2.2.2sched_setaffinity使用方法詳解

要使用 sched_setaffinity ,你需要提供以下幾個參數(shù):

  • pid :進程ID,表示要修改親和性的進程標識符。
  • cpusetsize :CPU集大小,表示接下來傳入的cpumask長度。
  • cpumask :CPU掩碼,是一個位掩碼,指明了哪些CPU核心是允許進程運行的。

一個典型的使用示例代碼如下:

#include <sched.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/syscall.h>

#define CPU_SETSIZE 4 /* 最大支持4個CPU */
#define NCPUS 4 /* CPU個數(shù) */

int main(int argc, char *argv[]) {
    cpu_set_t mask;
    int i, ret, n;
    // 清空mask
    CPU_ZERO(&mask);

    // 將第2個和第4個CPU加入到mask中(數(shù)組索引從0開始計數(shù))
    CPU_SET(1, &mask); // 使進程只能運行在CPU 1上
    CPU_SET(3, &mask); // 使進程只能運行在CPU 3上

    n =syscall(SYS_sched_setaffinity, 0, sizeof(mask), &mask);
    if (n == -1) {
        perror("sched_setaffinity");
        exit(EXIT_FAILURE);
    }

    // 檢查實際的CPU親和性掩碼
    ret = syscall(SYS_sched_getaffinity, 0, sizeof(mask), &mask);
    if (ret == -1) {
        perror("sched_getaffinity");
        exit(EXIT_FAILURE);
    }

    printf("CPU affinity mask is %08x %08x\n", mask.__bits[0], mask.__bits[1]);
    return 0;
}

在上述示例中,首先創(chuàng)建了一個cpu_set_t類型的變量mask,然后使用 CPU_SET 宏設置進程能運行的CPU核心。

調(diào)用 syscall 函數(shù)執(zhí)行 sched_setaffinity 系統(tǒng)調(diào)用,并用 sched_getaffinity 查詢以確認設置是否成功。

2.2.3 使用sched_setaffinity進行進程CPU綁定案例分析

假設有一個計算密集型的應用程序,它對性能有很高的要求。通過使用 sched_setaffinity ,我們可以指定該應用程序的進程只在特定的CPU核心上運行,這樣可以減少緩存未命中的情況,同時避免了不必要的上下文切換。

在這個案例中,假設系統(tǒng)有4個CPU核心,我們將進程綁定在第1個和第3個核心上運行。下面是具體的步驟:

  1. 初始化CPU掩碼,并設置需要綁定的CPU核心。
  2. 調(diào)用 sched_setaffinity 設置進程的親和性。
  3. 運行該進程并觀察性能改善情況。
  4. 使用 sched_getaffinity 確認綁定設置是否生效。

通過性能監(jiān)控工具(如 top 、 htop perf )觀察進程的CPU使用情況,可以看到該進程只在指定的核心上運行,而沒有分散到其他核心。

2.3sched_getaffinity系統(tǒng)調(diào)用應用

2.3.1sched_getaffinity的定義與作用

sched_getaffinity 是一個系統(tǒng)調(diào)用,用于獲取進程的CPU親和性掩碼。

它的作用是返回一個位掩碼,表示進程可以在哪些CPU核心上運行,有助于管理員或開發(fā)者檢查和驗證進程的CPU綁定情況。

2.3.2sched_getaffinity使用方法詳解

使用 sched_getaffinity 需要以下參數(shù):

  • pid :進程ID,需要查詢親和性的進程標識符。
  • cpusetsize :與 sched_setaffinity 中相同,表示cpumask的大小。
  • cpumask :用于存儲返回的CPU親和性掩碼。

示例代碼如下:

#include <sched.h>
#include <stdio.h>
#include <unistd.h>

#define CPU_SETSIZE 4 /* 最大支持4個CPU */

int main(int argc, char *argv[]) {
    cpu_set_t mask;
    int i, n;
    // 清空mask
    CPU_ZERO(&mask);
    // 獲取進程的CPU親和性掩碼
    n = sched_getaffinity(0, sizeof(mask), &mask);
    if (n == -1) {
        perror("sched_getaffinity");
        exit(EXIT_FAILURE);
    }

    printf("CPU affinity mask is %08x %08x\n", mask.__bits[0], mask.__bits[1]);
    for (i = 0; i < CPU_SETSIZE; i++) {
        if (CPU_ISSET(i, &mask)) {
            printf("Process can run on CPU %d\n", i);
        } else {
            printf("Process cannot run on CPU %d\n", i);
        }
    }
    return 0;
}

代碼首先定義了一個cpu_set_t類型的變量mask,然后使用 CPU_ZERO 宏清空該掩碼。

接著調(diào)用 sched_getaffinity 獲取當前進程的CPU親和性掩碼,并通過循環(huán)打印出可以運行的CPU核心。

2.3.3 使用sched_getaffinity查看進程CPU親和性的案例分析

假設我們有一個運行中的多線程服務器應用,我們需要確認其工作線程是否正確地綁定到了預期的CPU核心上。

在這種情況下,我們可以使用 sched_getaffinity 來獲取并檢查每個工作線程的CPU親和性掩碼。

具體步驟如下:

  1. 對于每個工作線程,調(diào)用 sched_getaffinity 來獲取它的CPU親和性掩碼。
  2. 打印并檢查掩碼,確認每個工作線程是否僅綁定到了預期的CPU核心。
  3. 如果有線程的親和性掩碼不正確,可以通過 sched_setaffinity 調(diào)整它們。

通過這種檢查,可以確保線程負載在CPU核心間得到適當?shù)姆峙?,并避免不必要的線程移動導致性能下降。

3.taskset工具使用及實例

3.1taskset工具概述

taskset 是Linux系統(tǒng)中的一個命令行工具,允許用戶顯示或設置一個進程的CPU親和性。CPU親和性是指進程或線程在特定的CPU上運行的趨勢,它有助于減少進程在不同CPU之間的遷移,從而提高系統(tǒng)性能。

3.1.1taskset的功能與應用場景

taskset 常用于以下場景:

  • 系統(tǒng)優(yōu)化 :當需要確保關(guān)鍵進程總是在特定的CPU核心上運行,以最小化上下文切換開銷。
  • 任務隔離 :為特定進程分配固定的CPU資源,以避免和其它進程的資源競爭。
  • 實時性能保證 :在實時系統(tǒng)中,保證某些實時進程不會因為CPU調(diào)度問題而延遲執(zhí)行。

taskset 的主要作用是讓進程或線程在指定的CPU核心上運行,這在多核處理器系統(tǒng)中尤為有用。它通過設置進程的CPU掩碼(CPU mask)來實現(xiàn),CPU掩碼是一個位掩碼,指明了進程可以在哪些CPU核心上運行。

3.1.2taskset命令的基本語法

taskset 命令的基本用法如下:

taskset [OPTIONS] [MASK] [COMMAND] [ARGS]
  • MASK :可以是十六進制或十進制格式的CPU掩碼,用于指定進程可以運行的CPU核心。
  • COMMAND :需要設置CPU親和性的命令。
  • ARGS :傳遞給 COMMAND 的參數(shù)。
  • [OPTIONS] :可選參數(shù),例如 -p ,可以在不重啟進程的情況下動態(tài)改變現(xiàn)有進程的CPU親和性。

接下來,我們深入探討使用 taskset 工具的具體實例。

3.2taskset使用實例

3.2.1 使用taskset修改進程CPU親和性實例

假設我們有一個計算密集型的程序 myapp ,我們希望它只在一個核心上運行。

可以使用如下命令來實現(xiàn):

taskset -c 1 ./myapp

這里 -c 1 表示設置CPU親和性掩碼為 0000 0010 (二進制表示),即只允許進程運行在第二個核心上(核心編號從0開始)。如果系統(tǒng)是多核的,更改數(shù)字可以指定不同的核心。

3.2.2 使用taskset綁定進程至特定CPU的實踐操作

更復雜的例子是同時指定多個核心。假設我們希望程序 myapp 可以運行在CPU 1和CPU 3上,可以使用如下命令:

taskset -c 2,6 ./myapp

這里 -c 2,6 表示設置CPU掩碼為 0100 0100 (二進制表示),即程序 myapp 可以運行在第二個和第四個核心上(分別編號為1和3,因為從0開始計數(shù))。

為了驗證 taskset 命令是否正確工作,可以使用以下命令來查看進程的CPU親和性:

taskset -p <pid>

其中 <pid> 是進程的ID。該命令會輸出當前的CPU親和性掩碼。

以下是 taskset 命令在實際工作中的一個表格示例,詳細展示不同選項和參數(shù)的使用場景:

| 命令選項 | 描述 | 示例 | |-------|-----|-----| | -c | 為進程指定CPU親和性掩碼 | taskset -c 0,2-3 myapp 將myapp綁定到CPU 0,2,3 | | -p | 針對已有進程的CPU親和性設置 | taskset -p 0x01 myapp 修改myapp進程的CPU親和性 | | -V | 顯示版本信息 | taskset -V 顯示taskset的版本信息 |

在接下來的章節(jié)中,我們將深入探討 cpu_test.cpp 示例程序的詳細分析,以及多核CPU綁定在不同應用場景中的優(yōu)化策略和最佳實踐。

4. Linux下進程綁定多CPU運行的代碼實踐

4.1cpu_test.cpp示例程序探討

4.1.1 程序設計思路分析

在探討 cpu_test.cpp 示例程序之前,我們首先需要理解該程序的設計意圖與執(zhí)行邏輯。該程序的主要目的是為了演示如何在Linux環(huán)境下,通過代碼實現(xiàn)將特定的進程綁定至一個或多個CPU核心上運行。為了達到這個目的,程序需要完成以下幾個核心步驟:

  1. 獲取CPU核心信息: 程序通過讀取系統(tǒng)文件或利用系統(tǒng)API來獲取CPU的核心信息,這包括CPU的總數(shù)量以及每個核心的邏輯標識符。
  2. 進程創(chuàng)建: 程序需要創(chuàng)建或指定一個進程,這個進程將被用于后續(xù)的CPU綁定操作。
  3. CPU親和性設置: 使用Linux提供的系統(tǒng)調(diào)用或API,如 sched_setaffinity ,來設置進程的CPU親和性,使進程只在特定的CPU核心上運行。
  4. 運行測試: 進行一系列測試,以驗證設置是否成功,并觀察進程在綁定CPU核心后的行為和性能表現(xiàn)。

4.1.2cpu_test.cpp代碼結(jié)構(gòu)與功能解讀

接下來,我們逐步深入到 cpu_test.cpp 的代碼結(jié)構(gòu)中去,了解其功能實現(xiàn):

#include <stdio.h>
#include <sched.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/sysinfo.h>

int main(int argc, char *argv[]) {
    // 獲取CPU核心數(shù)量
    int num_cpus = get_nprocs();
    cpu_set_t cpuset;
    // 初始化CPU集合為空
    CPU_ZERO(&cpuset);
    // 綁定進程至第一個CPU
    CPU_SET(0, &cpuset);
    // 設置進程CPU親和性
    if (sched_setaffinity(0, sizeof(cpuset), &cpuset) == -1) {
        perror("sched_setaffinity");
        exit(EXIT_FAILURE);
    }
    // 進程執(zhí)行代碼
    // ...

    return 0;
}

上述代碼主要完成以下幾個任務:

  • 獲取CPU核心數(shù)量 get_nprocs 函數(shù)用于獲取當前系統(tǒng)中可用的CPU核心數(shù)量。
  • 初始化CPU集合 CPU_ZERO 用于初始化一個 cpu_set_t 類型的數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)用于表示CPU的集合。通過該操作,我們將這個集合清空,為后續(xù)添加CPU核心做準備。
  • 設置CPU親和性 sched_setaffinity 函數(shù)用于設置當前進程的CPU親和性。該函數(shù)的參數(shù)包括進程標識符、CPU集合的大小以及CPU集合本身。在這個例子中,我們將進程綁定到第一個CPU核心(CPU 0)。
  • 執(zhí)行業(yè)務代碼 :在設置了CPU親和性之后,業(yè)務代碼將被執(zhí)行,但在此處代碼中為了簡潔,具體的業(yè)務代碼部分被省略。

4.1.3cpu_test.cpp測試結(jié)果與分析

為了驗證上述程序的效果,需要對程序運行結(jié)果進行分析。測試通常包括以下幾個步驟:

  1. 編譯并運行程序 :首先確保程序編譯無誤后,運行該程序。
  2. 檢查進程運行情況 :使用 top htop 命令檢查進程是否真的運行在指定的CPU核心上。
  3. 性能測試 :可使用 perf 等性能分析工具,觀察綁定后進程的性能表現(xiàn)是否有所提升。

測試結(jié)果表明,當 cpu_test.cpp 被正確編譯并運行后,指定的進程將會被鎖定在設定的CPU核心上運行。這種綁定可以顯著提高多核心處理器上并行計算任務的效率。

4.2 CPU綁定應用場景分析

在現(xiàn)代的計算機系統(tǒng)中,CPU綁定技術(shù)可以被應用在多種場景下以優(yōu)化性能。以下是幾個具體的應用場景:

4.2.1 多CPU綁定在高性能計算中的應用

在高性能計算領(lǐng)域,科學計算任務往往需要大量的計算資源。通過將計算任務綁定到多個CPU核心上,可以顯著提高并行計算的效率。例如,在進行大規(guī)模數(shù)值模擬時,各計算節(jié)點可以獨立并行地處理各自的數(shù)據(jù)集,從而加快整體計算速度。

4.2.2 多CPU綁定在實時系統(tǒng)中的應用

實時系統(tǒng)對任務的執(zhí)行時間有嚴格的要求。通過CPU綁定技術(shù),可以確保實時任務在特定的CPU核心上運行,以避免任務切換帶來的延遲,確保任務在規(guī)定的時間內(nèi)完成。

4.2.3 多CPU綁定在服務器負載均衡中的應用

在服務器中,負載均衡是一個關(guān)鍵的性能優(yōu)化手段。通過合理地將服務器上的進程綁定到不同的CPU核心上,可以避免某些CPU核心過載,而其他核心空閑的情況,從而提高服務器的總體處理能力。

通過以上各部分的分析,我們可以看到在Linux環(huán)境下,通過代碼實踐將進程綁定到特定的CPU核心上運行,是提升系統(tǒng)性能的重要手段。理解并掌握 cpu_test.cpp 示例程序的開發(fā)思路與方法,對于從事并行計算、實時系統(tǒng)開發(fā)或服務器優(yōu)化的IT專業(yè)人士而言,具有重要的參考價值。

5. 綜合優(yōu)化策略與最佳實踐

5.1 綜合優(yōu)化策略

5.1.1 進程調(diào)度與CPU親和性優(yōu)化

優(yōu)化CPU親和性可以提高多核處理器上進程的性能。進程調(diào)度器在多核環(huán)境中決定進程運行于哪個CPU核心。通過合理分配,可以減少緩存未命中(cache misses)、提高緩存利用率和降低進程間競爭。在Linux中, taskset 命令和 sched_setaffinity 系統(tǒng)調(diào)用就是實現(xiàn)CPU親和性的工具。

在實際應用中,可以通過調(diào)整進程調(diào)度優(yōu)先級和CPU親和性來優(yōu)化系統(tǒng)性能。例如,對于對實時性要求高的進程,可以設置較高的優(yōu)先級,并將其綁定到一個或多個核心上運行。而對于計算密集型任務,可以利用親和性避免進程頻繁遷移,減少上下文切換的開銷。

5.1.2 系統(tǒng)資源分配與管理策略

系統(tǒng)資源的合理分配對于優(yōu)化多核處理器系統(tǒng)的性能至關(guān)重要。需要考慮的資源包括CPU時間、內(nèi)存帶寬、I/O吞吐量等。合理的資源管理策略能夠保證關(guān)鍵任務獲得足夠的資源,同時避免資源浪費。

資源管理可以分為靜態(tài)和動態(tài)兩種。靜態(tài)管理是根據(jù)預期的負載和任務特性在系統(tǒng)啟動時預分配資源;動態(tài)管理則是在系統(tǒng)運行時根據(jù)實際需求實時調(diào)整資源分配。Linux提供了諸如cgroups、cpuset等工具來實現(xiàn)資源的動態(tài)管理。

5.2 多核CPU綁定的最佳實踐

5.2.1 性能測試與調(diào)優(yōu)步驟

進行性能測試和調(diào)優(yōu)時,首先要確立性能指標,如響應時間、吞吐量等。然后,選擇合適的工具來監(jiān)控和記錄關(guān)鍵性能指標。常見的性能測試工具包括 perf 、 htop mpstat 。

測試過程中,可以逐步調(diào)整CPU親和性設置,觀察不同配置下性能的變化。這個過程可以使用循環(huán)或自動化腳本,快速收集不同配置下的性能數(shù)據(jù)。數(shù)據(jù)分析后,選擇最優(yōu)的CPU親和性配置。

5.2.2 實際部署與運維考量

在實際部署時,應考慮到應用的運行特性以及系統(tǒng)的實時負載情況。根據(jù)這些信息,選擇合適的時間窗口進行維護和調(diào)整,以降低對用戶的影響。運維團隊應該定期檢查性能指標,確保系統(tǒng)的穩(wěn)定性。

部署階段,運維人員需要密切監(jiān)控系統(tǒng)日志和性能指標,及時發(fā)現(xiàn)并解決可能的問題。同時,也需要考慮系統(tǒng)的擴展性,為未來的升級和維護留出空間。

5.2.3 常見問題的診斷與解決

在多核CPU系統(tǒng)中,可能會遇到一些性能問題,如資源競爭、死鎖或CPU使用不平衡等。當遇到性能瓶頸時,應先確定瓶頸是由CPU親和性問題還是其他因素導致的。

診斷問題通常需要收集系統(tǒng)運行時的數(shù)據(jù),使用工具如 perf 來記錄硬件性能計數(shù)器信息,并通過分析這些信息找到問題的根源。對于資源競爭問題,可以嘗試調(diào)整進程的CPU親和性設置,或者使用cgroups來限制某些進程的資源使用。

對于CPU使用不平衡的問題,需要檢查系統(tǒng)的負載分配策略和調(diào)度器配置。必要時,可以通過調(diào)整調(diào)度策略或者重新設計應用架構(gòu)來解決。

總結(jié)

本章到此為止,我們探討了優(yōu)化CPU親和性以及最佳實踐的方法。但是需要注意,這些策略需要根據(jù)具體情況進行調(diào)整。接下來的內(nèi)容將涉及深入討論,我們將會探索更多關(guān)于多核處理器及并行計算的高級話題。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

河间市| 蕉岭县| 正蓝旗| 新郑市| 嵩明县| 永平县| 泽州县| 齐河县| 三明市| 贵溪市| 柳林县| 永靖县| 郁南县| 申扎县| 阿坝县| 泰宁县| 禄丰县| 武强县| 湘潭市| 石棉县| 蚌埠市| 贞丰县| 台中县| 望江县| 忻城县| 永仁县| 汝州市| 洪泽县| 广东省| 治县。| 将乐县| 鲜城| 宿州市| 霍邱县| 游戏| 长沙市| 台南县| 无极县| 周至县| 玉门市| 南昌市|